抽象类的UnmarshalException

时间:2012-10-05 08:33:00

标签: java xml inheritance jaxb moxy

我在使用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。

0 个答案:

没有答案