Grails:将域类变量映射到Web API XML数据源

时间:2012-04-28 19:05:06

标签: grails mapping datasource

我正在创建一个Grails应用程序,它具有对返回XML的Web服务的只读访问权限。除了用户名/密码之外,此应用程序的全部数据都来自此外部Web服务。

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

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

1 个答案:

答案 0 :(得分:3)

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

这对我们来说具有很大的优势,可以将WSDL保持为接口的中心描述,作为文档工件,无需代码生成和生成的代码进行维护,不需要为jaxb绑定添加注释,也不需要数据对象。

我们不使用域类,我们使用通过直接篡改Web服务调用的XML结果而获得的GPathResult,因为它以鸭子类型的方式等同于客户端到java对象。但是,我们没有Web界面。如果你有一个Web界面,我会用

创建命令对象
def toXml(MarkupBuilder b) {
}

方法,或者

myCommandObject as XML 

会起作用,具体取决于你的wsdl的XSD架构。这样你就可以利用grails数据绑定和验证。

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

另一个警告是,当前版本的grails spring-ws插件已过时。我不认为它会与grails 2.0一起使用,因为旧的spring-security-core类。好消息是,如果你只是建立一个客户端,你几乎不需要插件。只需包含最新的spring Web服务jar并使用WebServiceTemplate.sendToEndpoint方法。