java + soap 环境配置

来源:互联网 发布:object数组怎么调用 编辑:程序博客网 时间:2024/06/03 15:32

一、搭建环境

工具:tomcat6.0 + jdk1.6 
activation.jar   --  jaf-1.1
mail.jar  --   javamail-1.4
soap.jar --  soap-bin-2.3.1
xerces.jar  -- xerces-J-bin.1.2.3


将soap.jar、mail.jar、xerces.jar、activation.jar、tools.jar(Java的)拷贝到 %CATALINA_HOME%/lib下
将soap.war拷贝到%CATALINA%webapps下, 也可以将soap解压

添加环境变量:%CATALINA_HOME%/lib/XXXX.jar; ( XXXX.jar )指的是上面工具中提到四个.jar包

二、测试环境
2.1启动Firefox
输入:http://localhost:8080/soap/servlet/rpcrouter
成功则输出:

         SOAP RPC Router

                  Sorry, I don't speak via HTTP GET- you have to use HTTP POST to talk to me.

           否则检查classpath等。

2.2 命令行

java  org.apache.soap.server.ServiceManagerClient  http://127.0.0.1:8080/soap/servlet/rpcrouter   list  

成功则输出:

               Deployed Services:

 

三、测试程序

3.1服务器程序

HelloWorldService.java

------------------------------------------

package cn.com.test.soap.hello;

public class HelloWorldService {

public String getMessage() {
return "Hello World!";
}
}

------------------------------------------

编译后,将目录 cn.com.test.soap.hello拷贝到%CATALINA%/webapps/soap/WEB-INF/classes/目录下  

 

3.2 部署服务

- - - - - - ---------  - a.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="getMessage">
<isd:java class="cn.com.test.soap.hello.HelloWorldService" static="false"/>
</isd:provider>
</isd:service>

- --------------- ---------------------- ------------------------------- -------

定位到a.xml目录  

命令:java  org.apache.soap.server.ServiceManagerClient  http://127.0.0.1:8080/soap/servlet/rpcrouter   a.xml

成功则输出:

                  Usgae: java org.apache.soap.server.ServiceManagerClient

                                                      [ -auth username:password url  operation  arguments ]

                        。。。。还有一些就不写了,只要没告诉你有Exception就行了

3.3 Client端程序 见最后 

这时候 运行HelloWorldClient.java 

成功:Hello World!(当然这是大家写测试例子是经常用的啦!!)

失败:The Following Error Occured:
Fault Code = SOAP-ENV:Server
Fault String =service 'urn:HelloWorldService' unknown

原因之一:(至少在我的机器上是这样的)就是在tomcat5.5下没有把HelloWorldService.class 所在的目录拷贝到%CATALINA%/webapps/soap/WEB-INF/classes/目录下。

其他原因,等待大家补充!!

--- ----------- ------------- HelloWorldClient.java ---------- - -------------- --------

package cn.com.test.soap.hello;
import java.net.URL;

import org.apache.soap.Constants;

import org.apache.soap.Fault;
import org.apache.soap.rpc.Call;
import org.apache.soap.rpc.Parameter;
import org.apache.soap.rpc.Response;

public class HelloWorldClient {


public static void main(String args[]) throws Exception {


String endPoint = "http://localhost:8080/soap/servlet/rpcrouter";


Call call = new Call();//创建一个RPC Call

call.setTargetObjectURI("urn:HelloWorldService");//远程的服务名
call.setMethodName("getMessage");//访问方法
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); //设置编码风格
URL url = new URL(endPoint); //SOAP服务的网址
//开始发送RPC请求,并返回服务器端的应答
Response resp = call.invoke(url, "");

//检查应答报文中是否有错

//有错就打印出错信息,没错就打印到正确的返回值HelloWorld
if (resp.generatedFault()) {
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 {
Parameter result = resp.getReturnValue();
System.out.println(result.getValue());
}
}
}

---------------------- -------------- --------------- -----------    ------------  ------------

ps: 在tomcat5.5中soap.war解压后拷贝到webapps 下不会自动生成一个DeployedServices.ds的文件,缺少这个文件会出很多问题,原因嘛,还没弄明白。

但是在tomcat6.0中 webapps/soap自己出现了DeployedServices.ds文件,所以我判断在是这个文件导致我在tomcat5.5中配置不成功。

原创粉丝点击