快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18

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

时间:2011-03-14 IBM

引言

该系列文章的第 I 部分讨论了在编码之前设计 Web 服务描述语言(Web Services Description Language,WSDL)和 XML Schema 数据类型(XML Schema data types,XSD)的重要性,完全转换成文档或文字式样的基本原理,以及当开发 Web 服务的时候测试 WS-I Basic Profile 一致性的必要性。本文阐明了数据类型的用法及其对互操作性产生的影响。

Web 服务操作的输入参数及数据类型的返回值对于 Web 服务的互操作性产生非常大的影响。Web 服务用作 XML 文档转换的传送器。当数据对象被放入 Web 服务栈中时,它们被序列化成 XML 数据表示。另一方面,Web 服务栈需要准确地知道如何将那些 XML 数据表示映射到本地应用程序环境的需求中(例如 XML 数据的反序列化)。XML Schema 定义驱动了映射。XSD 的目的是确保发送的类型在其他终端有可复写的版本。但是由于基本技术(企业版 Java 2 平台(Java™ 2 Platform,Enterprise Edition,J2EE)与 Mircosoft® .NET)的实现是不同的,所以 XSD 和那些平台上的本地数据类型之间的映射可能会不同。某些差异可能导致反序列化的失败,而其它的可能导致信息失真。

在接下来的部分中,我将讨论一些有关数据类型的互操作性的问题,例如:

提供商用于精确解释 XML Schema 的工具是不存在的,XML Schema 代表弱类型的集合对象并将它们映射成正确的本地数据类型。

含有空元素的数组的 XML 表示不同于 .NET 和 IBM® WebSphere®。

由于缺乏本地和 XSD 数据类型所共享的一对一的映射,所以转译问题导致了信息的丢失或精度的降低。

在 Web 服务方法签名中的复合数据类型集

集合对象可能包括任何数据类型的元素。因此,许多人把它们看作弱类型的数据结构。这使得它们成为非常好的编程工具。在面向对象的编程中,有大量的集合类型库。例如,在 Java 中存在:

java.util.Hashtable

Vectors

Hashmap

Set

ArrayList

而在 C# 中存在:

System.Collections.Hashtable

SortedList

Queue

Stack

ArrayList

如果在整个 Web 服务中公布了这些集合类型,那么它们可能引发不能被解决的问题。该问题是接收方如何能理解被序列化了的简单对象访问协议(Simple Object Access Protocol,SOAP)消息,这些消息中包含弱类型对象元素及本地数据类型。

即使一些集合类型看上去与某些语言非常相似,例如 C# 中的 System.Collections.ArrayList 及 Java 中的 java.util.ArrayList,记住集合中的元素是通用的参照。为了准确地解组集合的 XML 表示,客户必须预先了解原始的具体类型。这个任务交给工具包开发人员来解释 Web 服务提供者所发布的 XML Schemas 并将 SOAP 消息映射到本地数据中——不是对于弱类型集合的简单任务。

现在,让我们来看一看 Collection 类型的 XML Schemas 是什么样子。这次,考虑部署在 Microsoft .NET 框架上的 Web 服务。假设 InventoryService 接受 Product 的 System.Collections.ArrayList 作为变量,为 ArrayList 中的每个产品设置新价格(增长了百分之 10),并且返回 System.Collections.ArrayList 类型的新对象。

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

时间:2011-03-14 IBM

清单 1. 在 C# 中 Web 服务的详细目录

namespace Inventory {   [WebService(Namespace="http://services.inventory")]   public class InventoryService: WebService   {    //increase the product price by 10 percent    private static float inc_rate = 0.10F;    public struct Product {      public string name;      public int   qty;      publ

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号