2011-11-24 39 views
1

我有一個使用Web服務尋址的web服務。它是用.NET平臺編寫的,我通過包含在JDK 1.6.0_24中的wsimport和JAX-WS將它導入到我的應用程序中。它的工作原理莫名其妙,但有些操作失敗,在.NET客戶端日誌我看到一個錯誤信息:java和.net之間的WS-A

通信異常System.ServiceModel.ProtocolException:一收到答覆 消息操作「UpdateMatchState」用行動 '的MyStuff:IQuoteReceiver:UpdateMatchStateResponse'。但是,您的 客戶端代碼需要採取措施 'Mystuff/IQuoteReceiver/UpdateMatchStateResponse'。

似乎他們使用不同的標準,.NET客戶端期望斜槓,但Java客戶端發送冒號。我應該挖掘哪些方向以使其發揮作用?

更新:

這確實

好,源代碼調查後,我發現它的一部分(W3CAddressingWSDLParserExtension):

protected static final String buildAction(String name, WSDLOperation o, boolean isFault) { 
    String tns = o.getName().getNamespaceURI(); 

    String delim = SLASH_DELIMITER; 

    // TODO: is this the correct way to find the separator ? 
    if (!tns.startsWith("http")) 
     delim = COLON_DELIMITER; 
... 
} 

所以,如果Web服務類型命名空間http開始,它使用斜槓作爲分隔符,否則它使用冒號,而.NET只使用斜線。太神奇了!

+0

它是一個老派的Web服務或WCF嗎? – Turowicz

+0

@Turowicz我不確定。我被給了.net應用程序。如何檢查?有一件事我知道它使用SOAP 1.2協議,因爲wsimport警告了一些「非標準擴展」。 – kan

+0

當我和我的朋友試圖從Java使用WCF時,我們不得不使用一些手動方法(自動生成的jax沒有什麼幫助)http://www.codeproject.com/KB/XML/WSfromJava.aspx – Turowicz

回答

0

正如我的問題所述,問題出現在JDK捆綁的JAX-WS實現中,要麼對其進行修補(使用認可的),要麼只是使用Apache CFX,它會更好。