Archive for 二月, 2004

Simple SOAP example

星期日, 二月 15th, 2004

首先需要安装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 日鸡鸡


完成