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.zip解压到c:/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: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文件里
最后,执行你的客户端程序,完成