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 をインスタンス化しようとします。

私の推測では、これはグラスフィッシュ 3.1.2 に追加された eclipselink moxy のバグであるということです (しかし、それについては間違っている可能性があります)。

私はすでに @XmlSeeAlso タグを追加しようとしましたが、それは役に立ちませんでした。@XmlRootElement と @XmlElementRef も使用してみましたが、生成された A のスタブで getId() メソッドを生成することはできませんでした。基本型を返す getId 。

4

0 に答える 0