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

时间:2014-04-23 23:43:36

标签: java spring web-services jpa jaxb

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

目标是在数据库中忠实地复制这些类中包含的所有数据(相当大),为此,将JPA注释应用于JAXB生成的类是有点诱人的。从长远来看,这似乎很危险,因为生成的类看起来相当短暂,如果wsdl发生了变化,我会在重新生成代码时重新应用jpa注释做很多工作。

另一个选择是让我的webservice客户端将数据复制到我创建的JPA实体中,可能使用工厂模式。这将JPA持久性与WSDL设计者可能不断变化的想法分离开来,并且不知何故感觉更安全。它也感觉更安全,因为实体类永远不会被构建任务覆盖。

这种情况的最佳做法是什么?显然,当它意味着大量的数据传输对象时,过度的解耦并不会得到回报,但这种情况是否特殊? JAXB创建的类是否只能在Web服务客户端中使用,并且很快就会被更高级别的应用程序遗忘?

1 个答案:

答案 0 :(得分:1)

原则上不要更改JAXB生成的对象。正如您正确指出的那样,这些将随着WSDL的每一个小改动而改变。

最常被接受的过程是将JAXB对象与JPA实体分离。相同的

有两个主要优点
  1. 如果您认为JAXB太慢或内存过于密集,您可以在以后更改数据绑定提供程序
  2. 您没有将JPA代码绑定到数据库代码。因此,如果明天您的WSDL发生更改或您的数据库结构发生更改,则其中任何一个都不会受到影响。
  3. 要在2之间传输数据,您可以使用工厂模式或使用像

    这样的bean映射框架
    1. Dozer
    2. Orika
    3. Other options
相关问题