Имам 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(), за да сравня двете.