使用JAXB和Eclipselink Moxy从Web Service方法返回JPA实体

时间:2012-12-05 14:36:10

标签: web-services java-ee jaxb websphere moxy

我正在开发一个部署在WebSphere应用服务器上的Java EE应用程序。在这个应用程序中,我有一个Web服务,通​​过它我希望将JPA实体对象作为方法调用的结果进行传输。问题来自实体关系生成的循环。

我使用了Eclipselink Moxy来解决JPA实体之间的反向引用问题。但是,由于我不是自己调用JAXB实现,而是WAS自己调用,所以@XmlInverseReference注释会被忽略。我不想使用@XmlTransient注释,因为对我来说,获取所有引用的实体作为方法结果非常重要。

是否可以将Moxy用作默认的WebSphere JAXB实现?或者,我可以为我的实体创建JAXB适配器,然后在运行时添加@XmlTransient注释吗?我需要这个,因为我有返回引用其他实体的实体的方法,但也返回引用的实体及其对数据库关系源的引用。

1 个答案:

答案 0 :(得分:1)

注意:我是EclipseLink JAXB (MOXy)主管,是JAXB (JSR-222)专家组的成员。

JAX-WS实现中没有要求他们能够交换备用JAXB实现。在JAX-WS中作为JAXB提供程序不支持MOXy的环境中的一个选项是使用标准Provider机制。

您可以尝试替换@XmlInverseReference注释的一个技巧是利用unmarshal事件回调机制。这涉及将以下方法放在子对象上。在该方法的实现中,您可以设置对父级的引用。

void afterUnmarshal(Unmarshaller, Object parent);

注意:您需要使用@XmlTransient注释该属性。

MOXy可以在以下环境中用作JAX-WS的JAXB提供程序: