Axis2实现web service接口开发+客户端调用
Axis2百度百科:
一、介绍:
Axis2是下一代 Apache Axis。Axis2 虽然由 Axis 1.x 处理程序模型提供支持,但它具有更强的灵活性并可扩展到新的体系结构。Axis2 基于新的体系结构进行了全新编写,而且没有采用 Axis 1.x 的常用代码。支持开发 Axis2 的动力是探寻模块化更强、灵活性更高和更有效的体系结构,这种体系结构可以很容易地插入到其他相关 Web 服务标准和协议(如 WS-Security、WS-ReliableMessaging 等)的实现中。
Apache Axis2 是Axis的后续版本,是新一代的SOAP引擎。
二、主要特点
axis2开发web service接口
一、参考资源:
1: http://blog.csdn.net/xumengxing/article/details/13093573
2:http://my.oschina.net/zichen/blog/101485
3:http://jingyan.baidu.com/article/a3761b2bbe092c1576f9aa29.html
二、Axis2的下载和安装
可以从如下的网址下载Axis2的最新版本:
官网:http://apache.fayea.com//axis/axis2/java/core/1.6.2/axis2-1.6.2-bin.zip
http://apache.fayea.com/axis/axis2/java/core/1.6.2/axis2-1.6.2-war.zip
在本文使用了目前Axis2的版本1.6.2。可以下载如下两个zip包:
axis2-1.6.2-bin.zip
axis2-1.6.2-war.zip
其中axis2-1.4.1-bin.zip文件中包含了Axis2中所有的jar文件,axis2-1.4.1-war.zip文件用于将WebService发布到Web容器中。
下面发布webservice接口,有两种方式,一种与项目分离的方式,需要安装axis2,但不需要配置。一种是随着项目运行而发布web service接口,这也是一种常用的方式。
这里先记录下安装的过程。如果使用的Tomcat 7.0版本以后,Tomcat是免安装版的,则这里安装Axis2 将不需要设置环境变量,直接将axis2-1.4.1-war.zip文件解压得到的axis2.war文件放到Tomcat的webapps目录中,并启动Tomcat即可。如果Tomcat是需要的安装版本,其他步骤同上,并且还需要为Axis2配置环境变量。
例如:将axis2-1.6.2-bin.zip解压到本地目录D:\axis2-1.6.2,则环境变量配置如下:
AXIS2_HOME 设置值 D:\axis2-1.6.2
Path 添加值%AXIS2_HOME%\bin
安装测试,在浏览器地址栏中输入如下的URL:http://localhost:8080/axis2/,如果在浏览器中显示出如下图所示的页面,再点击Validation进入另一界面,而没有报错则表示Axis2安装成功。
三、编写和发布WebService
以下开发环境及工具:
1.window764为Pc机
2.Tomcat7.0 window 64位版本
3.Eclipse 3.7 window 64位版本
4.火狐浏览器36.0.1版本
5.Axis2-1.6.2版本
1.在Axis2中不需要进行任何的配置,就可以直接将一个简单的POJO发布成WebService。其中POJO中所有的public方法将被发布成WebService方法。这种方法是依靠Axis平台发布web service接口,不用复杂的配置但缺点就是与自己开发的项目完全分离。
下面我们来实现一个简单的POJO,代码如下:
public class HelloWorld { public String sayHello(String str){ return "Hello "+ str; } }
注意:该class文件不能有package关键字声明包,如果有访问接口的时候就会报错。
该文件为HelloWorld.java 文件,要先将该文件编译成.class 文件(手动编译当个java文件可以使用CMD命令实现,例如:将该文件HelloWorld.java拷贝到C盘下的aaa文件下,然后打开cmd窗口,将当前目录移到C:\aaa下,然后执行 javac HelloWorld.java,执行后再回aaa文件下看,就会出现一个HelloWorld.class 文件,该文件即为编译后的文件,具体步骤如图:)
然后将编译好的HelloWorld.class文件复制到Tomcat的\webapps\axis2\WEB-INF\pojo目录中(如果没有pojo目录,则建立该目录),然后启动Tomcat。现在我们已经成功将HelloWorld类发布成了WebService。
查看接口,在浏览器地址栏中输入如下的URL:http://localhost:8080/axis2/services/listServices
这时当前页面将显示所有在Axis2中发布的WebService,
点击HelloWorld就能得到接口的wsld文档,发布成功!
2.实际开发中,一般都希望webservice接口随项目启动而发布,接下来简单记录一下在项目中集成发布axis2 webservice接口
a.打开axis2.war包,将conf,lib,modules三个文件夹复制到项目的WEB-INF文件夹下 ,再在WEB-INF目录下新建一个services文件夹,然后在services文件下新建一个文件夹(任意取名),再新建META-INF文件夹,最后再新增services.xml,接口信息就写在这里面。
具体路径:WEB-INF/services/myservice/META-INF/services.xml
b.打开web.xml文件,在web.xml中添加Axis2的配置信息
<servlet> <display-name>Apache-Axis Servlet</display-name> <servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>
c.然后在项目中的src下创建包,再在包下创建一个类,用来提供web service接口,
package com.axis.service; public class TestAxis { public String test(String str){ return "hello " + str; } }
<p> </p><p></p><p>d.在之前创建好的service.xml文件中为webservice接口类配置接口信息</p><p>services.xml的配置如下:</p><pre name="code" class="html"><?xml version="1.0" encoding="UTF-8"?> <service name="AxisService"> <description>AxisService</description> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </messageReceivers> <parameter name="ServiceClass">com.axis.service.TestAxis</parameter> </service>
e.项目实例完成,项目结构如下:
f.运行该项目,访问http://localhost:8080/MyAxis/services/AxisService?wsdl,如果报错,则返回项目检测配置是否有问题等,成功则会得到wsdl文档
Axis2客户端调用web service接口:
无论是上面那种方法发布的web service接口,客户端的调用不变,前提要先得到接口的wsld文档
axis2客户端调用webservice接口很简单,新建一个项目,导入Axis2框架lib下的全部jar包(可以从上一个service项目的lib中复制过来),然后在项目src下新建一个客户端测试类,代码如下,运行该类main方法调用(前提:上面发布的web service接口不能关)
package com.axis.webservice; import javax.xml.namespace.QName; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.rpc.client.RPCServiceClient; public class ClientTest { public static void main(String[] args) { String url = "http://localhost:8080/MyAxis/services/AxisService"; String result = null; try { RPCServiceClient serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); EndpointReference targetEPR = new EndpointReference(url); options.setTo(targetEPR); QName opAddEntry = new QName("http://service.axis.com", "test"); Object[] opAddEntryArgs = new Object[] { "java" }; Class[] classes = new Class[] { String.class }; result=(String)serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs, classes)[0]; System.out.println(result); } catch (Exception e) { e.printStackTrace(); } } }
运行结果如下,则表示成功:
全部完成,最后献上中途中使用的到的Axis2及项目实例的资源下载路径:http://pan.baidu.com/s/1bnnktXX