Axis2开发webservice案例详解
来源:互联网 发布:c语言产生随机数的方法 编辑:程序博客网 时间:2024/06/08 08:12
最近公司在一个项目上与另外一家公司做接口集成,需要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开发指南
- Axis2开发webservice案例详解
- Axis2开发webservice详解
- axis2 开发webservice详解
- Axis2开发webservice详解
- Axis2开发webservice详解
- Axis2开发webservice详解
- webservice(四)Axis2开发webservice详解
- 基于Axis2开发WebService代码详解
- axis2来开发webService 简单示例详解
- Spring + axis2 开发 webservice
- Spring + axis2 开发 webservice
- Axis2开发webservice总结
- axis2 webService开发
- Axis2.x WebService开发
- Axis2.x WebService开发
- Axis2开发webservice总结
- myeclipse10+axis2开发webservice
- axis2开发webservice
- 【Stanford机器学习笔记】12-Dimensionality Reduction
- common lisp 安装和使用第三方包
- 牛腩总结
- eclipse 常用快捷键
- 开篇之作
- Axis2开发webservice案例详解
- 练习25:更多练习
- DeepLearning论文笔记(二):Understanding Deep Architectures using a Recursive Convolutional Network
- vim 编辑器配置
- 状态模式(State Design Pattern)
- 取模与取余
- (总结)Nginx配置文件nginx.conf中文详解
- IE浏览器无法上网:该设备或资源(127.0.0.1)未设置为接受端口“16823”上的连接。
- NavigationView解决Item图标不显示原始颜色