因为公司需要用到webservice服务端和客户端之间交互发送文件,所以特使用不同方式(wsimport,Axis+Tomcat,Ecplise的webservice工具生成,CXF)来实现了webservice的服务端和客户端
下面用Axis简单粗暴的方式来生成webservice的服务端
上操作步骤:
一.前提需要准备的一些环境
1. Ecplise
2.Tomcat (需要知道你的tomcat的安装路径,以下的我的tomcat安装路径)
3.Axis1.4 (可以去CSDN下载或Apache官网下载)
二.准备环境部署Axis1.4+Tomcat
1.解压axis-bin-1_4.zip,找到webapps目录,再找到axis文件夹进行拷贝,拷贝完之后需要把它放在你的Tomcat的安装路径的webapps目录下。
2.在jdk安装目录的lib下找到activation.jar、mail.jar、tools.jar这三个jar包,将其拷贝到你的Tomcat安装目录\webapps\axis\WEB-INF\lib目录下。
3.启动Tomcat(双击Tomcat9w.exe)
效果图:
要想服务端能访问到,它需要一直启动着,等不用了就可以关了(Stop)
4.验证是否成功
访问http://localhost:8080/axis/happyaxis.jsp 如果访问成功,恭喜你!基本的配置你已经做完了
5.Webservice的正式发布,AXIS提供了两种发布方式,一种是即时发布(Instant Deployment),另外一种是定制发布(Custom Deployment)。即时发布提供了一种非常简单的webservice的发布方式,但是其中限制太多,因此在实际的开发中定制发布才是首选。这里也将会以定制发布为重点来介绍。
新建一个简单的java工程
6.需要获取到java工程类的class文件,Ecplise的话,可以设置自动编译,就能获取class文件
7.找java工程类的class文件
以下是我的工程存放路径生成的class文件,你可以按照自己的路径找
然后连包带class文件一起拷贝到你的安装目录\webapps\axis\WEB-INF\classes下
即存放完之后的完整路径为:
Tomcat安装路径\webapps\axis\WEB-INF\classes\com\yinxin\service\HelloWorld.class,
8.接下来开始编写发布文件:deploy.wsdd
在Tomcat安装目录\webapps\axis\WEB-INF 目录下建立这个文件(deploy.wsdd)并在其中添加如下内容:
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="HelloWorld" provider="java:RPC">
<parameter name="className" value="com.yinxin.service.HelloWorld" />
<parameter name="allowedMethods" value="*" />
</service>
</deployment>
简单的介绍下各个节点的含义,"HelloWorld"当然是这个webservice的名字,后面紧跟的java:RPC指的是服务类型。这里一共有有4种类型,分别是:RPC, Document, Wrapped 和 Message。有兴趣可以看下 org.apache.axis.providers这个包和子包下面的类的API文档。之后的parameter节点第一个当然是指出具体的类,第二个从字面上也很好理解:允许调用的方法。这里的配置告诉引擎可以调用所有的public方法,当然你也可以自己指定。 编写完配置发布文件之后,cmd打开windows的控制台,进入Tomact安装路径\webapps\axis\WEB-INF目录下键入如下命令
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd
效果图:
之后控制台返回Processing file deploy.wsdd 和 Done processing 这两段话即说明发布成功。(此时会在同级目录生成一个server-config.wsdd文件 )在这里的AdminClient是AXIS提供的一个客户端管理工具。至于java.ext.dirs的含义可以去了解一下classloader和JVM类装载机制方面的知识,在这里就不多解释。 还有一点要注意的是在发布的时候Tomcat服务必须处于启动状态,否则就会抛出一堆无法连接的异常信息。发布成功之后你可以通过访问 http://localhost:8080/axis/servlet/AxisServlet 来查看你所有的定制发布的服务。
在同级目录生成的server-config.wsdd文件展示:
通过访问 http://localhost:8080/axis/servlet/AxisServlet 来查看你所有的定制发布的服务。
点击HelloWorld的wsdl链接,显示如下:
config.wsdd文件如下:
9.看到上面,说明我们的axis发布的webservice服务器端已经完成。
接下来下面编写客户端测试发布的服务:
需要导一些jar包 :(在axis-1_4解压包下的lib底下的jar包)
新建一个HelloWorldTest测试类(HelloWorldTest.java)
package com.yinxin.service;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
//Axis客户端
public class HelloWorldTest {
public static void main(String[] args) {
try {
String targetEendPoint = "http://localhost:8080/axis/services/HelloWorld" ;
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress( new URL(targetEendPoint));
call.setOperationName( new QName(targetEendPoint, "hello" ));
String result = (String) call.invoke( new Object[]{ "syp" });
System.out.println(result);
call.setOperationName( new QName(targetEendPoint, "add" ));
Integer res = (Integer) call.invoke( new Object[]{ new Integer( 1 ), new Integer( 2 )});
System.out.println( "The result is: " + res);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
效果图: