我有一個使用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只使用斜線。太神奇了!
它是一個老派的Web服務或WCF嗎? – Turowicz
@Turowicz我不確定。我被給了.net應用程序。如何檢查?有一件事我知道它使用SOAP 1.2協議,因爲wsimport警告了一些「非標準擴展」。 – kan
當我和我的朋友試圖從Java使用WCF時,我們不得不使用一些手動方法(自動生成的jax沒有什麼幫助)http://www.codeproject.com/KB/XML/WSfromJava.aspx – Turowicz