锁定老帖子 主题:SOAP学习笔记
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-09-26
SOAP介绍SOAP(Simple Object Access Protocol),即简单对象访问协议,是在分布式的环境中交换数据的简单协议,以XML作为数据传送语言。 SOAP有两种工作模式,一种是RPC(Remote Procedure Call),另一种是Message-Orientd。MO可以利用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服务。 搭建环境需要的软件包括: Tomcat、Apache AXIS、mail.jar、activation.jar、xerces.jar。3个jar文件可以在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.jar、mail.jar、xerces.jar复制到tomcat主目录下的common/lib目录下; 2 把前述Apache-AXIS web应用(axis子目录)复制到tomcat主目录的webapps目录下。 3 通过访问http://localhost:8080/axis,选择”Validate”可以验证安装,不能出现error。 <o:p> </o:p> 创建基于RPC的SOAP服务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¶meter=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服务JWS即Java 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¶meter=test来访问该服务,得到的结果与步骤4一样。 <o:p> </o:p> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 4870 次