快速业务通道

提高J2EE与.NET之间的互操作性,第2部分 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
来源于 WebSphere 的 Web 服务响应消息

<soapenv:Body> <returnArrayWithNullResponse xmlns="http://array.test"> <returnArrayWithNullReturn>ABC</returnArrayWithNullReturn> <returnArrayWithNullReturn xsi:nil="true"/> <returnArrayWithNullReturn>XYZ</returnArrayWithNullReturn> </returnEmptyStringResponse> </soapenv:Body>

数组中的第二个元素是设置 xsi:nil="true"。这在 Java 中是非常有用的;Java 客户端可以正确地将它反序列化成空的 String 值,该值是数组中的第二个元素。然而,.NET 客户端将其反序列化成长度为 0 的字符串而不是空的字符串。长度为 0 和 空 在面向对象的编程语言中是完全不同的概念。

现在,考虑另一个部署在 WebSphere 上的 Web 服务方法,如清单 8 所示。

清单 8. 含有数组及其输入输出签名的 Java 方法

public String[] processArray(String[] args) {      //do something to the input array and return it back to the client      return args;    }

这次,Web 服务方法将数组作为输入,处理它,并将这个数组返回到客户端。假设 .NET 客户端发出含有空元素的数组,代码如清单 9 所示。

清单 9. .NET 客户端发出含有空元素的数组

TestArrayService proxy = new TestArrayService();      string[] s = new string[3];      s[0] = "abc";      s[1] = null;      s[2] = "xyz";        // Console.WriteLine("the length of the input array = " + s.GetLength(0));      string[] ret = proxy.processArray(s);        // Console.WriteLine("the length of the output array = " + ret.GetLength(0));

清单 10 展示了来源于 .NET 客户端的 SOAP 请求。

清单 10. .NET 客户端发出的 SOAP 请求

<soap:Body> <processArray xmlns="http://array.test"> <args>abc</args> <args>xyz</args> </processArray> </soap:Body>

提高J2EE与.NET之间的互操作性,第2部分(5)

时间:2011-03-14 IBM

.NET 客户端发出的 SOAP 请求省略了空元素 s[1]。结果,返回的数组的长度不再与原始数组的长度一致。如果这个数组的长度或者元素的索引对于客户端的逻辑来说是重要的,那么客户端将会失败。

最佳的实例不是将含有空元素的数组传递到 Web 服务的客户端及服务器上。

甚至原始的类型也能导致问题的出现

XML Schema 通过提供了大量的类型模型来减弱了互操作性。您可以构建 WSDL 消息及操作,因为 XML Schema 能够识别 Web 服务所使用的特定的数据类型。XSD 提供了大量的类型以及简单的结构。但是,每种编程语言都有一套自己的本地数据类型。本地数据类型与 XSD 数据类型之间的一对一的映射是不存在的。因此,在翻译过程中可能丢失信息,或者接收端不可能生成某些本地数据类型的映射。

无符号的数值类型(如 xsd:unsignedInt、xsd:unsignedLong、xsd:unsignedShort 和 xsd:unsignedByte)是典型的例子。在 .NET 中,uint、ulong、ushort 和 ubyte 类型直接地映射到那些 xsd 类型中,但是 Java 语言没有无符号的数值类型。考虑到互操作性,不要公布那些在 Web 服务方法中的数值类型。取而代之,您可以创建封装器方法来公布并传递那些数值类型,如 xsd:string(使用 C# 中的 System.Convert.ToString)。

对于 xsd:decimal、xsd:double 和 xsd:float 类型,每个平台可能有不同的精度支持。结果,如果您没有在整合之后测试 Web 服务那么可能会降低

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号