Распаковка одного элемента XML-документа с помощью JAXB

Я очень новичок в 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());  

но это всегда возвращает пустой объект значения (хотя и правильного класса).

Что я делаю неправильно?

Спасибо!


person Anton Polyakov    schedule 22.07.2011    source источник


Ответы (2)


Попробуйте следующее:

MyJaxBObject je = javax.xml.bind.JAXB.unmarshal(serializedElementAsString, MyJaxBObject.class);
person alexblum    schedule 22.07.2011
comment
Спасибо, это работает! Но я сейчас запутался - почему это не работает, когда вы создаете unmarshaller, как в моем примере? - person Anton Polyakov; 25.07.2011
comment
Итак, проблема в том, что я вызываю unmarshall(Element, class). Когда я вызываю unmarshall (Source, class), все в порядке. Есть предположения? - person Anton Polyakov; 25.07.2011
comment
Пока я вижу, что в JAXB API нет метода unmarshall(Element, class). скачать. oracle.com/docs/cd/E17802_01/веб-сервисы/веб-сервисы/ - person alexblum; 25.07.2011

Хорошо, наконец. Проблема была в отсутствии

dbf.setNamespaceAware(true);

После добавления этой строки все работает нормально.

person Anton Polyakov    schedule 25.07.2011