【问题标题】:WS-A between java and .netjava和.net之间的WS-A
【发布时间】: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


【解决方案1】:

正如我在问题中所说,问题出在 JDK 中捆绑的 JAX-WS 实现中,要么修补它(使用背书),要么只使用 Apache CFX,它会更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-31
    • 2014-12-05
    • 2011-01-06
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    相关资源
    最近更新 更多