Axis2实现web service接口开发+客户端调用

来源:互联网 发布:java程序员学php 编辑:程序博客网 时间:2024/05/17 03:03

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引擎。

二、主要特点

  1. 采用名为 AXIOM(AXIs Object Model)的新核心XML(标准通用标记语言的子集)处理模型,利用新的XML解析器提供的灵活性按需构造对象模型。
  2. 支持不同的消息交换模式。目前Axis2支持三种模式:In-Only、Robust-In和In-Out。In-Only消息交换模式只有SOAP请求,而不需要应答;Robust-In消息交换模式发送SOAP请求,只有在出错的情况下才返回应答;In-Out消息交换模式总是存在SOAP请求和应答。
  3. 提供阻塞和非阻塞客户端 API。
  4. 支持内置的 Web服务寻址 (WS-Addressing) 。
  5. 灵活的数据绑定,可以选择直接使用 AXIOM,使用与原来的 Axis 相似的简单数据绑定方法,或使用XMLBeans、JiBX 或 JAXB 2.0 等专用数据绑定框架。
  6. 新的部署模型,支持热部署。
  7. 支持HTTP,SMTP,JMS,TCP传输协议。
  8. 支持REST (Representational State Transfer)。

 

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安装成功。

图1

图2

三、编写和发布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 文件,该文件即为编译后的文件,具体步骤如图:图3)

然后将编译好的HelloWorld.class文件复制到Tomcat的\webapps\axis2\WEB-INF\pojo目录中(如果没有pojo目录,则建立该目录),然后启动Tomcat。现在我们已经成功将HelloWorld类发布成了WebService。

查看接口,在浏览器地址栏中输入如下的URL:http://localhost:8080/axis2/services/listServices

这时当前页面将显示所有在Axis2中发布的WebService,

图4

点击HelloWorld就能得到接口的wsld文档,发布成功!

图6



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.项目实例完成,项目结构如下:

图7

f.运行该项目,访问http://localhost:8080/MyAxis/services/AxisService?wsdl,如果报错,则返回项目检测配置是否有问题等,成功则会得到wsdl文档

图8




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();}}}

运行结果如下,则表示成功:

图9

全部完成,最后献上中途中使用的到的Axis2及项目实例的资源下载路径:http://pan.baidu.com/s/1bnnktXX









0 0
原创粉丝点击