JAXB 没有按预期编组。 DTO 中的对象(超类)为空
JAXB does not marshall as expected. An object(superclass) whitin a DTO is empty
经过几个小时的尝试和错误,我想在这里问问是否有人可以帮助我解决我的问题。
场景:
- Java EE 服务器 (JBoss 7.2),Apache CXF 作为 JAX-WS 实现。
- ServiceA(服务端点)和 ServiceB(扩展服务 A 和服务端点)
- 三个持久化项目:Common,PersistenceA依赖Common,PersistenceB依赖PersistenceA。
- Projekt 中有一个 Class
UUIDIdentified
所有持久性 Class 的超级 class(它提供 JPA @ID
)普通
在 ServiceA 中 Class 是一个方法:public List<DTO> getData(UUIDIdentified value);
Server读取一些Object,都是UUIDIdentified的子类型,目的是将Object打包到DTO中。
DTO 看起来像:
@XmlAccessorType(XmlAccessType.FIELD)
public class DTO{
private static final long serialVersionUID = 1L;
@XmlElement(name = "uuididentified")
UUIDIdentified object;
public UUIDIdentified getObject() {
return object;
}
public void setObject(final UUIDIdentified object) {
this.object = object;
}
}
如果我查看 SOAP 响应,我发现 <uuididentified>
标记中没有数据。我对 JAXB 的理解不是很好,但据我所知,UUIDIdentified 的 "real" 实例及其类型对于 JAXBContext 是未知的。
我可以通过将 @XmlSeeAlso({TypeA.class,TypeB.class})
添加到 UUIDIdentified
class 来解决这个问题(我估计)。但那是我不能做的,因为如果我这样做,Project Common 将依赖于 Projects PersistenceA/B.
我该如何解决这个问题。我怎么能对 JAXB(可能在 xml 配置文件中)说它在添加 UUIDIdentified 时必须将 ClassA/B 添加到 JAXBContext?
我在 SEI 上尝试了一些东西,比如 jaxb.index 文件、ObjectFactorys、@XmlSeeAlso,但我不知道这是否是正确的方法。
在我尝试自己 marshall/unmarshal 对象后, @XmlJavaTypeAdapter
我遇到了问题的根源。它与 JAXBContect 无关。问题是我的对象是一个 Hibernate-Envers 读取对象,envers 生成代理对象(即使它们是 EAGER)。
因此编组器无法从 Proxy 对象中提取实际值。
经过几个小时的尝试和错误,我想在这里问问是否有人可以帮助我解决我的问题。
场景:
- Java EE 服务器 (JBoss 7.2),Apache CXF 作为 JAX-WS 实现。
- ServiceA(服务端点)和 ServiceB(扩展服务 A 和服务端点)
- 三个持久化项目:Common,PersistenceA依赖Common,PersistenceB依赖PersistenceA。
- Projekt 中有一个 Class
UUIDIdentified
所有持久性 Class 的超级 class(它提供 JPA@ID
)普通
在 ServiceA 中 Class 是一个方法:public List<DTO> getData(UUIDIdentified value);
Server读取一些Object,都是UUIDIdentified的子类型,目的是将Object打包到DTO中。
DTO 看起来像:
@XmlAccessorType(XmlAccessType.FIELD)
public class DTO{
private static final long serialVersionUID = 1L;
@XmlElement(name = "uuididentified")
UUIDIdentified object;
public UUIDIdentified getObject() {
return object;
}
public void setObject(final UUIDIdentified object) {
this.object = object;
}
}
如果我查看 SOAP 响应,我发现 <uuididentified>
标记中没有数据。我对 JAXB 的理解不是很好,但据我所知,UUIDIdentified 的 "real" 实例及其类型对于 JAXBContext 是未知的。
我可以通过将 @XmlSeeAlso({TypeA.class,TypeB.class})
添加到 UUIDIdentified
class 来解决这个问题(我估计)。但那是我不能做的,因为如果我这样做,Project Common 将依赖于 Projects PersistenceA/B.
我该如何解决这个问题。我怎么能对 JAXB(可能在 xml 配置文件中)说它在添加 UUIDIdentified 时必须将 ClassA/B 添加到 JAXBContext?
我在 SEI 上尝试了一些东西,比如 jaxb.index 文件、ObjectFactorys、@XmlSeeAlso,但我不知道这是否是正确的方法。
在我尝试自己 marshall/unmarshal 对象后, @XmlJavaTypeAdapter
我遇到了问题的根源。它与 JAXBContect 无关。问题是我的对象是一个 Hibernate-Envers 读取对象,envers 生成代理对象(即使它们是 EAGER)。
因此编组器无法从 Proxy 对象中提取实际值。