最近公司在一个项目上与另外一家公司做接口集成,需要webservice来处理数据的传递,本来我用的CXF简单配置下就可以发布了(关于CXF发布webservice的过程,在后面的博客中也会给个案例,欢迎扔板儿砖!~_~),但是对方用的是axis,本来以为用wsimport解析下wsdl文件就可以生成客户端程序,然后就可以调用了,后来才发现,解析不了~_~,没办法只能研究下怎么通过axis发布webservice吧!
环境准备:
- eclipse3.7.2
- apache-tomcat-6.0.36
我的目录是:E:\Program Files (x86)\apache-tomcat-6.0.36;一下的tomcat路径都将会沿用这个目录,有时也会用%TOMCAT_HOME%代替 - axis1.4
先展示下效果,首先启动tomcat(startup.bat[windows版本]),然后在浏览器上输入:http://localhost:8080/axis/services,截图如下:
,好了,这里你可以看到有四个无序列表,而且每个后面都还有wsdl链接,简单说下:拿第一个来说
这个是服务名称,先记着,后面会说明。
这个是wsdl描述文件的链接,点进去看下~_~
3.
好了,介绍完后,开始我们第一个webservice服务的发布吧!!!
你会注意到几乎每个java案例都会从HelloWorld开始,这里惯例,我们也遵守下吧~_~
环境部署:axis的部署
解压axis-bin-1_4.zip这个包可以看到webapps目录,双击进入把里面的AXIS文件夹拷到 %TOMCAT_HOME%\webapps目录下,之后拷贝activation.jar、mail.jar、tools.jar到%TOMCAT_HOME%\webapps\axis\WEB-INF\lib目录下。启动tomcat,访问http://localhost:8080/axis/happyaxis.jsp 如果访问成功,恭喜你!基本的配置你已经做完了。
PS:此处的%TOMCAT_HOME%指的是Tomcat的安装目录,至于那另外的三个jar包,jdk安装目录的lib下就能找的到。
现在来说一下最关键的Webservice的发布。AXIS提供了两种发布方式,一种是即时发布(Instant Deployment),另外一种是定制发布(Custom Deployment)。即时发布提供了一种非常简单的webservice的发布方式,但是其中限制太多,因此在实际的开发中定制发布才是首选。这里也将会以定制发布为重点来介绍。
HelloWorld.java
package com.burns;
public class HelloWorld {
public HelloWorld() {
}
public String hello(String str) {
return "Hello " + str;
}
public int add(int a, int b) {
return a + b;
}
}
如果这里你是在eclipse做的话,设置eclipse自动编译,就能获取class文件。
class文件如图:
这样一个HelloWorld.class文件就获取到了,然后连包带class文件一起拷贝到E:\Program Files (x86)\apache-tomcat-6.0.36\webapps\axis\WEB-INF\classes下,即HelloWorld.class的完整路径为:E:\Program Files (x86)\apache-tomcat-6.0.36\webapps\axis\WEB-INF\classes\com\burns\HelloWorld.class,
接下来开始编写发布文件:deploy.wsdd , 在E:\Program Files (x86)\apache-tomcat-6.0.36\webapps\axis\WEB-INF 目录下建立这个文件并在其中添加如下内容:
<?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.burns.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的控制台,进入%TOMCAT_HOME%\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 来查看你所有的定制发布的服务。
点击HelloWorld的wsdl链接,显示如下:
config.wsdd文件如下:
好了,至此,我们的axis发布的webservice服务器端已经完成。
下面编写客户端测试发布的服务:
HelloWorldTest.java
package com.burns;
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;
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[]{ "Robert" });
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();
}
}
}
测试结果:
Hello Robert
The result is: 3
网上也发现一些不错的资源,粘贴如下:
利用AXIS开发Webservice(一) —— 如何发布自己的webservice
Axis1.x WebService开发指南