论坛首页 入门技术论坛

SOAP学习笔记

浏览 4870 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-09-26  
SOA

SOAP介绍

SOAP(Simple Object Access Protocol),即简单对象访问协议,是在分布式的环境中交换数据的简单协议,以XML作为数据传送语言。

SOAP有两种工作模式,一种是RPC(Remote Procedure Call),另一种是Message-OrientdMO可以利用XML来交换结构更复杂的数据,通常以SMTP作为传输协议。

RPC模式的SOAP可以理解为这样一个开发协议:SOAP=RPC+HTTP+XML,具有以下特点:

采用HTTP作为通信协议,采用客户/服务模式;

RPC作为统一的远程方法调用途径;

传送的数据使用XML语言,允许服务提供者和客户经过防火墙在Internet上进行通信。

SOAP RPC的工作流程如下图所示:

<!----><!----><!---->

搭建SOAP服务

本文采用Apache-AXIS Web应用作为SOAP服务的容器,使用Tomcat作为Apache-AXIS web应用的容器。SOAP客户程序可以通过Apache-AXIS API来访问SOAP服务。

搭建环境需要的软件包括:

TomcatApache AXISmail.jaractivation.jarxerces.jar3jar文件可以在sun的网站上下载,Apache AXIS的下载网址为:http://apache.mirror.phpchina.com/ws/axis

Apache-AXIS web应用:把axis下载解压后,在lib子目录下包含了AXIS的所有JAR文件,在其webapps子目录下有个axis子目录,这个目录是一个用于发布SOAP服务的Web应用,可以称之为Apache-AXIS web应用。

Tomcat上发布Apache-AXIS Web应用的步骤如下:

1 activation.jarmail.jarxerces.jar复制到tomcat主目录下的common/lib目录下;

2 把前述Apache-AXIS web应用(axis子目录)复制到tomcat主目录的webapps目录下。

3 通过访问http://localhost:8080/axis,选择”Validate”可以验证安装,不能出现error

<o:p> </o:p>

创建基于RPCSOAP服务

1 创建提供SOAP服务的java类:

Package mypack;

Public class HelloService{

       Public String sayHello(String name){

              Return “Hello”+name;

       }

}

编译完成后,将类文件放到<TOMCAT_HOME>/webapps/axis/WEB-INF/classes/mypack下。

2 创建SOAP服务的发布描述符文件

Apache AXIS使用Web服务发布描述文件WSDD(Web Service Deployment Descriptor)来发布SOAP服务。以下是HelloService的发布描述符文件,名为deploy.wsdd:

<deployment name=”test” xmlns=”http://xml.apache.org/axis/wsdd”

              xmlns:java=”http://xml.apache.org/axis/wsdd/providers/java”>

       <service name=”urn:helloservice” provider=”java:RPC”>

              <parameter name=”className” value=”mypack.HelloService”/>

              <parameter name=”allowedMethods” value=”sayHello”/>

       </service>

</deployment>

以下是HelloService的删除WSDD文件,undeploy.wsdd文件:

<undeployment name=”test” xmlns=”http://xml.apache.org/axis/wsdd/”>

       <service name=”urn:helloservice”/>

</undeployment>

注意:在上述描述符文件中,需要正确书写xmlns等属性。

<o:p> </o:p>

3 发布SOAP

有两种方式可以发布SOAP服务,命令行方式与web方式。在发布或删除SOAP服务时需要启动Tomcat

发布命令:

       Java org.apache.axis.client.AdminClient deploy.wsdd

删除命令:

       Java org.apache.axis.client.AdminClient undeploy.wsdd

4 创建SOAP客户程序

       SOAP RPC客户程序可以通过Apache AXIS API发出RPC请求,调用SOAP服务的方法,以下是访问前面发布的helloservice服务的sayHello方法的客户程序。

       package Soap;<o:p></o:p>

import javax.xml.namespace.QName;<o:p></o:p>

import org.apache.axis.client.Call;<o:p></o:p>

import org.apache.axis.client.Service;<o:p></o:p>

public class HelloClient {<o:p></o:p>

    public static void main(String[] args) {<o:p></o:p>

       try{<o:p></o:p>

           String name="Guest";<o:p></o:p>

           <o:p></o:p>

           String endpoint = "http://localhost:8080/axis/services/helloservice";<o:p></o:p>

           Service service = new Service();<o:p></o:p>

           Call call = (Call)service.createCall();<o:p></o:p>

           call.setTargetEndpointAddress(endpoint);<o:p></o:p>

           call.setOperationName(new QName("urn:helloservice","sayHello"));<o:p></o:p>

           String ret = (String)call.invoke(new Object[]{name});<o:p></o:p>

           System.out.println(ret);<o:p></o:p>

       }catch(Exception e){<o:p></o:p>

           e.printStackTrace();<o:p></o:p>

        }<o:p></o:p>

    }<o:p></o:p>

}<o:p></o:p>

<o:p> </o:p>

除了在命令行调用SOAP RPC服务外,也可以直接通过:http://localhost:8080/axis/services/urn:helloservice?method=sayHello&parameter=test来调用,运行结果为:<o:p></o:p>

<soapenv:Envelope>

       <soapenv:Body>

       <sayHelloResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

<sayHelloReturn xsi:type="soapenc:string">Hellozhoulb</sayHelloReturn>

</sayHelloResponse>

</soapenv:Body>

</soapenv:Envelope>

<o:p> </o:p>

5 发布JWS服务

JWSJava Web Service 。将Java源文件改扩展名为jws,然后复制到<CATALINA_HOME>/webapps/axis目录下,AXIS会自动编译JWS文件,并把它加入到JWS服务中。

在本例中,可以把HelloService.java改名为HelloService.jws(需要去掉package,使用默认的包),再把改后的文件放在<CATALINA_HOME>/webapps/axis,然后可以通过URL:http://localhost:8080/axis/HelloService.jws?method=sayHello&parameter=test来访问该服务,得到的结果与步骤4一样。

<o:p> </o:p>

论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics