我正在创建一个对返回 XML 的 Web 服务具有只读访问权限的 Grails 应用程序。除用户名/密码外,此应用程序的全部数据都来自此外部 Web 服务。
将我的域类中的变量映射到此数据源的最佳方法是什么?我找到了许多带有数据库的自定义 ORM 示例,但没有找到 XML 示例。我将在哪里编写进行 HTTP 调用和提取字段的逻辑?
非常感谢任何和所有帮助。
我正在创建一个对返回 XML 的 Web 服务具有只读访问权限的 Grails 应用程序。除用户名/密码外,此应用程序的全部数据都来自此外部 Web 服务。
将我的域类中的变量映射到此数据源的最佳方法是什么?我找到了许多带有数据库的自定义 ORM 示例,但没有找到 XML 示例。我将在哪里编写进行 HTTP 调用和提取字段的逻辑?
非常感谢任何和所有帮助。
我们非常成功地使用带有 MarkupBuilder/XmlSlurper 的 Spring Web 服务。您可以使用 WebServiceTemplate 为给定的 Uri 创建 Web 服务客户端,并通过使用 MarkupBuilder 构建的 XML 发送您的请求。
这对我们来说具有很大的优势,可以将 WSDL 作为接口的中心描述,作为文档工件,无需代码生成和生成的代码需要维护,无需为 jaxb 绑定添加注释,无需数据对象。
我们不使用域类,我们使用通过直接读取 Web 服务调用的 XML 结果获得的 GPathResult,因为以鸭子类型的方式,客户端等效于 java 对象。但是,我们没有网络界面。如果你有一个网络界面,我会用一个
def toXml(MarkupBuilder b) {
}
方法,或者也许
myCommandObject as XML
会起作用,具体取决于您的 wsdl 的 XSD 架构。这样您就可以利用 grails 数据绑定和验证。
对于视图的数据模型,可能传递一个鸭子类型的命令对象(兼容的 XML 对象)就足够了,因此您不必双向编组。
另一个警告是 grails spring-ws 插件的当前版本已经过时了。我不认为它会与 grails 2.0 配合得很好,因为那里有旧的 spring-security-core 类。好消息是,如果你只是构建一个客户端,你几乎不需要插件。只需包含最新的 Spring Web 服务 jar 并使用 WebServiceTemplate.sendToEndpoint 方法。