Как десериализовать XML в объект Java, сгенерированный из axis2 - PullRequest
0 голосов
/ 30 марта 2011

Я использовал Eclipse для создания заглушки кода Java-клиента с учетом стороннего wsdl. Клиент работает отлично, я могу получить доступ к веб-сервису и делать то, что мне нужно.

Теперь я хотел бы написать несколько модульных тестов, которые могут запускаться без подключения к веб-сервису. Можно ли использовать какой-либо механизм в стеке axis2 для десериализации XML-файла в один из объектов Java в коде-заглушке клиента Java?

Например, один из классов в коде заглушки клиента - «Контакт». Скажем, у меня есть XML-файл, который имитирует XML, который обычно находится в запросе на мыло. Как я могу десериализовать это в объект Контакт java?

Я раньше использовал XMLBeans, но надеюсь, что есть более простой способ, поскольку кажется, что java-клиент уже где-то выполняет эту десериализацию? Может быть, у axis2 есть метод, позволяющий взять кусок xml и вернуть объект java?

ОБНОВЛЕНИЕ:

Я пробовал это:

String packageName = Contact.class.getPackage().getName();
JAXBContext jc = JAXBContext.newInstance( packageName );

Я понял:

java.lang.AssertionError: javax.xml.bind.JAXBException: "com.sforce.soap._2006._04.metadata" doesnt contain ObjectFactory.class or jaxb.index

Затем я попробовал это:

Contact c = new Contact();
JAXBContext jc = JAXBContext.newInstance( c.getClass() );

Но тогда я получаю исключение, что один из классов, который использует класс контактов, does not have a no-arq default constructor

Я надеялся, что это будет быстро и легко сделать, но пока у меня не будет времени полностью освоить axis2 и то, как он использует jaxb, я просто буду анализировать xml вручную.

1 Ответ

1 голос
/ 30 марта 2011

Это называется «демаршаллинг» в Оси.Взгляните на org.apache.axis2.jaxws.message.databinding.JAXBUtils.getJAXBUnmarshaller (контекст JAXBContext).После того, как вы получите демаршаллер, вы можете десериализовать XML обратно в объекты.

...