这个问题可能已经得到解答,但我只是找不到它,所以如果需要,请随时指出。
我有一个 JAVA WSDL 端点,可以成功地使用它来生成引用。我还使用了该端点的程序员发送的 WSDL,并再次成功创建了要使用的类文件。
但是,当我创建提供此服务所需的对象时,在这两种情况下,我都会收到一条错误,指出他无法使用我发送的有效负载。
使用 SoapUI 工具查看它,似乎他的服务期望在有效负载标记中提供更多信息,而这些信息似乎并未包含在我的类中。
示例:我可以创建 <Tag1></Tag1>
但他需要<init:Tag1></init:Tag1>
我不知道“init”前缀在哪里被删除。
我正在使用 VS 2010 并生成一个简单的 Web 引用。此时任何提示都会有所帮助。
最佳答案
我解决这些问题的方法是这样的:
使用相同技术的客户端连接到服务。 追踪线路上的消息。如果有必要,可以去掉签名和加密,以便获得可读的 XML 消息。
现在,使用不同技术的客户端(在本例中为 .NET)构建客户端 stub 并连接到服务。追踪线路上的消息。
比较两者,并调整不同技术的客户端以使其匹配。
我使用 Fiddler2 来捕获 HTTP 消息的痕迹。如果您不使用 HTTP,那么您将需要其他东西。
<小时/>请记住,您想要的不是字符串相等,而是 XML 信息集中的相等。
类似 <init:Tx>
的元素可能相当于 <Tx>
,如果后一种情况下的默认命名空间与前一种情况下的 init 命名空间匹配。如果您不太明白这意味着什么,那么您需要阅读 xml namespace 并熟悉这些概念。
在很多情况下,我发现 XML 命名空间不一致问题导致了互操作性的缺乏。在一种情况下,我发现 namespace 上缺少斜杠(http://foo/bar 而不是 http://foo/bar/ )足以导致通信失败。弄清楚要调整什么以使实际消息与需求消息相匹配有点像魔术 - 我不知道如何解释它。
在某些情况下,我会通过修改 WSDL 文档来让不同技术的客户端执行我想要的操作。
祝你好运。
关于java - 另一个 .Net 使用 Java WSDL 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5863073/