Преобразование объекта SOAPMessage в экземпляр аннотированного класса XmlType в Java - PullRequest
1 голос
/ 05 июня 2009

Я работаю с SOAP с использованием пакета javax.xml.soap.

У меня есть javax.xml.soap.SOAPMessage объект, который соответствует ответу на мой запрос SOAP, и я должен преобразовать его в экземпляр класса, который был аннотирован javax .xml.bind.annotation.XmlType аннотация.

Как я могу сделать это преобразование?

1 Ответ

6 голосов
/ 08 июня 2009

javax.xml.soap.SOAPMessage - это класс API SAAJ . Ссылка содержит некоторые подробности о SAAJ API, а также справочную реализацию. Имейте в виду, что реализация в вашей среде может отличаться от эталонной реализации, но вы должны интересоваться только самим API, а не какими-либо особенностями реализации. Поскольку вы говорите о аннотированных типах JAX-B 2.x, мы можем предположить, что вы имеете дело с SAAJ 3. Многие из классов SAAJ 3 расширяют классы DOM (я уверен, что это верно в SAAJ 2, но не в SAAJ 1) , Так уж получилось, что javax.xml.soap.SOAPMessage расширяется org.w3c.dom.Node. Для удобства JAX-B 2.x предоставляет простой способ unmarshall дерева DOM (или поддерева) в тип Java.

Следующий код является односторонним:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;

JAXBContext jc = JAXBContext.newInstance("test.jaxb");
Unmarshaller unmarshaller = jc.createUnmarshaller();
unmarshaller.unmarshal(soapBody);

Кроме того, вы можете превратить soapBody в JAX-P DOMSource, а затем разобрать его. Существуют и другие, еще более окольные пути, чтобы добраться из пункта А в пункт Б, если вы заинтересованы, но, скорее всего, вы сможете решить свою проблему с помощью приведенного выше фрагмента кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...