1

こんにちは、誰か次の問題を解決する方法を説明してください。私はこのようなクラス構造を持っています..

 public class RequestWrapper implements Seriallizable
 {
    private List<Request> requests = null;
    @XmlElementRefs( { @XmlElementRef(type = Class1.class), @XmlElementRef(type = Class2.class), .. And so on } )
    public List<Request> getRequests()
    {
        return requests;
    }
 }

この Request クラスは Abstract クラスです。この Request クラスを拡張するプロジェクト内の多くのクラス。このため、多くの @XmlElementRef アノテーションを宣言してコードを追加することはできません。

この @XmlElementRefs タグが、宣言された @XmlElementRef のみを検索する代わりに、クラス パス全体を検索できる方法はありますか。

この投稿にすぐに返信してください...

4

1 に答える 1

2

サブクラスJAXBContextを意識させる

JAXB (JSR-222)実装は、リフレクションまたはクラスパスのスキャンによって、マップされた型のサブクラスを判別できません。それらを含めるように JAXB に明示的に指示する必要があります。これは、次のいずれかの方法で実行できます。

オプション #1 -@XmlSeeAlso注釈

注釈は、@XmlSeeAlsoマップされたクラスで利用して、他のクラスを含めることができるメカニズムです。これは通常、JAXB がマップされたクラスとして扱う必要があるサブクラスを取り込むために利用されます。

@XmlSeeAlso({Class1.class, Class2.class})
public class Request {
}

オプション #2 - 作成時に含めるJAXBContext

JAXBContext jc = JAXBContext.newInstance(Class1.class, Class2.class);

申請中@XmlElementRef

JAXBContextのすべてのサブクラスを認識している限りRequest、マッピングを次のように単純化できます。

@XmlElementRef
public List<Request> getRequests()
{
    return requests;
}

詳細については

于 2012-09-26T10:28:36.830 に答える