我正在關注example以構建帶Soap的Web服務。有沒有辦法去除Soap響應的targetNamespace?隨着SoapUI我得到這個迴應:沒有命名空間的SOAP響應(Spring Boot)
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<ns2:getAllResponse xmlns:ns2="http://spring.io/guides/gs-producing-web-service">
<ns2:timestamp>12/18/2015 10:51:02 AM</ns2:timestamp>
<ns2:MyItem>
<ns2:class>myClass</ns2:class>
<ns2:name>MyItemName</ns2:name>
</ns2:MyItem>
</ns2:getAllResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
並希望得到它沒有目標名稱空間,例如,如:
...
<MyItem>
<MyItem>
<class>myClass</class>
<name>MyItemName</name>
</MyItem>
我發送一個空請求來獲取MyItems列表。我的XSD看起來是這樣的:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
xmlns:tns="http://spring.io/guides/gs-producing-web-service"
targetNamespace="http://spring.io/guides/gs-producing-web-service">
<xs:element name="getAllRequest">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="getAllResponse">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="1" name="timestamp" type="xs:string"/>
<xs:element maxOccurs="unbounded" name="MyItem" type="tns:MyItem"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="MyItem">
<xs:sequence>
<xs:element name="class" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
的MyItem類將被自動生成並獲取與此註釋:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "MyItem", propOrder = {
"class",
"name",
})
public class MyItem { //....
有沒有什麼辦法讓沒有目標命名空間的響應?我知道它的目的,而且它確實非常有用。但它碰巧不能被另一個具有這個目標命名空間的工具進一步處理,看起來像這樣:
<MyItem xmlns="http://spring.io/guides/gs-producing-web-service"> ...
在此先感謝!
然後你的其他工具有問題。一個工具如何知道它的結構並不知道首先定義文檔結構的名稱空間。 –
好的。所以你的回答是,這根本不可能? – Lyn
JAXB自動包含名稱空間,它不會執行任何在正常XML中不允許的操作。那麼爲什麼你的其他工具不只是表示xml? –