soap服务的部署

导读:

  

  (2)安装Apache SOAP: 把下载回来的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, I don't speak via HTTP GET- you have to use HTTP POST to tal

  k to me”,第一步测试通过。 2.命令行测试:在命令行下输入下面命令

  >java org.apache.soap.server.ServiceManagerClient http://localhost:808

  0/soap/servlet/rpcrouter list

  如果输出只是"Deployed Services:",没有得到其他任何输出信息,否则请检查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文件的编写:

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

  

   <<<---部署的服务名称

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

  

  

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

  

   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"/>  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。这一步很重要,如果设置不当,客户端就可能无法得到返回值

  

  

  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路径下执行

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

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

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

  Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=218378



本文转自

http://blog.csdn.net/123xxx/archive/2004/12/16/218378.aspx
>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值