参考:http://www.tuicool.com/articles/I32qya
~~~~框架搭建~~~~~~~
1.web容器方面我使用的是tomcat8.0,可直接到apache tomcat页面进行下载,其他所需文件
2.解压后把soap里的soap.jar文件,jaf里的activation.jar文件,javamail里的mail.jar文件,以及xerces-2.11.0中的5个jar文件(如图)放到tomcat的lib文件夹下
3.这里还使用到jdk/lib的tools.jar,也要放到tomcat的lib下,我使用的jdk版本是1.8,接下来需要将soap文件夹下的soap.war文件放到tomcat的webapp里,其作用是启动tomcat
后可以进行页面访问部署到soap上的服务
4.设置环境变量,在系统变量中设置TOMCAT_HOME(对应其安装地址),如D:\work-app\tomcat8\apache-tomcat-8.0.35,下面是lib等目录,然后设置CLASSPATH,对应刚刚
在tomcat的lib下添加的jar文件,我的是
%JAVA_HOME%\lib\tools.jar;
%TOMCAT_HOME%/lib/soap.jar;
%TOMCAT_HOME%/lib/mail.jar;
%TOMCAT_HOME%/lib/activation.jar;
%TOMCAT_HOME%/lib/xercesImpl.jar;
%TOMCAT_HOME%/lib/xercesSamples.jar;
%TOMCAT_HOME%/lib/xml-apis.jar;
tools.jar的地址也可以写复制到tomcat下的地址%TOMCAT_HOME%\lib\tools.jar;
启动tomcat,到bin目录下启动dos输入startup
~~~~~服务发布~~~~~
一般写web程序先要想好服务功能,即构建服务端业务逻辑后再写客户端代码
新建一个普通的java工程SoapLearning
新建ParaClient类以及ParaService,结构如图(注意包路径)
1.服务端代码
package cn.edu.firstsoap;
public class ParaService {
public String getMessage() {
return "Hello World!";
}
public String getMessage(String str) {
return "Hello World! " + str;
}
public String getMessage(String str1, String str2) {
return "Hello World! " + str1 + "&" + str2;
}
}
2.客户端代码
package cn.edu.firstsoap;
import java.net.URL;
import java.util.Vector;
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 ParaClient {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
String endPoint = "http://localhost:8080/soap/servlet/rpcrouter";
Call call = new Call();
call.setTargetObjectURI("urn:ParaService");
call.setMethodName("getMessage");
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
Vector params = new Vector();
Parameter p1 = new Parameter("name",String.class,"fgao",null);
Parameter p2 = new Parameter("name2",String.class,"fangao",null);
params.addElement(p1);
params.addElement(p2);
call.setParams(params);
URL url = new URL(endPoint);
Response resp = call.invoke(url, "");
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());
}
}
}
3.通过xml注册服务,新建一个Config-xml文件,新建HelloWorld-para.xml文件,写入
<?xml version="1.0" encoding="UTF-8"?>
<isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment" id="urn:ParaService">
<isd:provider type="java" scope="Request" methods="getMessage">
<isd:java class="cn.edu.firstsoap.ParaService" static="false"/>
</isd:provider>
</isd:service>
4. 把bin文件夹下的ParaService.class文件放到tomcat/webapps/soap/WEB-INF的class文件夹下,需要注意的是一定要在该文件下建立对应的包路径再放入ParaService.class,如图。我看其他文章说可以打包成jar文件放到tomcat的lib下,但我尝试后失败
5.重启tomcat,restart
6.在.xml文件夹处打开Dos,执行以下命令正式发布服务
java org.apache.soap.server.ServiceManagerClient http://127.0.0.1:8080/soap/servlet/rpcrouter deploy HelloWorld-para.xml
执行以下命令查看发布的服务清单
java org.apache.soap.server.ServiceManagerClient http://127.0.0.1:8080/soap/servlet/rpcrouter list
取消发布
java org.apache.soap.server.ServiceManagerClient http://127.0.0.1:8080/soap/servlet/rpcrouter undelpoy "urn:ParaService"
7.可以登录Http://localhost:8080/soap进行查看发布的服务
8.运行客户端代码,返回结果