soap服务的部署的介绍

soap服务的部署的介绍

soap服务的部署
1. 环境的配置:

1需要的源:
ApacheSOAP2.3http://apache.linuxforum.net/dist/ws/soap/version-2.3.1/soa
p-bin-2.3.1.zip

2安装ApacheSOAP
把下回来的soap-2.3.1.zipc/soap-2_3_1。把c:/soap-2_3_1/lib下的两
个文件制到%TOMCAT_HOME%/common/lib下面;把c/soap-2_3_1/webapps下的soap.war
制到%TOMCAT_HOME%/webapps下面;把其他的几个jar文件(mail.jar,activation.jar,x
erces.jar)
制到%TOMCAT_HOME%/common/lib下面。
classpath量:
把上面的四个jar文件路径添加到classpath量中

%TOMCAT_HOME%/common/lib/ xercesImpl.jar
%TOMCAT_HOME%/common/lib/mail.jar
%TOMCAT_HOME%/common/lib/activation.jar
%TOMCAT_HOME%/common/lib/ xml-apis.jar
%TOMCAT_HOME%/common/lib/soap.jar

测试端配置:
1.web浏览器,访问http://localhost:8080/soap/servlet/rpcrouter,如果出
提示:“Sorry,Idon'tspeakviaHTTPGET-youhavetouseHTTPPOSTtotal
ktome”
,第一测试
2.命令行测试:在命令行下入下面命令
>javaorg.apache.soap.server.ServiceManagerClienthttp://localhost:808
0/soap/servlet/rpcrouterlist

如果出只是"DeployedServices:",没有得到其他任何出信息,否则请检查
classpath配置是否正确

classpath设置示例如下:

.;%JAVA_HOME%/lib/tools.jar;%JAVA_HOME%/lib/dt.jar;%CATALINA_HOME%/common/lib/xercesImpl.jar;%CATALINA_HOME%/common/lib/mail.jar;%CATALINA_HOME%/common/lib/activation.jar;%CATALINA_HOME%/common/lib/xml-apis.jar;%CATALINA_HOME%/common/lib/soap.jar;C:/jdom-1.0/build/jdom.jar

2. SOAP服务端程序编写:

Soap中最简单的一个部分,用来实现业务功能。

示例如下:

package XXX;

import XXX;

public class HelloWorldService {

public Vector getVector() throws Exception {

-------------------

Vector v = new Vector();

------------------------

------------------------

return v;

}

}

3. Soap文件,即要部署的xml文件的编写:

这是最恶心的一项,结合下面的例子进行说明

<?xml version="1.0"?>

<isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment" id="urn:HelloWorldService"> <<<---部署的服务名称

<isd:provider type="java" scope="Request" methods="getVector">

部署的方法名,与服务端程序里的方法名要一致

<isd:java class="com.ln.soap.HelloWorldService" static="false"/>

</isd:provider>

============================================序列化器

<isd:mappings>

<isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

xmlns:x="urn:HelloWorldService" qname="x:java.util.HashMap"

javaType="java.util.HashMap"

java2XMLClassName="org.apache.soap.encoding.soapenc.MapSerializer"

xml2JavaClassName="org.apache.soap.encoding.soapenc.MapSerializer"/>

这一段用于对特殊的数据结构指定序列化器,如map的序列化器为MapSerializer,而Vector的则是VectorSerializer这一步很重要,如果设置不当,客户端就可能无法得到返回值

</isd:mappings>

</isd:service>

4. Soap客户端程序的编写:

package XXX;

import XXX;

public class HelloWorldClient {

static String DEFAULT_ENDPOINT = "http://localhost:8080/soap/servlet/rpcrouter";

public static void main(String[] args) throws Exception {

String endPoint = DEFAULT_ENDPOINT;

//声明soap服务加载器的路径

URL url = new URL(endPoint);

//注册特殊数据类型的序列化器,要与部署的xml文件里面的一致

SOAPMappingRegistry smr = new SOAPMappingRegistry();

// BeanSerializer beanSer = new BeanSerializer();

MapSerializer mapSer = new MapSerializer();

// VectorSerializer vecSer = new VectorSerializer();

smr.mapTypes(Constants.NS_URI_SOAP_ENC, new QName(

"urn:HelloWorldService", "java.util.HashMap"), java.util.HashMap.class,

mapSer, mapSer);

// Build the SOAP RPC request message using the Call object

//使用Call来建立客户端的申请信息

Call call = new Call();

call.setSOAPMappingRegistry(smr);

call.setTargetObjectURI("urn:HelloWorldService");

call.setMethodName("getVector");

call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);

// Send the SOAP RPC request message using invoke() method

//使用invoke()方法提交申请,返回响应

Response resp;

try {

resp = call.invoke(url, "");

} catch (SOAPException e) {

System.err.println("Caught SOAPException (" + e.getFaultCode()

+ "): " + e.getMessage());

return;

}

// Check the response.

if (resp.generatedFault()) { // Error Occurred

//如果出现错误,则用下面方法获得错误信息

Fault fault = resp.getFault();

System.out.println("The Following Error Occured: ");

System.out.println(" Fault Code = " + fault.getFaultCode());

System.out.println(" Fault String = " + fault.getFaultString());

} else { // Completed Successfully

//如果成功接收相应信息,则用下面方法获取

Parameter result = resp.getReturnValue();

vector=(Vector) result.getValue();

}

}

}

5. 服务的部署方法,

将服务器端程序和部署文件放到Tomcat-5.0.28/common/classes下,如果有包,则服务器端程序要放在相应的包中。

启动命令提示符CMD

cd /d c:/Tomcat-5.0.28/common/classes

c:/Tomcat-5.0.28/common/classes路径下执行

java org.apache.soap.server.ServiceManagerClient http://localhost:8080/soap/servlet/rpcrouter deploy HelloWorld.xml

也可以把这些命令全写到一个*.cmd文件里

最后,执行你的客户端程序,完成