4

xjcルート要素Aのタイプが である xsdを使用して Java クラスを生成しましたAType

jaxb によって生成されたルート要素はAType& クラスAが生成されていません。

その xsd に対応する xml をアンマーシャリングして JaxbElement をキャストしようとすると、キャスト例外がスローされます。

スニペット:

JAXBContext jaxbContext = JAXBContext.newInstance(Class.forName("AType"));
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
AType aType = (AType) unmarshaller.unmarshal(new ByteArrayInputStream(xmlString.getBytes()));

例外:

java.lang.ClassCastException: javax.xml.bind.JAXBElement

他のケースでも同じコードが適切に実行され、正常に逆シリアル化されます。

unmarshal()どのようなタイプのオブジェクトが得られるかを見つけるにはどうすればよいですか? この状況で何が問題なのかわかりません。フィールドを印刷してみましたjaxbElementが、あまり役に立ちませんでした。

4

2 に答える 2

8

ルート要素 (ここでは AType) のクラスにXmlRootElementアノテーションが含まれていない場合、返されたルート要素は JAXBElement にラップされ、そのgetValue()メソッドを使用してルート要素を取得する必要があります。

私の知る限り、ルート要素の型が匿名型の場合、XJC は XmlRootElement 注釈のみを生成します。

于 2012-05-18T12:24:19.283 に答える
1

これを試すことができます:

Object o = unmarshaller.unmarshal(...);
System.out.println(o.getClass().getName());
于 2012-05-18T12:18:51.547 に答える