您的位置:首页 > 其它

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

2015-03-11 18:56 525 查看
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引擎。

二、主要特点

采用名为 AXIOM(AXIs Object Model)的新核心XML标准通用标记语言的子集)处理模型,利用新的XML解析器提供的灵活性按需构造对象模型。

支持不同的消息交换模式。目前Axis2支持三种模式:In-Only、Robust-In和In-Out。In-Only消息交换模式只有SOAP请求,而不需要应答;Robust-In消息交换模式发送SOAP请求,只有在出错的情况下才返回应答;In-Out消息交换模式总是存在SOAP请求和应答。

提供阻塞和非阻塞客户端 API。
支持内置的 Web服务寻址 (WS-Addressing) 。
灵活的数据绑定,可以选择直接使用 AXIOM,使用与原来的 Axis 相似的简单数据绑定方法,或使用XMLBeans、JiBX 或 JAXB 2.0 等专用数据绑定框架。

新的部署模型,支持热部署

支持HTTP,SMTP,JMS,TCP传输协议

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





三、编写和发布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


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: