[zt]Eclipse Apache Axis2集成
[align=center][font=黑体][size=5][b]Eclipse Apache Axis2集成 [/b][/size][/font][/align]一. 安装Eclipse 详细见《Web Service Eclipse安装》文档,将在近期更新二. 安装Apache Axis2详细见《Apache Axis2安装》 [url=http://bldmickey.blog.sohu.com/56486087.html][size=2][color=#000000]http://bldmickey.blog.sohu.com/56486087.html[/color][/size][/url]
[size=2][color=#000000][/color][/size]
三. 开发环境描述[align=left][table][tr][td][align=center]软件[/align][/td][td][align=center]版本[/align][/td][/tr][tr][td][align=left]Eclipse SDK Version[/align][/td][td][align=left]3.3.0[/align][/td][/tr][tr][td][align=left]STP(SOA Tools Platform)[/align][/td][td][align=left]0.6.0[/align][/td][/tr][tr][td][align=left]WST(Web Standard Tools) [/align][/td][td][align=left]2.0.0[/align][/td][/tr][tr][td][align=left]DTP(Data Tools Platform)[/align][/td][td][align=left]1.5.0[/align][/td][/tr][tr][td][align=left]JST(J2EE Standard Tools)[/align][/td][td][align=left]2.0.0[/align][/td][/tr][tr][td][align=left]Apache Axis2[/align][/td][td][align=left]1.3[/align][/td][/tr][tr][td]Apache Tomcat
[/td][td]5.5.20
[/td][/tr][/table][/align]
四. 下载Apache Axis2 Tools[list][*] Code Generator Wizard - Eclipse Plug-in 版本1.3[/list]包括Java2WSDL和WSDL2Java。其中Java2WSDL从java class开始创建WSDL文件;WSDL2Java从WSDL文件开始创建java class。下载地址:
[url=http://apache.mirror.phpchina.com/ws/axis2/tools/1_3/axis2-eclipse-codegen-wizard.zip][size=2][color=#000000]http://apache.mirror.phpchina.com/ws/axis2/tools/1_3/axis2-eclipse-codegen-wizard.zip[/color][/size][/url]
[list][*] Service Archive Wizard - Eclipse Plug-in版本1.3[/list] 用来创建web服务的软件包(aar文件或者jar文件)。下载地址:
[url=http://apache.mirror.phpchina.com/ws/axis2/tools/1_3/axis2-eclipse-service-archiver-wizard.zip][size=2][color=#000000]http://apache.mirror.phpchina.com/ws/axis2/tools/1_3/axis2-eclipse-service-archiver-wizard.zip[/color][/size][/url]
[size=2][color=#000000][/color][/size]
五. Apache Axis2 Tools的安装[list][*] 解压下载的文件[*] 拷贝解压的内容到eclipse安装目录下的plugins目录下[/list]
六. Eclipse+Axis2集成例子6.1 Eclipse Axis2参数设置[list][*] 菜单选择:Window->Preference…->Web Service->Axis2 Preferences[*] 设置Axis Runtime Location,也就是Axis2 Runtime安装的位置,例如:C:\Program Files\axis2[/list][img=632,421]http://115.img.pp.sohu.com/images/blog/2007/8/15/22/3/11503b6760f.jpg[/img]
[list][*] 设置Axis2 Preferences[/list][img=626,476]http://117.photo.pp.sohu.com/images/blog/2007/8/15/22/1/11503bdf120.jpg[/img]
6.2 创建Web Project[list][*] 菜单选择:File->New Project…->Web(Dynamic Web Project)选择Next, 在项目名称中输入SayHi[/list][img=623,442]http://118.img.pp.sohu.com/images/blog/2007/8/15/22/1/11503bd9f88.jpg[/img]
[list][*] 选择“Finish”完成[/list]6.3 添加Axis2 Library[align=left]在项目属性中->Java Build Path->Library中添加一个自定义的Axis2_Library的库,将axis2 web应用WEB-INF/lib目录中所有jar添加到新定义的库中。添加后项目的情况:[/align][align=left][img=628,466]http://116.img.pp.sohu.com/images/blog/2007/8/15/22/6/11503bd8df0.jpg[/img][/align] 6.4 创建WSDL文件[list][*] 菜单选择:File->New Other…->Web Service WSDL->next[*] 选中指定路径SayHi/src,指定WSDL的文件名:SayHi.wsdl,选择Next[*] Target namespace:修改成[url=http://www.wsexample.org/SayHi][size=2][color=#000000]http://www.wsexample.org/SayHi[/color][/size][/url],选择Finish[/list][img=632,454]http://117.photo.pp.sohu.com/images/blog/2007/8/15/22/4/11503c0e25c.jpg[/img]
[list][*] 在WSDL design的tab中修改WSDL的设计。例如修改:Operation的名称为:SayHiOper,具体有关WSDL的信息请查看《Web Service WSDL.doc》和《Web Service XML.doc》[/list][img=626,434]http://118.img.pp.sohu.com/images/blog/2007/8/15/22/4/11503c08c95.jpg[/img]
[list][*] 例如:本例中采用的types定义如下:[/list][table][tr][td][align=left]<wsdl:types>[/align][align=left] <xsd:schema targetNamespace="http://www.example.org/SayHi/">[/align][align=left] <xsd:element name="SayHiOper">[/align][align=left] <xsd:complexType>[/align][align=left] <xsd:sequence>[/align][align=left] <xsd:element name="in" type="xsd:string"/>[/align][align=left] </xsd:sequence>[/align][align=left] </xsd:complexType>[/align][align=left] </xsd:element>[/align][align=left] <xsd:element name="SayHiOperResponse">[/align][align=left] <xsd:complexType>[/align][align=left] <xsd:sequence>[/align][align=left] <xsd:element name="out" type="xsd:string"/>[/align][align=left] </xsd:sequence>[/align][align=left] </xsd:complexType>[/align][align=left] </xsd:element>[/align][align=left] </xsd:schema>[/align] </wsdl:types>
[/td][/tr][/table]
6.5从WSDL文件生成Java Server代码[list][*] 选择File->New->Other,从对话框中选取Axis2 Wizards->Axis2 Code Generator,选择Next[/list][img=616,448]http://116.img.pp.sohu.com/images/blog/2007/8/15/22/9/11503c017c0.jpg[/img]
[list][*] 选择“Generate java source code from WSDL file”,点击“Next”进入下一步[*] 选择WSDL文件所在的路径:选中SayHi.wsdl文件[*] Axis2 Codegen Wizard对话框中选择:(完成后选择Next继续)[*] Codegen Option为custom[*] Databinding Name为缺省的ADB(还有xmlbeans、jibx)[*] 先创建服务器端代码[/list][img=627,436]http://116.img.pp.sohu.com/images/blog/2007/8/15/22/11/11503c18077.jpg[/img]
[list][*] 确定java服务器端程序的输出位置,例如:SayHi\(不包括src目录)。生成的代码输出的位置。注意:在程序的目录中,不需要指定到src目录下。[*] 项目程序结果:[/list][img]http://116.img.pp.sohu.com/images/blog/2007/8/15/22/12/11503c27825.jpg[/img]
6.6 修改Service代码在SayHiSkeleton.java程序中添加处理代码(蓝色部分),实现了SayHiOper函数接口,获取web请求“sayHiOper.getIn() ”,然后添加相关问候信息“"Hi," request ".How are you? ”
[table][tr][td][align=left][b]package[/b] org.example.www.sayhi;[/align][align=left][b]public[/b] [b]class[/b] SayHiSkeleton{[/align][align=left] [b]public[/b] org.example.[url]www.sayhi.SayHiOperResponse[/url] SayHiOper[/align][align=left] ( org.example.[url]www.sayhi.SayHiOper[/url] sayHiOper )[/align][align=left] {[/align][align=left] [b]try[/b] {[/align][align=left] SayHiOperResponse response = [b]new[/b] SayHiOperResponse();[/align][align=left] response.setOut("Hi,"+sayHiOper.getIn()+". How are you?");[/align][align=left] [b]return[/b] response;[/align][align=left] }[/align][align=left][b]catch[/b](UnsupportedOperationException e)[/align][align=left] {[b]throw[/b] e;}[/align][align=left] //throw new java.lang.UnsupportedOperationException("Please implement " + this.getClass().getName() + "#SayHiOper");[/align][align=left] }[/align][align=left] }[/align][/td][/tr][/table]
6.7 创建发布Package[list][*] 菜单选择:File->New->Other…->Axis2 Wizards中选择Axis2 Service Archive,选择Next[/list][img=633,457]http://116.img.pp.sohu.com/images/blog/2007/8/15/22/12/11503c32e1e.jpg[/img]
[list][*] 选择classes的路径,例如:SayHi\build\classes,选择Next[*] 选择WSDL文件,选择Next,在选择Next[*] 设置Service XML文件,例如:SayHi\resources\services.xml[*] 设置输出的文件和目录,例如tomcat下的部署目录:webapps\axis2\WEB-INF\services,输出文件名:SayHi.aar,直接可以输出到tomcat对应的axis2 services的目录中。[/list]6.8 浏览器测试[list][*] 启动tomcat[*] 浏览器器中输入service的WSDL,链接地址:[url=http://localhost:8081/axis2/services/SayHi?wsdl][size=2][color=#000000]http://localhost:8081/axis2/services/SayHi?wsdl[/color][/size][/url],输出结果如下:[/list][img=619,456]http://117.photo.pp.sohu.com/images/blog/2007/8/15/22/13/11503c8f977.jpg[/img]
[list][*] 测试Web Service,在浏览器中输入:[url=http://localhost:8081/axis2/services/SayHi/SayHiOper?in=bldmickey][size=2][color=#000000]http://localhost:8081/axis2/services/SayHi/SayHiOper?in=bldmickey[/color][/size][/url],输出结果如下:[/list][table][tr][td][align=left]<ns1:SayHiOperResponse xmlns:ns1=”[b]http://www.example.org/SayHi/[/b]">[/align][align=left] <out>[b]Hi,bldmickey. How are you?[/b]</out> [/align][align=left]</ns1:SayHiOperResponse>[/align][/td][/tr][/table] 其中SayHiOper是对应的Web Service的Operation,in对应的是函数对应的输入值。详细对应在wsdl文件中。输入参数的值是:bldmickey,输出的结果是:[b]Hi,bldmickey. How are you?[/b]
6.9 从WSDL生成Java Client代码[list][*] 选择File->New->Other,从对话框中选取Axis2 Wizards->Axis2 Code Generator,选择Next[*] 具体的操作和6.5中创建Server端代码类似,只是选择输出客户端代码,具体见下图:[/list][img=623,466]http://117.photo.pp.sohu.com/images/blog/2007/8/15/22/14/11503c9b5a1.jpg[/img]
[list][*] 确定java客户端程序的输出位置,例如:SayHi[*] 增加JUNIT库(测试代码需要JUNIT库)[*] 项目属性->Java Build Path->Libraries中Add Library…->选择JUnit, Next继续,缺省选择JUnit3完成[*] 创建的文件包括:SayHi\src\org\example\www\sayhi\SayHiStub.java(Stub程序)和SayHi\test\org\example\www\sayhi\SayHiTest.java(测试程序)[/list]6.10 修改客户端代码和测试[list][*] 修改test代码的路径问题,将SayHiTest.java从test\org\example\www\sayhi目录移动到src\org\example\www\sayhi\目录[*] 修改代码[/list][table][tr][td]package org.example.www.sayhi;
public class SayHiTest extends junit.framework.TestCase{
public void testSayHiOper() throws java.lang.Exception{
[b]String url="http://localhost:8081/axis2/services/SayHi";[/b]
[b]org.example.[url]www.sayhi.SayHiStub[/url] stub =[/b]
[b]new org.example.[url]www.sayhi.SayHiStub[/url](url);[/b]
[b]//org.example.[url]www.sayhi.SayHiStub[/url] stub =[/b]
[b] // new org.example.[url]www.sayhi.SayHiStub[/url]();[/b]
[b] org.example.[url]www.sayhi.SayHiStub.SayHiOper[/url] sayHiOper2=[/b]
[b] (org.example.[url]www.sayhi.SayHiStub.SayHiOper[/url])getTestObject(org.example.[url]www.sayhi.SayHiStub.SayHiOper.class[/url]);[/b]
[b] sayHiOper2.setIn("Client bldmickey");[/b]
[b] System.out.println(stub.SayHiOper(sayHiOper2).getOut());[/b]
[b] assertNotNull(stub.SayHiOper(sayHiOper2));[/b]
[b] // assertNotNull(stub.SayHiOper(sayHiOper2));[/b]
}
//Create an ADBBean and provide it as the test object
public org.apache.axis2.databinding.ADBBean getTestObject(java.lang.Class type) throws Exception{
return (org.apache.axis2.databinding.ADBBean) type.newInstance();
}
}
}
[/td][/tr][/table][list][*] 执行Run As->JUnit Test[/list][img=625,440]http://116.img.pp.sohu.com/images/blog/2007/8/15/22/18/11503c88ab5.jpg[/img]
[list][*]Console中输出:[b]Hi,Client bldmickey. How are you?[/b][/list][b]
[/b]
6.11 TCP Monitor监控Web Service运行tcpmon.bat
添加监听8888端口,定向到127.0.0.1端口8081
浏览器中访问[url=http://localhost:8888/axis2/services/SayHi/SayHiOper?in=bldmickey][size=2][color=#000000]http://localhost:8888/axis2/services/SayHi/SayHiOper?in=bldmickey[/color][/size][/url]
[table][tr][td]输入:
[b]GET /axis2/services/SayHi/SayHiOper?in=bldmickey HTTP/1.1[/b]
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: en-us
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.1; .NET CLR 2.0.50727)
Host: 127.0.0.1:8888
Connection: Keep-Alive
[/td][/tr][tr][td]输出
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: application/xml;charset=UTF-8
Transfer-Encoding: chunked
Date: Wed, 15 Aug 2007 06:03:12 GMT
7e
[b]<ns1:SayHiOperResponse xmlns:ns1="http://www.example.org/SayHi/"><out>Hi,bldmickey. How are you?</out></ns1:SayHiOperResponse>[/b]
0
[/td][/tr][/table]
6.12 代码分析Axis2的新架构,写一个服务,会有很多种不同的方法,可以用pojo结合rpc模式来写,也可以用Axis2自己的Axiom API从底层写,也可以从WSDL生成相应框架,然后填写相应逻辑。
对于WSDL生成框架代码这种形式,又有不同的数据绑定可以使用。Axis2.1.1 可以使用adb(axis2自己的data binding)、xmlbeans、jibx、jaxme、jaxbri。其中常用的还是前两种,axis2官方是极力推荐自己的data binding的,因为速度快,架构相对简单,而且有一些独有的特性。xmlbeans,是对模式支持最好的data binding,一些特别复杂的模式只能在xmlbeans下才能正确生成框架代码。其他几种代码wsdl2java目前都不是支持得很好,都还在实验改进阶段。
面对这么多数据绑定模式,很多人都无从选择。官方maillist上也有好多人问该用哪个。查了一些资料,据说,adb很好用,而且速度快,如果只是简单的模式,那么使用这种数据绑定就可以了。xmlbeans的强力模式支持,可以支持足够负责的模式,速度上也只是比adb低5%左右。而jibx很多人没用过,因为使用没有前两种方便,不过jibx支持unwrapping代码生成(普通代码生成的服务方法,一般只有一个参数,而unwrapping可以生成多个参数的方法,相当直观。)
页:
[1]