soap服务的部署

来源:互联网 发布:吉诺比利生涯数据 编辑:程序博客网 时间:2024/04/25 14:36

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

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

 

2安装Apache SOAP
      
把下回来的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, 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文件的编写:

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

<?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文件里

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

原创粉丝点击