我在 glassfish 3.1.1 上运行的 web 服务有问题,但在 glassfish 3.1.2.2 上运行失败
@XmlSeeAlso({
B.class,
BId.class,
C.class,
CId.class
})
public abstract class A {
private Id id;
}
public abstract class Id {
}
public class B extends A {}
public class C extends A {}
public class BId extends Id {}
public class CId extends Id {}
B 类在运行时得到一个 BId,C 是一个 CId。
我还有其他几个地方,我有抽象类,并且 web 服务序列化工作得很好,我在生成的 xml 中看到了一个 xsi:type 限定符。但是,在这种情况下,没有添加 xsi:type 限定符,我得到类似:
<a xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="B">
<id>
...
</id>
...
</a>
因此解组无法识别 id 的类型,并尝试实例化抽象 Id 而不是子类。
我最好的猜测是,这是添加到 glassfish 3.1.2 中的 eclipselink moxy 中的一个错误(但可能是错误的)有人知道如何解决这个问题吗?
我已经尝试添加更多 @XmlSeeAlso 标签,但这并没有帮助。我还尝试使用@XmlRootElement 和@XmlElementRef,但我无法让它在为A 生成的存根上生成getId() 方法。我生成的web 服务存根只有类A 上的getBId 和getCId 方法,而不是a getId 返回基本类型。