2012-04-28 123 views
0

我正在创建一个Grails应用程序,该应用程序对返回XML的Web服务具有只读访问权限。除了用户名/密码外,此应用程序的全部数据将来自此外部Web服务。Grails:将域类变量映射到Web API XML数据源

将我的域类中的变量映射到此数据源的最佳方法是什么?我发现了很多自定义ORM与数据库的例子,但没有XML例子。我在哪里编写逻辑来进行HTTP调用并提取字段?

任何和所有的帮助,非常感谢。

回答

3

我们非常成功地使用Spring web服务和MarkupBuilder/XmlSlurper。您可以使用WebServiceTemplate为给定的Uri创建一个Web服务客户端,并通过使用MarkupBuilder构建的XML发送您的请求。

这对于我们保留WSDL作为接口的中心描述,作为文档工件,没有代码生成和生成代码来维护,没有为jaxb绑定添加注释,没有数据对象具有很大的优势。

我们不使用域类,我们使用GPathResult直接获取通过Web服务调用的XML结果获得的GPathResult,因为以鸭子打字的方式,它相当于客户端到Java对象。但是,我们没有Web界面。如果你有一个web界面,我会创建一个

def toXml(MarkupBuilder b) { 
} 

方法命令对象,或者也许

myCommandObject as XML 

会的工作,这取决于您的WSDL的XSD架构。这样你就可以利用Grails数据绑定和验证。

对于视图的数据模型,可能传递一个duck-type的命令对象(兼容的XML对象)就足够了,所以你不必两种方法都编组。

另一个需要注意的是,当前版本的grails spring-ws插件已过期。我不认为它会因为老式的spring-security-core类别而在Grails 2.0中表现出色。好消息是,如果你只是建立一个客户端,你几乎不需要插件。只需包含最新的Spring Web服务jar并使用WebServiceTemplate.sendToEndpoint方法即可。

+0

谢谢。我在啜饮XML,但没有调查过使用Command Objects。我会放弃它。 – BadgerBadgerBadger 2012-05-02 01:45:43

+0

所以我想它的工作?感谢您接受答案! – loteq 2014-05-19 12:45:04

+0

对不起,花了这么长时间。仍然在学习礼仪。 – BadgerBadgerBadger 2014-05-19 20:40:36