Java 抽象类上的解组异常

Java 抽象类上的解组异常,java,xml,inheritance,jaxb,moxy,Java,Xml,Inheritance,Jaxb,Moxy,我对运行在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

我对运行在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 {}
类get在运行时是一个BId,C是一个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而不是子类

我最好的猜测是,这是添加到glassfish 3.1.2中的eclipselink moxy中的一个bug(但这可能是错误的) 有人知道如何解决这个问题吗

我已经尝试添加更多的@xmlseeals标记,但没有帮助。 我还尝试使用@XmlRootElement和@XmlElementRef,但我无法让它在为a生成的存根上生成getId()方法。我生成的webservice存根只有方法
类上的getBId和getCId,而不是返回基类型的getId。

MOXy不是GlassFish 3.1.2中默认的JAXB实现。除非您将服务配置为使用MOXy(请参阅:),否则您仍然在使用JAXB参考实现。感谢您提供的信息。然后我想我会尝试激活moxy,看看这是否解决了我的问题。moxy不是GlassFish 3.1.2中默认的JAXB实现。除非您将服务配置为使用MOXy(请参阅:),否则您仍然在使用JAXB参考实现。感谢您提供的信息。然后我想我会尝试激活moxy,看看这是否解决了我的问题。