1

注: 私は秘密保持契約を結んでいるため、意味をなさない変数名を使用する必要があります。ごめん

こんにちは!私は抽象クラスを持っています:

public abstract class A {

    public abstract List<String> someMethod();

}

そして、その抽象クラスを拡張する 2 つのクラス:

@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@XmlRootElement(name = "BField")
@XmlAccessorType(XmlAccessType.FIELD)
public class B extends A {
...
}

@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@XmlRootElement(name = "CField")
@XmlAccessorType(XmlAccessType.FIELD)
public class C extends A {
...
}

次に、コードのどこかに、これら 2 つのクラスのリストを作成するクラスがあります。ほとんどの場合、次のようになります。

@XmlElementWrapper(name = "MyStuffData")
    @XmlAnyElement(lax = true)
    @XmlElementRefs({
            @XmlElementRef(name = "B", type = B.class),
            @XmlElementRef(name = "C", type = C.class),
    })
    private List<A> myStuff;

の中身はmyStuffBでもCでもいいですよね?そのリストをどのように反復処理しますか? 石鹸リクエストからデータを取得しているので、これを行う方法について本当に混乱しています。私は試した:

for(A a: myStuff){
       ...some code here...
}

ただし、この例外が発生しています:

Caused by: java.lang.ClassCastException: org.apache.xerces.dom.ElementNSImpl cannot be cast to some.package.here.A

lax=true で問題を解決できると聞きましたが、それでも同じエラーが発生します。不可解なのは、かなり正確なリストのサイズを取得できることですが、それを反復処理することはできません。どんな助けでも大歓迎です。申し訳ありませんが、私は説明が得意ではないので、Googleでこの種のものを見つけるのはちょっと面倒です.

4

2 に答える 2

0

myStuff実際には is not List<A>(or List<B>) but,のように見えますがList<ElementNSImpl>、ここで、 instance はororg.apache.xerces.dom.ElementNSImplの実際のインスタンスに対する何らかのラッパーのようです。BC

そのリストをデバッグして、B/Cから取得できるかどうかを確認できますorg.apache.xerces.dom.ElementNSImpl

于 2013-06-12T09:09:03.280 に答える