首先需要安装soap包
soap还需要javamail和javabeans activation framework,分别在以下地址下载
http://apache.linuxforum.net/dist/ws/soap/
http://java.sun.com/products/javamail/downloads/index.html
http://java.sun.com/products/javabeans/glasgow/jaf.html
把以上soap包中的soap.war放入到{$tomcathome}/webapps目录下,soap.war自动deploy,把mail.jar和activation.jar放到系统的classpath和tomcat的lib中,访问
http://localhost:8080/soap/servlet/rpcrouter
没有报错则成功
创建Echo.java
代码如下
public class Echo
{
public String echo(String echome){
return echome;
}
}
同一目录下创建DeployDescriptor.xml
代码如下
<isd:service xmlns:isd=”http://xml.apache.org/xml-soap/deployment” id=”urn:Echo”>
<isd:provider type=”java” scope=”Application” methods=”echo”>
<isd:java class=”Echo” static=”false”/>
</isd:provider>
</isd:service>
Deploy SOAP服务
命令行执行
>java org.apache.soap.server.ServiceManagerClient http://localhost:8080/soap/servlet/rpcrouter deploy DeploymentDescriptor.xml
检查服务是否安装
>java org.apache.soap.server.ServiceManagerClient http://localhost:8080/soap/servlet/rpcrouter list
然后把编译过的Echo.java放置到{$tomcathome}/webapps/soap/WEB-INF/classes目录下
创建SOAP客户端程序
代码如下
import java.io.*;
import java.util.*;
import java.net.*;
import org.w3c.dom.*;
import org.apache.soap.util.xml.*;
import org.apache.soap.*;
import org.apache.soap.encoding.*;
import org.apache.soap.encoding.soapenc.*;
import org.apache.soap.rpc.*;
public class TestEchoService {
public static void main(String[] args) throws Exception{
Call call = new Call();
call.setTargetObjectURI(“urn:Echo”);
call.setMethodName(“echo”);
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
Vector params = new Vector();
params.addElement(new Parameter(“value”, String.class, args[0], null));
call.setParams(params);
Response resp;
try{
resp = call.invoke(new URL(“http://localhost:8080/soap/servlet/rpcrouter“),
“”);
if (!resp.generatedFault()) {
Parameter ret = resp.getReturnValue();
Object value = ret.getValue();
System.out.println(value);
}else{
Fault fault = resp.getFault();
System.err.println(“Generated fault:”);
System.out.println(“ Fault Code = ” + fault.getFaultCode());
System.out.println(“ Fault String = ” + fault.getFaultString());
}
}catch(SOAPException e){
System.out.println(“Caught SOAPException(” +
e.getFaultCode()+”):”+
e.getMessage());
}
}
}
编译并执行:
>java TestEchoService 日鸡鸡
完成
