【问题标题】:.Net calling Java Webservice, I need to convert an XMLSchema/long to anXMLSoap/long.Net 调用 Java Webservice,我需要将 XMLSchema/long 转换为 anXMLSoap/long
【发布时间】:2011-09-29 18:57:24
【问题描述】:

我将 C# 与 .net 4 一起使用,并尝试使用 java web 服务。我的代码是通过添加 .net 2.0 样式的 Web 服务引用自动生成的。我认为 .net 发送到 java webservice 的类型存在问题,这是我尝试连接时收到的异常:

Internal Server Error (deserialization error: deserialization error: unexpected element type: expected={http://schemas.xmlsoap.org/soap/encoding/}long, actual={http://www.w3.org/2001/XMLSchema}long)

来自网络服务的旧文档: 将对象序列化为 SOAP 消息时,Microsoft .NET 平台将所有原语映射到 W3C XML 架构类型。这与 .NET 平台无法区分原语和原语相结合 包装器(通过自动装箱)在使用 Sun One Web 服务时会导致互操作性问题 编码的 RPC SOAP 消息。 在 Java 编程语言中,原语及其等效的对象包装器不能自动装箱 因此在语言上是有区别的。 在 Sun One 下生成和部署 Web 服务时,服务器端 WSDL 映射 Java 原语到 W3C 模式类型,并将 Java 对象映射到 SOAP 模式类型。

有谁知道我如何告诉 .net 发送 http://schemas.xmlsoap.org/soap/encoding/}long 而不是 http://www.w3.org/2001/XMLSchema}long?

谢谢! 弗里兹

【问题讨论】:

  • 您是如何在 C# 中编写/获取客户端的?你自动生成了吗? wsdl 是什么样的?是 doc 风格还是 rpc 风格?提供一些细节
  • 我添加了更多细节 Bhaskar...希望对您有所帮助!

标签: java .net web-services soap interop


【解决方案1】:

建议您尝试将样式更改为Document。这样,当您生成 wsdl 时,您会发现一个 <type></type> 部分列出了服务使用的所有数据类型。该部分还将有一个namespace 元素,它本质上是导致您现在出现问题的原因,但这并不明显,因为使用 RPC 服务风格,wsdl 不包含类型部分。我假设encodingliteral

编辑:

我应该先猜到它,但您的服务似乎使用encoded 类型而不是literal。编码服务的一个特点是它们总是容易出现互操作性问题。我的建议:不要使用 rpc/encoded - 使用 Document/Literal。

【讨论】:

  • 嗨 Bhaskar,我正在查看生成的 wsdl 文件,并且确实看到了类型部分。引发错误的变量类型设置为“soap-enc:long”,这应该是正确的。然而,当 .net 调用该服务时,它并没有发送 long 的soap 版本。有什么想法吗?
  • 我还刚刚将一些来自 web 服务的文档添加到可能有帮助的原始问题中。
  • 嗨,巴斯卡。我对网络服务没有任何控制权:(我只是想从 .net 使用它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-21
  • 1970-01-01
  • 2019-07-31
  • 1970-01-01
  • 2013-07-26
  • 1970-01-01
相关资源
最近更新 更多