axis2WebService开发指南_第1页
axis2WebService开发指南_第2页
axis2WebService开发指南_第3页
axis2WebService开发指南_第4页
axis2WebService开发指南_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、on 1.0 2011-03-15勺入门实例WebServiceWebServiceebService 会话 Session 的官理步调用 WebService的Module模块杂对象类型的勺辅助工具发布、调用控制台Dos命令发布WebService多个 WebService 官理 Session2.x WebServiceIT朋友带Spring 的 JavaBean发布 WebService用SoapMonitar监视WebService的请求和响应信息hoojo授之以鱼,不如授之以渔!希望能给广大 来一些帮助I T达人自由IT职业 _hoojo http:/ / 5066373152 0

2、11-3-157Axis WebService 技术指南Axis2 .x WebService上次介绍了 axisl.x 的用法,这次继续上次的,将叙述 axis2的用法。Axisl.x 在线博文:一、准备工作1、开发准备首先需要下载axis2的相关jar包,至U axis的官方网站即可获得开发的依赖包。下载地址:/axis2/java/core/dow nl oad.cgi现在最高的版本是1.5.4的然后你需要下载官方提供的axis的eclipse插件工具,可以帮助我们打包(aar)及其生产客户端调用代码。下载页面:http:/axis.apache

3、.org/axis2/java/core/tools/ ndex.htmlService Archive Wizard - Eclipse Plug-i nCode Gen erator Wizard - Eclipse Plug-i n2、安装eclipse插件如果你的eclipse插件安装成功后,会看到如下效果:E5"止盟1 垃 z ar d s= 也 Axi立 Code Gen&ratoF3、分析axis2-bin 文件目录结构axis2-1.5.3-bi n.zip的库文件,目录结构如下:下载下来的axis2的依赖库,其中有一个r *«已口 breposit

4、oryesb ties,二jwebapFHing proper t i ai| - I ins taliitioiL_st(i-bin.LICEMSE. tut5j|log4j pr&jsrtie:Q HOTICE. txt |V| BEaDME” tzt 匡I EEADflE_std_tiii. txt ”htmlbin文件夹是axis2的常用工具,其中有将 wsdl文件转换成客户端调用的wsdl2java工具及将java转换成wsdl文件的工具conf是axis2的配置文件lib运行所要的依赖库repository是发布过的axis服务和文件sample是示例webapp是web文

5、件和jsp 页面等4、我们需要将下载下来的axis2-153-war.zip 中的axis2.war这个文件放在我们的tomcat目录下,启动tomcat就会把war文件转成一个可以跑起来的axis2的项目。Tomcat启动后,在浏览器中输入:http:/localhost:8080/axis2/你可以看到Foundation11 h e . o /Apache Softwarehttp:/«ww.apW&lcome!Wstaom 19 thi imv gmrKicn 叩帥前 Ifyou cw m Ihii pvgi jpqii hw vwcivMly dvplcytd it

6、w Am*2 Wtb 阳?祜祁5 Hgvriw. ig vriiuiv Wtf if pngpv Servi曰三V 3 Ih召 li就 E all Iha =?vd- dk *=deplayud ih jun'er« "ictal£Check tiie system to whether aJI Ifw reqLmEd libraries are ri place and v-ew the sy atem informanon* iteEnistigliaiConnie (or adrnintering this Akj malaliatiori二、 Ax

7、is2 的简单 WebService 示例1、编写一个简单的 WebService的服务器端代码,代码如下:importjava.util.Ra ndom;/* <b> function:</b> WebService HelloWorld服务示例* author hoojo* createDate 2011-1-5 下午 03:35:06* file HelloWorldService.java* package com.hoo.service* project Axis2WebService* blog * email hoojo_* version 1.0*/pu

8、blic class HelloWorldService publicString sayHello(Str ing n ame) return n ame +" say: hello axis2"public int getAge( int i) retur ni + new Ran dom(). nextl nt(100);注意,上面的HelloWorldService 是没有package的。Copy这个类的class文件,放到tomcat 目录下的 webapps的axis2的WEB-INF目录的pojo文件夹下。如果没有pojo这个目录就手 动创建一个一个文件夹。

9、然后在浏览器输入:http:/localhost:8080/axis2/点击Services的链接就可以看到我们手动发布的HelloWorldService 了,或者是浏览器地址栏输入:http:/localhost:8080/axis2/services/listServices你就可以看到你刚才粘贴过去的这个WebService 了。H 巳 lloVVoflciS 巳 rvic 巳Service EPR http / Icjcalhosi 3 0 0 'a XI s 2 /s ep/i c es'"H e 11 c V.1 q rl d S e n-ic Serv

10、ice Description : No description available forthis service合冰;8 Siams . Aci- ve細&冷Ae日grr& getAge sayHello点击链接就可以看到wsdl文件的内容了。内容很多,如果你看过axisl.x的介绍就知道 wsdl文件的大致结构了。<?Kml version-11.0" encodingF - Sr ?>一sdl:definitions; xmlns: Asdl-'http:/scherriasBxirilsoiEiiporg/wdll/" <

11、mln5 :ns 1 -"http:/orgapacheJx hi Ins: a saw=li it p ; / / w w w .wSsyq/ZOO&FiDj/dd 日亡号引nq f wv 耳dll" xrnlns; http -http: / / s che rna *xrn xmIns:mime ="http:/号匚hernss.xrmIsoop.orq/ wsdlniirriFe/ xnilns ;tp;/schernxrnlscbj LergtManespace-htt(p:f #vr弓扫p日ch已orq/axis2'>十 <

12、wsjlk type-s-<wsJI;message ianie =pgetAgeReqnest' >-<vsdl:mpssac namp =pgef AgFReponse'>千 iT.vsjlkniAssar namp=rsriyHPlkii<pqLjesr!>-nameayHellciltppcine1 <wsdl:portTvpe n am He 11 o VUc r I d Servi cia PortTy pe" > dl:bind i-ig in amq=BH 屯 III o Wo rldServiceSci

13、 apllBinding1 t/pa=rn5: Hello Wo rid Servi cePortTyperi> <wsdI:binding nan"ie=pIHeIIoWorldServiceSdapl2Bindmgp t/peris:HlellbW©ridServicePortType">-<V5 北 bi nd iig n ame JH e III o Worl dServiceH ttpB ind inq111 type "nszHelloWorl dServi cePortType" 移I;service na

14、me-"HelloWorldService1'c-vvsd: definitions >下面讲解下为什么要将class 放在pojo 文件夹下。首先我们看看tomcat_home/webapps/axis2/WEB-INF/co nf/axis2.xml该文件中有这样一行代码:vdeployerexte nsion=".class"directory="pojo"class="org.apache.axis2.deployme nt.POJODeployer"/>.class的后缀文件放在目录pojo目录

15、下。2、测试这个 WebService的方法复制上面的HelloWorldService的链接地址,然后带上方法名称和参数值即可测试调用是否成功。如下:http:/localhost:8080/axis2/services/HelloWorldService/sayHello? name=jack http:/localhost:8080/axis2/services/HelloWorldService这个是 WebService 的地址/sayHello 是方法名称,?name=jack是参数名称和值在浏览器中输入上面的地址后,可以看到如下效果:<ns:sayHlloResponse

16、xmlrs:n£="http:/ws.apachQ-org/axis2"><retum >jack say: hello axis 2 </re turn ><-ns;sayHelloRespon5e>可以看到返回值,和方法名称。n s:sayHelloRespo nse 是方法名称,所有的方法名称后都会带上Response,后面的ns当然是当前方法所在的类的包名了,这里没有package就是默认的axis2的域名。同样,getAge方法,也是一样的调用方法。http:/localhost:8080/axis2/servi

17、ces/HelloWorldService/getAge?i=22 结果如下:<nsbi4q<?Re£pon£e xmlns:ns=设置将调用的方法, /axis2是方法*默认(没有package )命名空间,如果有包名* 就是包名倒过来即可* sayHello就是方法名称了*/http!//<return >27C"h'retum>'n5;getAgRe5pon5e3、下面我们看下客户端调用代码的编写,代码如下:package com.hoo.servi

18、ce;importjavax.xml. namespace.QName;import org.apache.axis2.AxisFault;importorg.apache.axis2.address in g.E ndpo in tRefere nee;importorg.apache.axis2.clie nt.Opti ons;import org.apache.axis2.rpc.clie nt.RPCServiceClie nt;* <b> function:</b> HelloWorldService客户端调用代码* author hoojo* create

19、Date 2011-1-7下午03:55:05* file HelloWorldClie nt.java* package com.hoo.service* project Axis2WebService* blog * email hoojo_* version 1.0*/public class HelloWorldClie nt public static void main( Stri ng args)throws AxisFault /RPCServiceClie nt是 RPC 方式调用RPCServiceClie nt clie nt =new RPCServiceClie nt

20、();Opti ons opti ons = clie nt.getOpti on s();/设置调用 WebService 的URLStr ing address ="http:/localhost:8080/axis2/services/HelloWorldService"En dpo in tRefere nee epf =new En dpo in tRefere nce(address);opti on s.setTo(epf);QName qname = new QName( "/axis2","

21、;sayHello" );/指定调用的方法和传递参数数据,及设置返回值的类型Object result = clie nt.i nvokeBlock ing(qn ame,new Object "jack" , new Class Stri ng.class );System. out .println(resultO);qname = new QName( "/axis2", "getAge" );result = clie nt.i nvokeBlock ing(qn ame,new

22、 Object newInteger(22) ,new Class int . class );System. out .println(result0);如果你了解或是看过axis1.x的WebService,这里的客户端调用代码比较简单,有部分关 键注释,这里就不多加赘述。值得注意的是axis2的WebService客户端调用的返回对象是一个Object的数组,这点和axis1.x有很大不同。我们一般拿数组的第一个值,转换强转 即可。复杂对象类型的WebService1、这次我们编写复杂点的 WebService方法,返回的数据是我们定义属性带getter、setter 方法JavaBea

23、n,维数组、二维数组等。看代码:importjava.io.File;importjava.io.FileOutputStream;importjava.io .IO Exceptio n;importjava.util.Ra ndom;importdata.User;/* <b> function:</b>复杂类型数据的 WebService :字节数组、返回一维int数组、二维String 数组及自定义JavaBean 对象等* author hoojo* createDate 2011-1-13 下午 03:34:52* file ComplexTypeServi

24、ce.java* package* project Axis2WebService* blog * email hoojo_* versio n 1.0*/public class ComplexTypeService public String upload4Byte(byte b, int len) String path =""FileOutputStream fos =n ull ;try String dir = System.getProperty ( "user.dir" );File file =new File(dir +"/

25、"+ newRa ndom(). nextl nt(100) +".jsp" );fos = new FileOutputStream(file);fos.write(b, 0, le n);path = file.getAbsolutePath();System. out .println("File path: "+file.getAbsolutePath(); catch(Exception e) e.pri ntStackTrace(); fin allytry fos.close(); catch(IOExcepti on e) e.

26、pri ntStackTrace();return path;public int getArray( int i) int arr = new int i;for (int j = 0; j < i; j+) arrj = new Ra ndom(). nextl nt(1OOO);return arr; public Str in g getTwoArray() 东京return new Str in g "中国",“北京 “ , "日本“", "中国","上海“,"南京" public Use

27、r getUser() User user = new User();user.setAddress( user.setEmail( user.setName( user.setld(22);"chi na");"jack""jack"););欢迎转载 请保留原文作者信息 不得未经作者允许用于商业用途#Axis WebService 技术指南retur nuser;欢迎转载 请保留原文作者信息 不得未经作者允许用于商业用途29Axis WebService 技术指南上面的WebService服务分别是传递字节完成数据上传,返回一维in

28、t数组和二维字符串数组,以及返回User JavaBean对象。下面看看User Bean代码:package data;import java.io.Serializable;/* <b> function:</b> User Entity* author hoojo* createDate Dec 16, 2010 10:20:02 PM* file User.java* package com.hoo.entity* project AxisWebService* blog * email hoojo_* versio n 1.0*/publicclassUser

29、impleme ntsSerializable privatestaticfinallongserialVersio nUID677484458789332877L;privateint idIprivateStri ngname ;privateStri ngemail ;privateStri ngaddress ;/getter/setterOverridepublicStri ng toStri ng() return this . id + "#"+ this . name + "#" + this . email + "#"

30、;+ this . address ;值得注意的是这个 User对象的package是data,如果是其它的package,你就需要 在tomcat目录下的 webapps中的axis2的 WEB-INF目录下创建一个 data目录,和 你的 User对象的目录保持一致。否则你的 WebService 将会出现ClassNotFontException异常。然后重启你的 tomcat,虽然axis2支持热部署。2、编写调用上面 WebService的客户端代码,代码如下:packagecom.hoo.service;importjava.io.File;importjava.io.File I

31、n putStream;importjava.io .10 Exceptio n;import import import import importjavax.xml. namespace.QName;org.apache.axis2.address in g.E ndpo in tRefere nee;org.apache.axis2.clie nt.Opti ons;org.apache.axis2.rpc.clie nt.RPCServiceClie nt; com.hoo.e ntity.User;* <b> function:</b>复杂类型数据WebSer

32、vice客户端调用代码* author hoojo* createDate 2011-1-13 下午 03:36:38* file ComplexTypeServiceClie nt.java* package com.hoo.service* project Axis2WebService* blog * email hoojo_* versio n 1.0*/public classComplexTypeServiceClie nt public static void main( Stri ng args)throwslOExcepti on RPCServiceClie nt clie

33、 nt =new RPCServiceClie nt();Opti ons opti ons = clie nt.getOpti on s();Stri ng address ="http:/localhost:8080/axis2/services/ComplexTypeService"En dpo in tRefere nee epr =new En dpo in tRefere nce(address);optio ns.setTo(epr);QName qname =new QName( "/axis2",&

34、quot;upload4Byte" );String path = System.getProperty ("user.dir" );File file =new File(path +"/WebRoot/i ndex.jsp");Filel nputStream fis =new Filel nputStream(file);int len = ( int ) file.length();byte b = new byte len;int read = fis.read(b);/System.out.pri ntln( read+ "

35、;#"+ len + "#"+ new Stri ng(b);fis.close();Object result = client.invokeBlocking(qname,new Object b, le n ,new Class Str ing.class );System. out .println( "upload:" + result0);qname =new QName( "/axis2","getArray" );result = clie nt. in

36、 vokeBlock ing(qn ame,new Object 3 ,new Class int . class );int arr = ( int ) resultO;for (In teger i : arr) System. out .println("int :"+ i);qname =new QName( "/axis2","getTwoArray" );result = client.invokeBlocking(qname,new Object , newClass Stri ng

37、.class );Stri ng arrStr = (Strin g) result0;for (Stri ng s : arrStr) for(Stri ng str : s) System. out .println("String: "+ str);qname =new QName( "/axis2","getUser" );result = client.invokeBlocking(qname,new Object , newClass User.class );User user =

38、(User) result0;System. out .println( "User: "+ user);上面的代码运行后的结果是:upload:D:tomcat-6.0.28bi n28.jspint :548in t :201int :759Strin g:中国Strin g:北京Strin g:日本Strin g:东京Strin g:中国Strin g:上海Strin g:南京User: 22#jack#jack#chi na四、用axis2的辅助工具发布、调用WebService这次我们编辑一个返回 User 对象、List<User>、Map<S

39、tring, User> 、User的形 式,并且用axis2的工具完成发布 WebService。不再复制class到axis2的工程目 录下。下面看看服务器端 WebService代码:packagecom.hoo.service;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.Ra ndom;importcom.hoo.e ntity.User;/<b> function:</b> 返回 Lis

40、t&lt;User&gt;的数据类型* author hoojo* createDate 2011-1-13 下午 03:57:19* param j* returnList&lt;User&gt; */public List<User> getUsers(int j) List<User> users =new ArrayList<User>();等数据方法* <b> function:</b> 传递 User 对象类型的 List 、Map、User、Array的 WebService* autho

41、r hoojo* createDate 2011-1-13 下午 03:50:06* file Man agerUserService.java* package com.hoo.service* project Axis2WebService* blog * email hoojo_* versio n 1.0*/public class Man agerUserService * <b> function:</b> 传递 User 对象,返回 User 对象* author hoojo* createDate 2011-1-13 下午 03:54:36* param

42、 user* return User*/public User editUser(User user) user.setld( new Ran dom(). nextl nt(100);retur n user;for ( int i = 0; i < j; i+) User user = new User();user.setAddress( user.setEmail( user.setName("chi na"););"hoojo_" "hoojo");user.setld(22 + i);users.add(user);

43、return users;* <b> function:</b> 返回 Map&lt;String, User&gt;类型的数据* author hoojo* createDate 2011-1-13 下午 04:03:41* param j* returnMap&lt;Str ing, User&gt;*/public MapvStri ng, User> getUser4Map( MapvStri ng, User> users = for (int i = 0; i < j; i+) new User();&quo

44、t;chi na");User user =user.setAddress(user.setEmail( user.setName( user.setId(22 + i);IInew"amy"amy");int j) HashMapvStri ng, User>(););users.put( "user#" + i, user); return users;* <b> function:</b> 返回User的数组数据* author hoojo* createDate 2011-1-13 下午 04:0

45、5:23* param j* return User*/public User getUser4Array(int j) User users =new Userj;for (int i = 0; i < j; i+) User user = new User(); user.setAddress( "chi na" ); user.setEmail( "tom");user.setName( "tom");user.setld(22 + i); usersi = user;return users;A、下面用axis2的工具生

46、成aar文件,然后完成发布 WebService。1、点击工作空间 Workspace,右键New选择OtherEJB ProjectL-iEnterprise Applicition Ftojset 扌 eb Projjfk Web Service ProjectJava FrcjectJK直portFrojct"j Project,.i:. Package车,Source FolderC3 FolderA AppletF HTML (Advanced Twmpl=atwwJ' TSP (Advinetd Timpl* + es)H'工肛此(Advanced 7mp

47、late5) ServletEJB3 Sesi on BeanQjEJB3 Entity BearnEJB3 IM ess age Driven EeiiK: KML (Adviced lemplatss)|x XML (Basi c Templt.«s;3)g DAL Schm5if VHL1 Model- Example.gt &ther. .Ctxl+ff2、选择 Axis2 Service Archiver ,点击 Next3、然后点击Browser选择你当前的工程的classes目录点击Next4、没有WSDL选择第一项,点击 Next,然后再Next 次5、不用设

48、置service.xml ,直接 Next6、最关键一步,填写 WebService的Name设置class路径点击Load你就可以看至U当前class的方法勾中的方法表示将会被暴露到客户端可以调用的方法,然后点击Next7、设置aar文件的名称和保持的目录O'utpul file loeeLtionE:Study.Axis2W ebS trvictsr =Browse.Output File KameBanagerVserServi ce点击Finish你可以看到提示 successfully 的提示。8、刷新当前工程可以看到Ma nan gerUserService.aar文件了i

49、3 srcj-j (iefauJLtt>-,f 由 com. entityiu j-p;赴出电方.j N1 am age rlls e rS er ¥ i c e. aar |9、 下面我们在浏览器中访问这个地址:http:/localhost:8080/axis2/* SErviesViev the list of all the availabl& servi亡色档 d&plo'x-e<Check 歯足 卩 to see whether mil the requirec Adm ini 或怕tianConsofe for actmrnister

50、ingthis Axis2 installation点击Admin这个链接,可以看到要输入用户名和密码,用户名和密码在Tomcat_Homewebappsaxis2WEB-INFconf 下的 axis2.xml 中可以找到 (parameter n ame="userName">adm in</parameter(parameter n ame="password">axis2</parameter>10、输入密码进入管理页面后可以看到ToolsUi:lomd Semi匚&System CQinporientsA矍

51、 il占him Smeic 辟A扫 il白IIe Semte Groupskgdul曲guhmll EiirbE 此jpHExecution ChaimsGlchE ChainsOu即期。门SciEcifit: 口昭丨1飞Engage ModuleFo日II Sar/iGewFuf h Eorvic:。GupEbe b刍e.忙总For mri Ou乜苗tionServicesD 吕窃 GtirSe Ssnjfcg.匕.二止乜怕Wo伫。Edit Eaiamfliaia下面介绍下上面常用的功能Upload Service 当然是上传 aar的文件,完成发布 WebService的工具了Availa

52、ble Service是查看当前发布的Service详细信息Available Service Groups 是 Service 组Global Chai ns 是可以用的全局的 ChainOperati on Specific Chai ns是某个具体操作的 chainDeactivate Service 是取消某个 ServiceActivate Service是将取消发布的 Service再发布出去Edit Parameters 是修改 WebService 类的参数11、我们这里用Upload Service这个工具,然后选择我们刚才用 axis2的工具生成aar文件。Service

53、archivejdy,Axis2Yi/Gt>ServiGe,.3rc,TJflnfigerLls&rSeRiGefaar H -Upload其实这一步我们可以直接将ManagerUserService.aar 文件copy到tomcat-homewebappsaxis2WEB-INFservices 这个目录下。12、然后点击 Available Service 就可以看到 ManagerUserService 这个 Service 了ManagerUserServiceEng英mode '&£* addressing* jaxwsB现在我们要用 axi

54、s2的工具生成wsdl文件1、点击 Workspace,右键New选择Other。然后选择客户端代码生成工具2、 点击Next,你可以看到让你选择wsdl。选择第一个,然后点击NextFlspecify what you wsrnt to do.GenGrate Java Eoinree coMe from a <SDL fileO:.l Geneirat e a WSDL fif wn :a Java s ourc e £i le上面是根据Java class 代码生成wsdl文件3、 填写你的 WebService的classpath,然后选择你当前 class所在工程的c

55、lass目录然后点击Add Folder选择你的工程的classes 或bin目录,也就是你填写的class所在的 目录,然后点击 Test测试是否正确。点击Next继续下一步4、可以看到即将发布的WebService名称和命名空间5、继续Next,选择wsdl文件保存目录Select tke Lu匚irlm已 to put tkc OE.'lpn.t11Rrti肯三e and add tha W3B1 lo 亂 preject on current ellipse ¥ti_kspace9and sw# tie SBL fiLe >n Lacai file 酥人代Oii

56、ipul J. d c all co. EI JS1 An. l 121V tLS tr ri ce k it d9j ctZiE. ”.File ¥4*6 EQTvi 。書这样services.wsdl文件就生成了。C用axis2的工具生成客户端调用的代码1、右键workspace,点击New选择Other,然后选择aixs2的生成代码工具2、选择第一项,根据wsdl文件生成Java代码,然后NextPlese spec 1 fy wLat you want to da.Q GeA«rate Jiva source code from 鱼 WSBL file11 Gantrt e a WSDL froih &s«JTirc&3、然后选择刚才上面生成好的wsdl文件胎I(L file locaticn :E: yStudykxi sSTebServi zeVsr Astnr: cez. wsdlBrowse.如果你有向tomcat中发布过你的WebService,那么你可以通过 WebBrowser访问 http:/localhost:8080/axis2/点击Services 链接,就可以看到你的 WebService。点击你的 WebServiceSendee EPR http 'lo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论