参考: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.运行客户端代码,返回结果