2011-07-22 8 views
4

JAXBの新機能です。私は、その要素の1の内側にシリアライズされたオブジェクトが含まれているXMLドキュメントを持っている:JAXBを使用してXML文書の単一要素をアンマーシャリングする

<?xml> 
<structure> 
    ...blah-blah 
    <serializedElement> 
    ... JAXB xml block 
    </serializedElement> 
    </structure> 
</xml> 

私はそのような要素を非整列化するにはどうすればよいですか?

私は次のように書いた:

org.w3c.dom.Document doc = db.parse(new StringInputStream(rawXml)); 
org.w3c.dom.Element obj = (org.w3c.dom.Element) doc.getElementsByTagName("serializedElement").item(0); 
JAXBElement<MyJaxBObject> je = um.unmarshal(obj, MyJaxBObject.class); 
System.out.println(je.getValue()); 

が、これは常に(正しいクラスのが)空の値オブジェクトを返します。

私は間違っていますか?

ありがとうございました!

答えて

4

は、以下のことを試してみてください。最後に、

MyJaxBObject je = javax.xml.bind.JAXB.unmarshal(serializedElementAsString, MyJaxBObject.class); 
+0

ありがとうございます!しかし、私は今失われています - なぜあなたは私の例のようにアンマーシャラーを作成するwhneを動かさないのですか? –

+0

問題は、unmarshall(Element、class)を呼び出すときです。 unmarshall(Source、class)を呼び出すと、すべて正常です。何かご意見は? –

+0

これまでのところ、JAXB APIにはメソッド 'unmarshall(Element、class)'はありません。 http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/api/javax/xml/bind/Unmarshaller.html – alexblum

2

[OK]をクリックします。問題は欠けていた

dbf.setNamespaceAware(true); 

この行を追加するとすべて正常に動作します。

関連する問題