У меня есть объект JAXB (ProductRequest), который представляет XML-документ для запроса веб-службы. Предположим, что это выглядит примерно так:
<ProductRequest>
<getProducts/>
</ProductRequests>
Для ответа объект JAXB (ProductResponse) будет представлять XML-документ, как показано ниже:
<ProductResponse>
<productId>1</productId>
<productName>Oranges</productName>
<productId>2</productId>
<productName>Apples</productName>
</ProductResponse>
Используя Spring-WS, я могу отправить веб-службе запрос, используя два подхода.
Использование объекта JAXB
ProductRequest productRequest = new productRequest();
ProductResponse productResponse = (ProductResponse) webServiceTemplate
.marshalSendAndReceive(productRequest);
Использование простого XML/DOM
DOMResult domresult = new DOMResult();
webServiceTemplate.sendSourceAndReceiveToResult(source, domresult); //source represents the XML document as a DOMSource object
Element responseElement = (Element) domresult.getNode().getFirstChild();
Когда я пробую оба подхода, результаты разные. Первый подход с использованием объекта JAXB результат
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProductResponse xmlns="http://mySchema">
<productId>1</productId>
<productName>Oranges</productName>
<productId>2</productId>
<productName>Apples</productName>
</ProductResponse>
Результат второго подхода с использованием объекта XML Dom (включая пространства имен)
<?xml version="1.0" encoding="UTF-8"?>
<ns2:ProductResponse xmlns:ns2="http://mySchema">
<ns2:productId>1</ns2:productId>
<ns2:productName>Oranges</ns2:productName>
<ns2:productId>2</ns2:productId>
<ns2:productName>Apples</ns2:productName>
</ns2:ProductResponse>
Заголовок схемы, используемой для ответа веб-службы, объявляется как:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:z="http://mySchema"
targetNamespace="http://mySchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
-- Schema elements
</xs:schema>
Есть два отличия в ответе
- Первая строка ответа на запрос JAXB включает запись standalone="yes">
- Элементы в версии JAXB не имеют префикса пространства имен.
- Разве ответ с элементами с префиксом схемы не должен использовать «z» (как определено в схеме) вместо ns2?
Я не понимаю, что может быть причиной этой разницы, учитывая, что они оба вызывают одну и ту же веб-службу, которая генерирует ответ на основе одной и той же схемы. Любые идеи?
Содержимое XML такое же, но разница в формате XML вызывает у меня проблемы, поскольку я не могу использовать String.equals() для сравнения двух.