【发布时间】:2011-11-24 09:23:39
【问题描述】:
我有一个使用 Web 服务寻址的 Web 服务。它是用 .NET 平台编写的,我已经通过 wsimport 将它导入到我的应用程序中,JDK 1.6.0_24 中包含 JAX-WS。它以某种方式工作,但某些操作失败,在 .net 客户端日志中我看到下一条错误消息:
通信异常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 我不确定。我得到了 .net 应用程序。如何检查?我知道它使用 SOAP 1.2 协议的一件事,因为 wsimport 警告了一些“非标准扩展”。
-
当我和我的朋友尝试使用 Java 中的 WCF 时,我们不得不使用一些手动方法(自动生成的 jax 没有多大帮助)codeproject.com/KB/XML/WSfromJava.aspx
-
你也可以试试kSoap ksoap2.sourceforge.net
-
@Turowicz 我用过 Apache CXF,它可以工作。
标签: java .net web-services