2

我在 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 返回基本类型。

4

0 回答 0