SOAP介绍【二】

xiaoxiao2022-06-12  34

 

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服务

本文采用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

 

创建基于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等属性。

 

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;

import javax.xml.namespace.QName;

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

public class HelloClient {

    public static void main(String[] args) {

       try{

           String name="Guest";

          

           String endpoint = "http://localhost:8080/axis/services/helloservice";

           Service service = new Service();

           Call call = (Call)service.createCall();

           call.setTargetEndpointAddress(endpoint);

           call.setOperationName(new QName("urn:helloservice","sayHello"));

           String ret = (String)call.invoke(new Object[]{name});

           System.out.println(ret);

       }catch(Exception e){

           e.printStackTrace();

        }

    }

}

 

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

<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>

 

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¶meter=test来访问该服务,得到的结果与步骤4一样。

转载请注明原文地址: https://www.6miu.com/read-4933061.html

最新回复(0)