我正在开发要部署在 WebSphere 应用服务器上的 Java EE 应用程序。在此应用程序中,我有一个 Web 服务,我想通过它传输 JPA 实体对象作为方法调用的结果。问题来自实体关系生成的循环。
我使用 Eclipselink Moxy 来解决 JPA 实体之间的反向引用问题。但是,由于我不是自己调用 JAXB 实现,而是 WAS 调用它自己的实现,@XmlInverseReference 注释将被忽略。我不想使用 @XmlTransient 注释,因为获取所有引用的实体作为方法结果对我来说很重要。
是否可以使用 Moxy 作为默认的 WebSphere JAXB 实现?或者,我可以为我的实体创建 JAXB 适配器,然后在运行时添加 @XmlTransient 注释吗?我需要这个,因为我有返回引用其他实体的实体的方法,但也返回引用的实体及其对数据库关系源的引用。
最佳答案
注意:我是 EclipseLink JAXB (MOXy) JAXB (JSR-222) 的领导和成员专家组。
在 JAX-WS 实现中没有要求它们能够在备用 JAXB 实现中进行交换。在不支持将 MOXy 作为 JAX-WS 中的 JAXB 提供程序的环境中,一种选择是使用标准的 Provider
机制。
您可以尝试替换对 @XmlInverseReference
注释的需要的一个技巧是利用解码事件回调机制。这涉及将以下方法放在子对象上。在该方法的实现中,您可以设置对父级的引用。
void afterUnmarshal(Unmarshaller, Object parent);
注意:您需要使用 @XmlTransient
注释该属性。
MOXy 可在以下环境中用作 JAX-WS 的 JAXB 提供程序:
关于web-services - 使用 JAXB 和 Eclipselink Moxy 从 Web 服务方法返回 JPA 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13725580/