我在使用glassfish 3.1.1运行的webservice时出现问题,但在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 a CId。
我还有其他几个地方,我有抽象类,webservice序列化工作得很好,我在生成的xml中看到了一个xsi:type限定符。但是,在这种情况下,没有添加xsi:type限定符,我得到类似的内容:
<a xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="B">
<id>
...
</id>
...
</a>
因此,解组不能识别id的类型,并尝试实例化抽象Id而不是子类。
我最好的猜测是,这是eclipselink moxy中添加到glassfish 3.1.2的错误(但可能是错误的) 有人知道如何解决这个问题吗?
我已经尝试添加更多@XmlSeeAlso标记,但这没有帮助。 我也试过使用@XmlRootElement和@XmlElementRef,但我无法在生成的Stubs上为A生成getId()方法。我生成的webservice存根只有方法 getBId和getCId在A类上,而不是返回基类型的getId。