java - 使用 Web 服务客户端 JAXB 生成的类作为 JPA 实体

标签 java spring web-services jpa jaxb

我正在开发一个项目,从 SOAP Web 服务检索数据并将其存储在数据库中以供以后使用 JPA 使用。目前,我使用 Spring WS 作为客户端,并使用 JAXB 生成 Web 服务类。

目标是将这些类(相当大)中包含的所有数据忠实地复制到数据库中,为此,将 JPA 注释应用于 JAXB 生成的类是很有吸引力的。从长远来看,这似乎很危险,因为生成的类看起来相当短暂,并且如果 wsdl 发生更改,我将在重新应用 jpa 注释的同时重新生成代码做大量工作。

另一个选项是让我的 Web 服务客户端将数据复制到我创建的 JPA 实体中,可能使用工厂模式。这将 JPA 持久性与 WSDL 设计者可能变化的突发奇想分开,并且在某种程度上感觉更安全。它还感觉更安全,因为实体类永远不会被构建任务覆盖。

这种情况的最佳做法是什么?显然,当需要大量数据传输对象时,过度解耦并不会带来好处,但这种情况有什么特殊之处吗? JAXB 创建的类是否应该仅在 Web 服务客户端中使用,并很快被更高级别的应用程序遗忘?

最佳答案

原则上不要更改 JAXB 生成的对象。正如您非常正确地指出的那样,这些都会随着 WSDL 的每一次微小更改而改变。

最受接受的过程是将 JAXB 对象和 JPA 实体解耦。相同的有两个主要优点

  1. 如果您觉得 JAXB 太慢或内存占用太大,您可以稍后更改数据绑定(bind)提供程序
  2. 您没有将 JPA 代码与 DB 代码绑定(bind)。因此,如果明天您的 WSDL 发生变化或您的数据库结构发生变化,这些都不会受到影响。

要在两者之间传输数据,您可以使用工厂模式或使用 bean 映射框架,例如

  1. Dozer
  2. Orika
  3. Other options

关于java - 使用 Web 服务客户端 JAXB 生成的类作为 JPA 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23257203/

相关文章:

java - 错误 : Could not connect to www. browserstack.com!响应代码:[对象对象]

java - 如何取消 Google App Engine 插件的身份验证?

java - JPA @Query java.lang.IllegalArgumentException :

java - Spring MVC 中的文件上传给出 NullPointerException

c# - 使用对象数组调用 Web 服务方法

java - 在 Java 编程语言中,哪种原始数据类型可用于保存货币或其他精确值?

java - 首先匹配最小嵌套部分的正则表达式

java - 内置通用功能的框架

objective-c - 使用二进制图像数据更新 CakePHP Web 服务

web-services - Foursquare 现在的商品掉了吗?