2014-09-20 55 views
0

到來時,我有從CXF web服務,其中defaultElementForm =「不合格」,託管在Wildfly 8,採用最新的Java 7,當我的Java客戶端連接,它們做工精細,如果從CXF產生的,因爲他們的SOAP消息的內容是這樣的:Wildfly Web服務JAXB解組錯誤從.NET客戶端

<ns:MyCall1 xmlns:ns="http://example.com/"> 
     <MyCall2> 
... 

的.NET客戶端,是完全一樣的消息,只有一個區別,這不起作用:

<MyCall1 xmlns="http://example.com/"> 
    <MyCall2 xmlns=""> 

。 ..

不幸的是,失敗的原因,是它看起來像JAXB是忽略的xmlns =「」完全,所以它認爲命名空間仍然http://example.com/,這不符合「」不合格得到你。如果我將它更改爲xmlns =「a」,那麼它會得到一個錯誤,說明a與預期的命名空間「」不匹配,但如果我將其保留爲「」,則表示http://example.com/與預期的「」不匹配。所以它忽略了清除默認命名空間所需的xmlns =「」。

必須有一些設置,或者一些方法,使通過JAXB Java Web服務解釋是正確的。請幫忙!

回答

0

所以事實證明,如果其他人(可能沒有之一)擊中這個問題。它在Wildfly 8.2中修復,但是在8.0和8.1發生了......所以一定是某種Wild or或者jax-ws或者jax-b的問題。無論如何,最新的版本已經修好了。

0

我們只是遇到了類似的問題,Wildfly和.NET服務器。我們通過改變我們提供給wsdl2java的WSDL來解決它,以便問題元素被限定而不是不合格。
所以我們改變了這個:

<s:schema elementFormDefault="qualified" targetNamespace="http://www.example.com/messageresult/v200"> 
    ---snip--- 
    <s:complexType name="SubmissionResponseType"> 
     <s:sequence> 
     <s:element minOccurs="0" maxOccurs="1" form="unqualified" name="ID" type="s:string"/> 
     <s:element minOccurs="0" maxOccurs="1" form="unqualified" name="StatusText" type="s:string"/> 
    </s:sequence> 
    </s:complexType> 
    ---snip--- 
</s:schema> 

要這樣:

<s:schema elementFormDefault="qualified" targetNamespace="http://www.example.com/messageresult/v200"> 
    ---snip--- 
    <s:complexType name="SubmissionResponseType"> 
     <s:sequence> 
     <s:element minOccurs="0" maxOccurs="1" form="qualified" name="ID" type="s:string"/> 
     <s:element minOccurs="0" maxOccurs="1" form="qualified" name="StatusText" type="s:string"/> 
    </s:sequence> 
    </s:complexType> 
    ---snip--- 
</s:schema> 
+0

,將工作和.NET提供互操作性,如果你能夠改變的模式,以勝任元件(以及想這樣),但它使XML消息相當長的時間,需要改變的WSDL。 另一種解決方案,只是做一個SOAP處理程序,如有必要,.NET風格轉換SOAP消息給我們的格式 - 極差不過,我希望有一個更好的,你會覺得這是一個常見的問題,似乎像jaxb/wildfly沿線的奇怪問題。 – 2015-01-12 18:28:07