Axis2集成Spring 4
- 格式:pdf
- 大小:374.79 KB
- 文档页数:7
Axis2与CXF易用性比较一. CXF与spring集成1.简介:CXF是基于JAX-WS实现的,JAX-WS规范是一组XML web services的JA V A API,它使用户无需编写复杂的SOAP ENV,WSDL。
在JAX-WS中,一个远程调用可以转换为一个基于XML的协议例如SOAP。
在使用JAX-WS过程中,开发者不需要编写任何生成和处理SOAP消息的代码。
JAX-WS的运行时实现会将这些API的调用转换成为对于SOAP消息。
在服务器端,用户只需要通过Java语言定义远程调用所需要实现的接口SEI (service endpoint interface),并提供相关的实现,通过调用JAX-WS的服务发布接口就可以将其发布为WebService接口。
在客户端,用户可以通过JAX-WS的API创建一个代理(用本地对象来替代远程的服务)来实现对于远程服务器端的调用。
2.实现过程:a)为CXF设置编译和开发环境在/download.html下载相应的CXF包,/lib目录下的jar 文件引入工程b) 新建工程,cxfspring,包含WebRoot/WEB-INF目录c) 编写服务首先写一个服务接口,例子中的HelloWorld.java。
我们要注意的是这个例子使用了JSR181规范中的声明“@WebService”。
package demo.spring;import javax.jws.WebService;@WebServicepublic interface HelloWorld {String sayHi(String text);}下一步实现这个服务接口,例子中的HelloWorldImpl.java。
这个例子代码中的“@WebService”标签只包含一个endpointInterface的属性,这个属性让CXF 知道根据哪个接口生成WSDL文件。
这里有点和我们第一个例子不同,没有包含ServiceName属性。
Axis2基础开发文档作者:李文杰1.Axis 体系结构概述Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物。
Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持Spring、JSON等技术。
具有更强的灵活性并可扩展到新的体系结构,这种体系结构可以很容易地插入到其他相关Web 服务标准和协议(如WS-Security、WS-ReliableMessaging 等)的实现中。
Axis2 的特性包括:1)采用名为AXIOM(AXIs Object Model,Axis 对象模型)的新核心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) 和传输控制协议(TCP) 和JMS等传输协议8)支持REST (Representational State Transfer)。
注:AXIOM(AXI s O bject M odel,Axis 对象模型)。
使用了AXIOM,就规定了服务所定义的方法中的参数必须是OMElement类型,所以我们看到参数的类型都是OMElement了本系列文章以Axis2 1.5.5 版本为基础。
1. 下载Axis2插件和部署环境Axis2官方网站:/axis2/java/core/index.html2. 为MyEclipse10安装Axis2开发插件,解压codegen-1.6.2.zip和service-1.6.2.zip,复制解压后的文件到MyEclipse10安装目录的dropins目录下,并新建一个记事本文件,命名为:axis2.link,写入内容:path=D:\\Program Files\\MyEclipse 10.1\\MyEclipse 10\\dropins。
重启MyEclipse10,即可看到Axis2插件已经安装成功3. 配置部署环境。
解压axis2-1.6.2-war.zip文件,把得到的axis2.war文件复制到Tomcat安装目录下的webapp文件夹下,并启动Tomcat。
在浏览器输入网址:http://localhost:8080/axis2/,看到如下界面,表示部署环境配置成功。
4. 开发webservice服务端。
新建web project(不能是java project)。
并添加com.server包,在包下建立两个类:DoubleArith.java和FloatArith.java,并写入以下内容。
生成Axis2服务端部署文件,DoubleArith.aar和FloatArith.aar。
先运行Axis2Server,使程序在classes文件夹下生成DoubleArith.class和FloatArith.class文件,因为这两个文件是生成aar 文件的必备文件这样就在D:\Run目录下生成DoubleArith.aar文件。
同理,可以生成FloatArith.aar。
把DoubleArith.aar和FloatArith.aar文件从D:\Run文件夹复制到Tomcat\webapp\axis2\WEB-INF\services目录下。
环境:axis2 1.4, spring1.2 或者spring2.0,tomcat6.0, windows vista由于项目需要搭建一个良好的架构,我选择了用axis2和spring整合。
不过再还没有做的时候,就听同事和网上的朋友说axis2和spring整合是多么难的事,使得我有一种极度想挑战它的心理,哈,其实整合起来非常的容易,不过网上介绍axis2的不多。
我是用axis2官方网站的方法做整合的。
地址:/axis2/1_4_1/spring.html官方网站上介绍两种方式整合,一种是我们所熟悉的applicationContext.xml放在和web.xml同一级的目录下,第二种是放在aar 里面。
因为任务上的一些因素,我选用第一种方式,而且我也只记录第一种,第二种我没有研究我,我怕说错了误人子弟,好啦,开始。
1、首先,需要axis2.war,根据它的目录结构我们修改自己的web应用。
只需拷贝axis2/WEB-INF/目录下的所有文件到自己的web项目下就可以了,记得要覆盖所有(axis2-web这个文件夹是包含axis2整个的管理界面,可有可无,不过要用的话,记得它是放在和WEB-INF的同级目录下),其实我们就是有点像在整个的axis2工程上做二次开发。
2、我们像做所有其它的Web项目一样,用到spring的时候拷贝spring.jar到WEB-INF/lib目录下,然后在web.xml同级的目录下建立一个applicationContext.xml,并且在applicationContext.xml引用相应的DTD或XSD(spring1.2引用的是DTD,spring2.0引用的是XSD),然后会在web.xml中加入这一段(当然,你可以选择用其它方式配置spring对web项目的支持)。
< listener >< listener-class > org.springframework.web.context.ContextLoaderListener </ listener-class ></ listener >< context-param >< param-name > contextConfigLocation </ param-name >< param-value > /WEB-INF/applicationContext.xml </ param-value ></ context-param >3、发布整个项目发部到tomcat上,测试起动服务有没有问题。
一、Axis2简介1.1 介绍Axis2Axis框架来自Apache 开放源代码组织,它是基于JAVA语言的最新的SOAP 规范(SOAP 1.2)和SOAP withAttachments 规范(来自Apache Group )的开放源代码实现。
有很多流行的开发工具都使用AXIS作为其实现支持Web服务的功能,例如JBuilder以及著名的Eclipse J2EE插件Lomboz。
AXIS的最新版本可以从/axis/index.html下载。
下载下来后直接解压即可用了。
下图是AXIS核心引擎的体系结构图:整个AXIS项目包括以下几个部分:ü消息流子系统消息流子系统提供了灵活的消息传递框架,这个消息传递框架包括处理程序、链、序列化程序和反序列化程序。
处理程序是一个处理请求、响应和故障流的对象。
处理程序可被组合在一起成为链,而且可以使用一个灵活的部署描述符来配置这些处理程序的顺序。
ü传输框架子系统提供了一个传输框架,这个传输框架可以帮助您创建自己的可插式传输发送器和传输侦听器。
ü数据编码子系统AXIS完全按照XML Schema 规范提供各种数据类型的自动序列化,并且提供功能扩展接口来使用您自己定制的序列化器和反序列化器。
ü其他AXIS完全支持WSDL 以及日志记录、出错以及故障处理机制。
它同时提供一些工具用来讲WSDL文档转换成客户端的调用框架以及根据类来产生WSDL定义文档。
AXIS目前版本支持的标准是:W3C SOAP1.1 和1.2;WSDL 1.1;SAAJ 1.1(SUN公司:SOAP with Attachments API for Java);JAX-RPC(SUN公司:Java APIfor XML-Based RPC)1.0。
1.2 开发项目中如何选择使用Axis2和其它的WebService²如果你的应用程序需要支持多语言即有C++, .net, Java,你应该选择Axis2。
用Axis2实现Web Service,虽然可以将POJO类放在axis2\WEB-INF\pojo目录中直接发布成Web Service,这样做不需要进行任何配置,但这些POJO类不能在任何包中。
这似乎有些不方便,为此,Axis2也允许将带包的POJO类发布成Web Service。
先实现一个POJO类,代码如下:package service;public class MyService{public String get Greeting(String name){return "您好 " + name;}public void update(String data){System.out.println("<" + data + ">已经更新");}}这个类有两个方法,这两个方法都需要发布成Web Service方法。
这种方式和直接放在pojo目录中的POJO类不同。
要想将MyService类发布成Web Service,需要一个services.xml文件,这个文件需要放在META-INF目录中,该文件的内容如下:<service nam e="myService"><description>Web Service例子</description><parameter name="ServiceClass">service.MyService</parameter><messageReceivers><m essageReceiver m ep="/2004/08/wsdl/in-out"class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> <m essageReceiver m ep="/2004/08/wsdl/in-only"class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/> </messageReceivers></service>其中<service>元素用于发布Web Service,一个<service>元素只能发布一个WebService类,name属性表示WebService名,如下面的URL可以获得这个WebService 的WSDL内容:http://localhost:8080/axis2/services/m yService?wsdl其中name属性名就是上面URL中"?"和"/"之间的部分。
Axis2,CXF,xifire1. Axis2.x (3)1.1. 开发准备工作 (3)1.1.1. 环境 (3)1.1.2. 单独启动AXIS2服务 (4)1.1.3. 将axis2-1.6.2-bin.zip中的项目打成axis2.war包 (4)1.1.4. Axis2脚本 (5)1.1.5. 安装eclipse插件(可选) (7)1.1.6. axis2-bin文件目录结构 (8)1.1.7. 部署axis2.war到tomcat (8)1.1.8. 上传services(Uploading Services) (9)1.2. Axis2开发部署 (9)1.2.1. 编写服务器代码,和配置文件 (10)1.2.2. 发布 (11)1.2.3. 通过class文件生成wsdl文件(java2wsdl) (13)1.2.4. 通过wsdl文件生成Java访问代码(wsdl2java) (13)1.2.5. 调用:Axis2开发WebService客户端的3种方式 (14)1.2.6. PS:配置文件介绍 (21)1.3. 大病系统ESB接口开发 (25)1.3.1. esb接口标准 (26)1.3.2. esb接口开发 (31)1.3.3. esb接口调试测试 (53)1.3.4. esb接口发布 (53)2. CXF (53)2.1. 准备工作 (54)2.2. 开发示例 (54)2.2.1. 编写服务端接口 (55)2.2.2. 编写服务实现 (56)2.2.3. 编写webServiceApp.java类来暴露web服务 (57)2.2.4. 启动服务 (57)2.2.5. 编写客户端访问服务 (57)2.2.6. 测试 (58)2.2.7. 集成到spring (58)2.2.8. 通过wsdl文件生成客户端和服务器端代码 (61)3. xfire (62)3.1. 准备工作 (62)3.2. 开发步骤 (62)3.2.1. 建立目录结构 (62)3.2.2. 添加依赖包 (63)3.2.3. 编写服务端代码 (63)3.2.4. 配置web.xml (66)3.2.5. 创建xfire配置文件 (67)3.2.6. services.xml的作用 (68)3.2.7. 在服务器上运行服务 (69)4. Axis与XFire的比较 (72)4.1. XFire与Axis1性能的比较 (72)4.2. XFire与Axis2的比较 (72)5. cxf与axis2比较 (73)6. WSDL文件 (74)6.1. 抽象定义 (74)6.2. 具体定义 (74)7. JAXB (76)7.1. Java SE中的JAXB (76)7.2. 使用 (77)7.3. 缺省的数据类型绑定 (77)7.4. 代码示例 (78)1.Axis2.xWeb Service是现在最适合实现SOAP的技术,而Axis2是实现Web Service的一种技术框架(架构)。
AXIS2系列教程Axis2是目前比较流行的WebService引擎。
WebService被应用在很多不同的场景。
例如,可以使用WebService来发布服务端Java类的方法,以便使用不同的客户端进行调用。
这样可以有效地集成多种不同的技术来完成应用系统。
WebService还经常被使用在SOA中,用于SOA各个部分交换数据。
本课程重点讲解了Axis2的核心功能,并提供了三个项目以使学员理解并掌握如何将Axis2应用于不同的场景。
本课程站在初学者角度介绍了Axis2的大多数常用的功能,例如,以多种方式编写和发布WebService、JAX-RPC、JAX-WS、复杂类型传输、WebService会话管理、Axis2模块等。
本课程共分为两部分,其中第一部分为Axis2基础知识讲解。
在这部分介绍了前面所述的Axis2 知识。
第二部分介绍了三个小的项目。
这三个项目的功能类似。
所不同的是,它们使用了不同的技术来实现。
第一个项目使用Java Swing 技术实现了个人信息管理(PIM)系统,这个系统可以对个人信息(如姓名、职位、电话等)进行增、删、改、查。
在这些操作中,涉及到了如何使用WebService来传输和下载图像文件、传输查询结果(Resultset 对象)等技术难点。
第二个项目使用Struts 2.1.6(目前Struts 2的最新版,2009年1月发布)来实现PIM。
功能与第一个PIM类似。
只是这个系统为Web版。
在这个项目中学员可以学习到如果将WebService应用在Web程序中。
该系统的主要思想是如果Web程序和WebService部署在同一台机器上,Web程序可以直接调用WebService所对应的Java类。
当然,也可以象第一个项目一样,直接通过HTTP SOAP协议调用WebService。
在第二个项目中同时使用了这两种方式来实现。
这两种调用方式分别封装在两组Model类中。
可以通过配置struts.xml文件来提定使用哪组模型类(调用方式)。
一.在Eclipse中配置Axis2插件。
1.下载Axis2插件(Axis2官网:/axis2/java/core/download.html)2. 配置Eclipse Axis2插件把axis2-eclipse-codegen-plugin-1.7.1.zip和axis2-eclipse-service-plugin-1.7.1.zip文件里面的jar文件解压出来,放到eclipse目录下的dropins文件夹下,并新建一个txt文件,写入dropins目录的绝对路径,保存后更改文件格式为.link。
重启Eclipse,然后点击File-> New->Other->Axis2 Wizards即可看到axis2功能是否配置成功。
二.用Eclipse开发Axis2服务端1.解压axis2-1.7.1-bin.zip和axis2-1.7.1-war.zip文件,axis2-1.7.1-bin的解压文件夹随便放在一个目录下即可,axis2-1.7.1-war解压后的axis2.war文件放在tomcat目录的webapp文件夹下。
启动tomcat并输入http://localhost:8080/axis2即可看到如下画面。
2.新建Java Project,目录如下图所示(该示例主要展示了如何把配置文件也打包进aar文件),把axis2-1.7.1-bin的lib目录下的全部.jar文件(其实这些包是给客户端使用的,而且只需要其中一部分即可,为了方便才全部复制)全部复制到lib目录下,然后build path进项目中,建立如下文件:com.axis.server包下的文件AxisServer.java和User.java;resources 包下的文件application.properties。
3.生成aar文件:File->New->Other->Axis2 Wizards->Axis2 Service Archiver,并按下图流程进行即可生成aar文件。
Spring4.0集成Axis2/Java1.6.2构建一个简单的Web Service1、下载Axis2/Java1.6.2/axis2/java/core/download.cgi2、解压其中axis2-1.6.2-bin zip包,导入lib中的jar文件和axis2-1.6.2-bin\axis2-1.6.2\repository\modules\addressing-1.6.2.war把后缀改成addressing-1.6.2.jar后导入。
**若不导入addressing-1.6.2.jar会报addressing module找不到的错误PS:可以把\axis2-1.6.2-bin\axis2-1.6.2\webap\axis2-web文件夹拷贝到项目根目录,作为查看和管理服务用的,不是必要的2、编写一个Hello World测试接口HelloWs.javapackage axis;public interface HelloWs{String sayHello(String name);}HelloWsImpl.javapackage axis;public class HelloWsImpl implements HelloWs{public String sayHello(String name){if(name==null){return"Hello";}return"Hello,"+name+"!";}}3、在spring中配置这个类<?xml version="1.0"encoding="UTF-8"?><beans default-lazy-init="true"><context:component-scan base-package="axis"/><tx:annotation-driven/><context:annotation-config/><bean id="HelloWs"class="axis.HelloWsImpl"></bean></beans>4、在WEB-INF下创建conf lib services文件夹,目录结构如下其中axis2.xml是axis的主配置文件,services.xml是webservice HelloWs的webservice配置文件。
内容如下:<!—service名称--><service name="HelloWs"scope="application"><description>Simplest Web Service!</description><!—消息接受类两种方式:无返回值/有返回值--><messageReceivers><messageReceiver mep="/2004/08/wsdl/in-only"class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/> <messageReceiver mep="/2004/08/wsdl/in-out"class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/></messageReceivers><schema/><!--service class非集成配置<parameter name="ServiceClass">axis.HelloWs</parameter>--><!--service class集成配置--><!—接口或类--><parameter name="SpringBeanName">HelloWs</parameter><!—方法--><operation name="sayHello"><messageReceiverclass="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/></operation><parametername="ServiceObjectSupplier">org.apache.axis2.extensions.spring.receivers.Sprin gServletContextObjectSupplier</parameter><!--service class集成配置--></service>5、在web.xml中配置Axis,内容如下:<!--web service--><servlet><servlet-name>AxisServlet</servlet-name><servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class> <!--<init-param>--><!--<param-name>axis2.xml.path</param-name>--><!--<param-value>/WEB-INF/conf/axis2.xml</param-value>--><!--<param-name>axis2.xml.url</param-name>--><!--<param-value>http://localhost/myrepo/axis2.xml</param-value>--><!--<param-name>axis2.repository.path</param-name>--><!--<param-value>/WEB-INF</param-value>--><!--<param-name>axis2.repository.url</param-name>--><!--<param-value>http://localhost/myrepo</param-value>--><!--</init-param>--><load-on-startup>1</load-on-startup></servlet><servlet><servlet-name>AxisAdminServlet</servlet-name><servlet-class>org.apache.axis2.webapp.AxisAdminServlet</servlet-class> </servlet><!--servlet><servlet-name>SOAPMonitorService</servlet-name><display-name>SOAPMonitorService</display-name><servlet-class>org.apache.axis2.soapmonitor.servlet.SOAPMonitorService</servlet -class><init-param><param-name>SOAPMonitorPort</param-name><param-value>5001</param-value></init-param><init-param><param-name>SOAPMonitorHostName</param-name><param-value>localhost</param-value></init-param><load-on-startup>1</load-on-startup></servlet--><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>/servlet/AxisServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>*.jws</url-pattern></servlet-mapping><!--配置axis servlet目录--><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>/services/*</url-pattern></servlet-mapping><!--配置axis admin servlet目录非必要--><servlet-mapping><servlet-name>AxisAdminServlet</servlet-name><url-pattern>/axis2-admin/*</url-pattern></servlet-mapping><!--servlet-mapping><servlet-name>SOAPMonitorService</servlet-name><url-pattern>/SOAPMonitor</url-pattern></servlet-mapping--><mime-mapping><extension>inc</extension><mime-type>text/plain</mime-type></mime-mapping><error-page><error-code>404</error-code><location>/axis2-web/Error/error404.jsp</location></error-page><error-page><error-code>500</error-code><location>/axis2-web/Error/error500.jsp</location> </error-page>**如果有集成struts的,要配置下filter的url-pattern使Axis的路径不被过滤6、测试查看所有服务:http://localhost:8080/myaxis/services/listServices访问这个服务的接口文档:http://localhost:8080/myaxis/services/HelloWs?wsdl7、客户端调用***参见这位仁兄的帖子:/blog/797827WebserviceClient.java代码如下:package client;import space.QName;import org.apache.axis2.AxisFault;import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options;import org.apache.axis2.context.MessageContext; import org.apache.axis2.rpc.client.RPCServiceClient; public class WebserviceClient{protected String wsURL;protected String namespaceURI;protected long timeOut;//--超时时间,默认为30秒protected Object invokeWs(String method,Object[]parm,Class[]returnTypes) throws AxisFault{RPCServiceClient serviceClient;serviceClient=new RPCServiceClient();//这三行代码一般不加也没问题。