日期:2011-04-17  浏览次数:20455 次

  本文的预定读者首先要对j2ee有所了解,熟悉xml,tomcat等基本内容,本文主要是简单介绍一下web服务的基本内容,怎样在java web开发中构建SOAP服务:
 一、SOAP(Simple Object Access Protocol)简单对象访问协议,要了解SOAP,首先就需要了解分布式计算的由来,随着下一代的分布式计算体系web服务的出现,SOAP成为了创建和调用通过网络发布的应用程序的实际通信标准。SOAP类似传统的二进制协议IIOP(CORBA)和JRMP(RMI),但它不采用二进制数据表示法,而是采用使用XML的,基于文本的数据表示法。
        通过XML表示法,SOAP定义了一种小型有线连接协议和编码格式,以表示数据类型、编程语言和数据库,还可以使用各种Internet标准协议作为其消息传输工具,还可以提供表示RPC和文档驱动的消息交换等通信模型的约定。请注意,W3C正致力于SOAP的研究,http://www.w3c.org/2000/xp/Group/ ,并得到了主流供应商的积极响应,以便对于基于XML的协议相关的重要任务达成共识,并定义其关键要求和使用场景。
        SOAP1.2的基本规范定义了以下基本内容:
       1)用于将XML文档表示为结构化SOAP消息的语法和语义
       2)在SOAP消息中表示数据的编码标准
       3)用于交换SOAP消息的通信模型
       4)SOAP传输等底层协议的绑定
      SOAP消息主要包括了信封头,消息头,主体,附件几部分
      一个简单的SOAP消息表示:
      POST   /StudentInfo   HTTP/1.1
      Host:anthropology.cun.edu
      Content-Type: text/xml;charset="utf-8"
      Content-Length: 640
      SOAPAction:  "GetStudentInfo"

     <SOAP-ENV:Envelop xmlns:SOAP-ENV="http://www.w3c.org/2001/06/soap-envelope"
              xmlns:xsi="http://www.w3c.org/2001/XMLSchema-instance"
              xmlns:xsd="http://www.w3c.org/2001/XMLSchema"
             SOAP-ENV:encodingStyle="http://www.w3c.org/2001/06/soap-encoding">
        <SOAP-ENV:Header>
            <person:mail xmlns:person="http://www.cun.edu/Header">xyz@cun.edu
        </SOAP-ENV:Header> 

        <SOAP-ENV:Body>
            <m:GetStudentInfo   xmlns:m="http://www.cun.edu/jws.student.studentInfo">
                 <student_name xsi:type='xsd:string'>
                        Wang wen yin
                 </student>
             </m:GetStudentInfo>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelop>
   以上是1.2版本命名空间,1.1的命名空间 SOAP ENVELOPE:http://schemas.xmlsoap.org/soap/envelop/ ,SOAP ENCODING: http://schemas.xmlsoap.org/soap/encoding/ 
   关于SOAP编码规范请参阅www.w3c.org/TR/xmlschema-2/ 定义的编码值,其他的一些规范可以上www.w3c.org 上具体查看。
二、以下从实际例子来学习,这里我使用的是Apache的一个子项目Axis的具体例子,便于深入了解soap的运行:
    1)下载Axis的相关内容http://ws.apache.org/axis/:
    2)建立一个实例程序(遵守j2ee的web程序规范),如(WebServiceTest目录)
          把axis中lib文件夹的内容拷到你的WebServiceTest/WEB-INF/lib下,同时上网下载xerces(下载地点:http://xml.apache.org/xerces-j/)解释器的包文件xerces.jar,也拷到WebServiceTest/WEB-INF/lib文件夹下,(若要配置log4j,请把属性文件log4j.properties拷到WebServiceTest/WEB-INF/classes文件夹下)
    3)修改应用程序WebServiceTest/WEB-INF中的web.xml文件:主要servlet设置如下
       <serv