SOAP--新一轮竞争的三八线?(一)

<script type="text/javascript"> google_ad_client = "pub-8800625213955058"; /* 336x280, 创建于 07-11-21 */ google_ad_slot = "0989131976"; google_ad_width = 336; google_ad_height = 280; // </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

许方
2001 年 7 月

导言:远程而透明地调用世界任何一个角落的一个服务而不是一个组件似乎成了现在的潮流。Client/Server计算也许应该被称作Client/Service计算了。在Web Service这一领域,自从Microsoft发布.net计划以来,软件产业的巨头和Internet时代的软件新贵们已经一起开始了新一轮的竞争。

一个无法否认同时短时期内难以改变的事实是:Microsoft确确实实已经早已占领了Desktop这个高地,回想其3年前的MS IE保卫战,Microsoft花费了十数亿美金的战略决策对于它自己来说毫无疑问是正确同时又别无选择的。然而同样从那个时候开始,IBM、SUN、Oracle、Bea等巨头们透过Linux,Java、Apache系列的开放技术正在迅速占领着主流服务器端计算的市场。

是否可以大胆地认为,在服务器端,Microsoft仍然还在努力地进行高可靠性,大容量(可伸缩)、并行(真正的分布式)和高可靠性(关键级)计算的攻坚战,守方是IBM、SUN、Oracle、Linux阵营和其它的新兴企业计算或电子商务软件厂商,从优势上看守方占上风。而在客户端形势则刚好反过来。

商业或者生意永远是可以互相妥协的,本文试图寻找五年之内主流企业计算架构的"三八线"在哪里?客户端是Microsoft的操作系统和开发工具,服务端是Unix族,Java技术?

本文将试着给出一种可行的遵循这种"三八线"的计算架构,同时给出一个应用的例子,这个例子把一个Java对象从服务器的Java环境传送到客户端的非Java环境中,包括客户端和服务端的完整的代码以及部署过程。

SOAP及其计算架构简介
SOAP全称Simple Object Access Protocol,是一种基于XML的不依赖传输协议的表示层协议(还记得ISO 7层参考模型吗?TCP/IP大致相当于传输层和网络层,HTTP相当于会话层),用来在应用程序之间方便地以对象的形式交换数据。

在SOAP的下层,可以是HTTP/HTTPS(现在用得最多),也可以是SMTP/POP3、还可以是为一些应用而专门设计的特殊通信协议。

SOAP应用系统可以两种模式工作,一种被称为RPC(Remote Procedure Call),另一种叫法不统一,在Microsoft的文档中称作document oriented,而在Apache的文档中,被称为message-oriented,这是一种可以利用XML交换更为复杂的结构数据的应用,而且,潜在地可用于B2B中长事务处理等领域。在本文中,我们将集中讨论RPC,关于后者,我希望我能够在今后的文章中为大家介绍。关于RPC的计算架构见图1。

从图1中,我们可以看到,SOAP RPC的工作原理非常类似于WEB的请求/应答方式,无非用的是符合SOAP规范的XML代替HTML,HTTP是个无状态协议,但是今天通过Session来管理状态已经是一个众所共知的技术了,无状态协议非常适合松偶合系统,而且对于负载平衡等问题都有潜在的优势和贡献。

基于"三八线"的具体架构与配置
这篇文章的题目看上去可能有些哗众取宠,其实用这么一个标题我还有一个深层次的意思想在这里表达,在现在这个软件技术飞速发展的Internet时代,我们应该以一种更客观或者说更技术的观点来看待各家公司的产品或技术,而不要陷入狭隘的"门派"之争,好的计算架构应该是融百家之长的或者说专业一些是开放的、兼容的、可平滑对接或可互操作的。这样无论对于最终用户还是对于这个领域的开发商都是有好处的。

作为XML小组的成员,Microsoft很早甚至在业界大肆炒作之前就开始应用XML了,在IE 4.0,Office 2000中都可以见到XML的痕迹。在本文中,我选用了Microsoft最近发布的SOAP Toolkit 2.0来作为客户端基本支持库,试图使用RPC模式与Apache的SOAP服务器端技术对接。这样的结构形成了一个三八线--SOAP,客户端从操作系统到开发工具全部是Microsoft产品,在服务器端则是多家公司的产品,而且没有一个是Microsoft的。我想这的确应该是一个有趣的实验吧。

为了能够充分地说明问题,我采用两台互相连成IP网络的机器来做这个实验,尽管在一台系统上用localhost试验后面的例子毫无问题,但对于这个领域的新手来说必须心里非常清楚哪些是Server,哪些是Client,因此可能会混淆一些问题。看一下我们的实验环境吧:
IP: 192.168.0.20 是一台 PIII 550 256M内存的系统,这将用于我们实验中的Client部份,这个系统用于实验的是下列软件: Windows 2000 Professional Edition(含IE 5.0)
Microsoft Visual Basic 6.0
Microsoft SOAP Toolkit 2.0

在这一端,我采用Visual Basic 6.0来作为开发语言,以利用SOAP Toolkit提供的方便的OLE Automation接口,同时尝试串行化(Serialization)后的Java对象传递到非Java环境下的处理,SOAP Toolkit还要调用MSXML Parser 3.0,它已经包含在了IE 5.0中,不需要另外下载。

IP: 192.168.0.10 是一台 PII 366 128M 内存的系统,将用于我们实验中的Server部分,这个系统用于实验的是下列软件:
Red Hat Linux 7.0
IBM JDK 1.2.2 for Linux
IBM XML4J 3.1.1
Apache Tomcat 3.2.1
Apache SOAP 2.1
SUN Java Mail 1.2
SUN JavaBeans Activation Framework 1.0.1

其实从技术上讲,由于Java工具的跨平台特性,用两套Windows的系统一样可以运行我们后面的例子,在服务器一端采用Linux的原因正是基于这篇文章的标题。Apache SOAP 2.1来作为SOAP服务器、Tomcat 3.2.1作为WEB服务器和Servlet容器、IBM的XML4J作为XML Parser,此外,应Apache SOAP 2.1的要求,还需要SUN的 JavaMailJavaBeans Activation Framework,这是两个纯Java的包,在Apache SOAP 2.0时并不需要它们,在Apache SOAP 2.1中由于支持SMTP/POP3的SOAP RPC,而导致需要它们,尽管在原理上我们这里的例子和它们不直接相关,但没有它们服务器无法工作。

基于这篇文章的主题,我不打算在这里讲述如何设置Linux与Windows相连的IP网络,也不介绍如何配置名字解析等问题,如果读者对于配置这个实验系统有困难,请参考有关的技术文章,这样的文章各个网站很多,比如 developerWorkers 的Linux主题区的内容就足够你配置这样的系统:)。我直接用IP来区分两台机器,只要互相能ping通,我们的例子就可以工作了。

在客户机一端,Microsoft的软件安装起来比较简单(我想这是Microsoft能够较快赢得用户的重要原因之一),在这个实验中,我们不需要特殊的设置,安装时一切用默认值就可以了,我相信绝大多数读者不会有障碍。安装的一般问题参考README就可以了。

在服务器这一端,除了操作系统和JDK之外,后面的五个工具全部是纯Java的。纯Java软件包在发布时一般不区分是什么平台的,只有包里面的一些脚本对应不同的平台。

在服务器一端,Linux部分的配置稍微有些复杂。IBM的JDK for Linux 1.2.2安装起来没有什么特殊的要求,但安装完之后请设置JAVA_HOME这个环境变量,为了方便你可以把下面两行加入到你的/etc/profile中(如果以后你需要设置无人值守的系统,就把它放在/etc/rc.local中):

JAVA_HOME = 您安装后的java目录
export JAVA_HOME

检查这个环境变量是否已经正确设置的方法是:
echo $JAVA_HOME

这个环境变量非常重要,很多基于Java的系统都检查这个变量,但只有个别的JDK的RPM包在安装时会自动设置它。

后面的5个包有ZIP格式的,也有.tar.gz的,用哪一个都无所谓,你只需以root的身份进入系统,用合适的解压缩工具把它们分别展开在一个目录中就可以了,一个Unix用户群比较习惯的目录布局是:



/usr/jakarta-tomcat			TOMCAT 3.2.1

/usr/soap2.1				Apache 2.1

/usr/XML4J-3.1.1			IBM XML4J 3.1.1

/usr/javamail				JavaMail 1.1

/usr/jaf-1.0.1				JavaBeans Activation Framework 1.0.1

首先同样用设置JAVA_HOME的方法设置TOMCAT_HOME,这也是一个重要的环境变量。然后告诉大家一个带点儿 Geek精神的方法,把下列四个文件直接拷贝到$TOMCAT_HOME/lib下:


/usr/soap2.1/lib/soap.jar	这是Apache SOAP 2.1的全部Java类库。

/usr/XML4J-3.1.1/xerces.jar	这是XML Parser和DOM接口,另外两个jar是例子和SAX在SOAP服务器端不需要。

/usr/javamail-1.2/mail.jar	这是Javamail与SOAP 2.1 Server端有关的java执行码,其它几个jar服务器端不需要。

/usr/jaf-1.0.1/activation.jar	这是JAF里的Jar

如果你不打算在linux上看上边几个软件包的文档的话(我喜欢在Windows上看),上面所列的后三个目录就都可以删掉了,对于第一个只保留/usr/soap2.1/webapps/soap,这个目录里是SOAP的侦听器(listener,就是后面讲到的rpcrouter)和Deploy工具,它是一个标准的JSP/Servlet WEB应用程序。

我相信过这个过程可以使我们的读者更清楚地认识这些包里那些东西是真正的核心部件以及它们之间的关系,同时减弱对SOAP服务器端的神秘感。

编辑$TOMCAT_HOME/conf/server.xml,这是一个xml文件,找到 一节,在里面加入下面几行表示把SOAP的侦听器应用程序作为一个虚拟目录"挂"到TOMCAT Server上:




      
      


      
      

最后一步,编辑$TOMCAT_HOME/bin/tomcat.sh,把我们要用的那些.jar加到CLASSPATH中去,同时准备一个装载我们自己的Java Class的目录,也一并加进去。

在$TOMCAT_HOME/bin/tomcat.sh的第115行,在export CLASSPATH 之前,加入下面几行:



CLASSPATH=$CLASSPATH:/home/tuppin:$CLASSPATH

CLASSPATH=$TOMCAT_HOME/lib/soap.jar:$CLASSPATH

CLASSPATH=$TOMCAT_HOME/lib/mail.jar:$CLASSPATH

CLASSPATH=$TOMCAT_HOME/lib/activation.jar:$CLASSPATH

CLASSPATH=$TOMCAT_HOME/lib/xerces.jar:$CLASSPATH

这样保证了xercer.jar在CLASSPATH的最前面,如果系统原先固有的CLASSPATH 中有其它的Java XML Parser,不会发生因org.w3c.*这个名字空间冲突而导致系统出问题,名字空间在CLASSPATH中是先到先得。这是Apache SOAP 2.1在安装说明中特别提到的。

我在linux上使用tuppin这个用户名,因此我只要在/home/tuppin这个目录下写提供Web Service的Java类就可以了。

好了,该启动了,在root身份下输入: $TOMCAT_HOME/bin/startup.sh

一串提示过后,服务器启动。用客户端的浏览器测试一下服务器端是否工作正确,在浏览器的地址栏输入:http://192.168.0.10:8080/soap

现在两个世界已经分别准备好了,一端是Microsoft世界,另一端是我把她称为明星队世界,它们之间用Internet方式(TCP/IP)有了一个物理连接,现在它们要使用开放的SOAP来对话与合作了。在本系列的下一篇文章中,我将介绍一个具体的应用例子,这个这个例子把一个Java对象从服务器的Java环境传送到客户端的非Java环境中,包括客户端和服务端的完整的代码以及部署过程。同时,在下面的参考资料6中,我给出了如何获取上面这些软件的URL。

参考资料

  1. Graham Glass的《Web services (r)evolution》分为四个部分,全面地介绍了Web Service和SOAP RPC的原理和实际应用,这篇文章是促使我撰写本文的一个直接动因。它的Part 1写得棒极了,对Web Service作了全面、系统且具前瞻性分析和介绍,同时客观地指出了目前Web Service急需解决的一些技术问题,可以作为SOAP RPC应用研究的Roadmap。从下面地址可以获得DW美国站英文原文。
    http://www-106.ibm.com/developerWorks/xml/library/ws-peer1.html?dwzone=xml

    DW目前只翻译了Part 1和Part 2,在这里可以获得中文版:
    http://www.cn.ibm.comhttp://www.cn-java.com/developerWorks/components/ws-peer1/index.shtml
    http://www.cn.ibm.comhttp://www.cn-java.com/developerWorks/components/ws-peer2/index.shtml

  2. http://www.cn-java.com/www1/www.xmethods.com 的资源指南中有很多Web Service、SOAP、XML相关的技术文章和产品。
  3. http://www.xml.org.cn:8188 一个非常不错的中文XML站点,翻译了很多有价值的标准文档,同时还有一些很简明的例子。
  4. 就在本文写到一半的时候,W3C于5月2日确定了XML Schema(Part 0,1,2)的正式标准,这将使SOAP在异种系统间传送不依赖语言的复杂数据结构变得更方便和统一。从这里可以得到标准的全文:http://www.w3.org/TR/2001/REC-xmlschema-0-20010502
  5. W3C的SOAP 1.1标准:http://www.w3.org/TR/SOAP/
  6. 本文中用到的软件可从下列地址得到:
    Apache Tomcat 3.2.1
    Apache SOAP 2.1
    IBM XML4J 3.1.1
    Microsoft SOAP Toolkit 2.0
    Sun JavaBeans Activation Framework 1.0.1
    Sun JavaMail 1.2
  7. 载本文中的所有例子源代码
  8. 关于"三八线":特指朝鲜半岛大韩民国与朝鲜民主主义共和国的分界线,在地理上刚好位于北纬38度,故此得名。50年代朝鲜半岛南北之间曾爆发战争,中、美、英、前苏联等国均直接或间接参战,停战后仍维持此分界线至今。另,在北纬38度线上,全球有很多风景奇丽的地方,例如:中国的九寨沟……

作者简介
许方,1991年毕业于武汉测绘科技大学计算机科学与工程系,毕业后被分配到中国计算机软件与技术服务总公司,从事国产Unix系统开发和金融系统应用,三年后辞职创业,但至今未成大器。自中学时代开始接触Apple II,经历了中国软件业到目前为止的完整发展历程,在十多年的软件工作生涯中,主要从事银行、零售业系统的开发、体系架构设计和项目管理,曾经成功地主导开发和实施过多个大中型POS系统项目、银行业务系统和企业MIS系统,现为自由职业者,主要为若干固定客户从事软件项目的技术咨询工作,同时作为自由撰稿人为一些网站和电子媒体介绍一些新的企业计算技术。此外,自己建立了一个小型的个人新技术实验室,有若干台装有不同平台的电脑并且连成一个小型的Intranet。最大的爱好就是不断地去弄明白层出不穷的软件技术和概念。

### 回答1: javax-xml-soap-1.6.0.jar是一个用于Java语言的SOAP(简单对象访问协议)实现的库文件。SOAP是一种用于Web服务通信的协议,它允许应用程序在网络上通过XML(可扩展标记语言)传递消息。 要下载javax-xml-soap-1.6.0.jar文件,可以按照以下步骤进行操作: 1. 打开一个互联网浏览器,并导航到一个可信任的Java开发者网站,如http://www.oracle.com或http://www.java.com。 2. 在网站的搜索框中输入"javax-xml-soap-1.6.0.jar下载",并点击搜索按钮。 3. 从搜索结果中选择与您的操作系统和Java版本兼容的下载链接。请注意,不同的操作系统和Java版本可能需要不同的库文件版本。 4. 点击下载链接,开始下载javax-xml-soap-1.6.0.jar文件。下载速度取决于您的互联网连接速度和文件大小。 5. 下载完成后,将文件保存到您的计算机上的特定文件夹中,以便将来引用或导入。 6. 在您的Java项目中使用javax-xml-soap-1.6.0.jar文件。您可以通过将其添加到您的项目构建路径或将其导入到您的开发环境中来完成此操作。 请注意,下载和使用外部库文件时应谨慎,尤其是从非官方和不受信任的来源。最好从官方和可信任的渠道获取库文件,以确保其安全性和兼容性。 ### 回答2: javax-xml-soap-1.6.0.jar是Java中的一个SOAP库,用于进行SOAP协议的通信。SOAP是一种用于在网络上交换结构化信息的协议,通常用于Web服务。该库提供了一组类和方法,使开发人员能够在Java应用程序中创建和处理SOAP消息。 要下载javax-xml-soap-1.6.0.jar文件,可以按照以下步骤进行: 1. 打开网络浏览器,访问一个可信任的Java库存储库,例如Maven仓库或官方网站。 2. 在搜索框中输入"javax-xml-soap-1.6.0.jar",然后点击搜索按钮。 3. 在搜索结果中找到与所需版本相匹配的该库,然后点击下载按钮。 4. 选择一个适合你的操作系统和开发环境的下载选项,例如以.zip或.jar等格式。 5. 保存下载文件到你的计算机上一个合适的位置,例如一个代码库文件夹。 6. 将下载的javax-xml-soap-1.6.0.jar文件添加到你的Java项目中。这可以通过将它复制到你的项目依赖库文件夹中,或将其添加为项目构建工具(如Maven或Gradle)的依赖项来完成。 7. 确保在你的Java代码中导入所需的类和方法,以便在应用程序中使用javax-xml-soap-1.6.0.jar库。 以上就是关于如何下载javax-xml-soap-1.6.0.jar库的简要步骤。请根据你的具体需求和开发环境选择适合你的下载来源。 ### 回答3: javax-xml-soap-1.6.0.jar是一个用于处理SOAP(Simple Object Access Protocol,简单对象访问协议)的Java API。SOAP是一种基于XML的通信协议,常用于通过网络在不同的应用程序之间进行通信。 要下载javax-xml-soap-1.6.0.jar,首先需要找到可靠的下载来源。可以在Java官方网站、Maven中央仓库或其他可信的软件下载网站上找到该jar包的下载链接。 在Java官方网站上,可以前往Java SE Downloads页面,在该页面中搜索javax-xml-soap-1.6.0.jar。找到该jar包后,可以点击下载链接,将jar包保存在本地文件系统中。 在Maven中央仓库上,可以前往搜索界面,输入javax-xml-soap-1.6.0.jar进行搜索。找到该jar包后,可以点击对应的链接,将其添加到项目的依赖中。通过Maven构建项目时,Maven会自动从中央仓库下载并导入所需的jar包。 另外,还可以通过其他可信的软件下载网站搜索javax-xml-soap-1.6.0.jar,并按照网站提供的下载流程进行下载。 无论选择哪种方式进行下载,建议确认下载来源可靠、文件完整、无病毒,并且版本号与需要使用的版本匹配。下载完成后,将javax-xml-soap-1.6.0.jar添加到项目的构建路径中,即可使用其中的类和方法来实现对SOAP协议的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值