我正在致力於調用其他後端Web服務的JAVA(Spring3)MW項目。但是,有些SOAP消息是'''格式不正確''(我認爲),我無法追蹤問題所在。什麼庫確定SOAP消息如何序列化?
我不太知道什麼細節我應該包括,但這裏是一些可能會派上用場:它是一個項目的Java6使用Spring3,並部署在Tomcat的8出於測試目的。
這裏是類似我的代碼生成消息的SOAP例如:
<S:Envelope
xmlns:S="http://schemas.xmlsoap.org/soap/">
<S:Body xmlns="http://backend.company.com/">
<GetCustomerInfo>
<MsgHeader>
<SomeTag>some value</SomeTag>
</MsgHeader>
<Body>
<CustomerId>123456</CustomerId>
</Body>
</GetCustomerInfo>
</S:Body>
</S:Envelope>
當我把這個SOAP消息發送到後端的Web服務,我收到以下錯誤:
Exception: : Element must have a namespace specified if there is a default namespace in scope : Body
當我改變我的消息如下,一切魔術開始工作。唯一的區別是我爲我的肥皂主體元素定義了命名空間。
<S:Envelope
xmlns:S="http://schemas.xmlsoap.org/soap/>
<S:Body>
<GetCustomerInfo xmlns="http://backend.company.com/">
<MsgHeader>
<SomeTag>some value</SomeTag>
</MsgHeader>
<Body>
<CustomerId>123456</CustomerId>
</Body>
</GetCustomerInfo>
</S:Body>
</S:Envelope>
我有11個問題:
(1)有什麼毛病我有關XML的一致性初始消息?他們都和我很相似。
(10)什麼庫在我的代碼我的Java對象轉換爲XML消息?在我的配置中需要做什麼更改以生成類似後一個示例的SOAP消息?
(11)在我的拳頭XML文件,這將是「擴展名」我的第一主體標籤?它會是http://schemas.xmlsoap.org/soap/:Body
還是http://backend.company.com/:Body
?
如果它是相關的,服務類我的代碼調用標註有以下標籤:
@WebService(
targetNamespace = "http://backend.company.com/",
name = "MyServiceName"
)
@XmlSeeAlso({ObjectFactory.class})
@SOAPBinding(
parameterStyle = ParameterStyle.BARE
)
由於body來自soap ns,所以第一個XML確實是錯誤的。所以第二個XML是正確的,你的WS服務器應該生成正確的soap消息 – Optional
@Namphibian:實際上不是...'''backend.company。這兩個片段中的com'''命名空間僅定義了默認命名空間,這應該適用於所有沒有明確命名空間前綴的子元素。因此,在這兩種情況下,我自定義的'''backend.company.com'''命名空間僅適用於子元素,而不適用於''''元素(因爲它已經有一個給定的顯式名稱空間) –
gok
好的然後。我更喜歡自上而下,所以可能會錯過一些東西 – Namphibian