我正在创建一个Grails应用程序,它具有对返回XML的Web服务的只读访问权限。除了用户名/密码之外,此应用程序的全部数据都来自此外部Web服务。
将域类中的变量映射到此数据源的最佳方法是什么?我发现了许多自定义ORM与数据库的例子,但没有XML的例子。我在哪里写逻辑来进行HTTP调用并提取字段?
非常感谢任何和所有帮助。
答案 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方法。