struts2整合xfire.docx_第1页
struts2整合xfire.docx_第2页
struts2整合xfire.docx_第3页
struts2整合xfire.docx_第4页
全文预览已结束

下载本文档

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

文档简介

整合xfire与struts2项目的需要,要把xfire整合到struts2中。sturts2怎么建立相信大家都知道,就节省时间直接从xifre谈起一如何发布xfire Service,整合到struts2 的web项目中1从cvs上面取得JMAM32(原有的struts2项目 )。2把Xfire 的jar包,全部拷贝到WebRoot/WEB-INF/lib 下面,我用的是xfire-distribution-1.2.6.zip。3新建接口,名称为IJMAMCatalogMgrService,指定包名称为com.jetsen.jmam32.services4在同一个包下面:新建类,名称为JMAMCatalogMgrService,让它实现接口IJMAMCatalogMgrService 。5.WebRoot/META-INF下,新建文件夹xfire ,xfire下面新建xml文件 services.xml,内容如下:?xml version=1.0 encoding=UTF-8?003EJMAMCatalogMgrServicecom.jetsen.jmam32.services.JMAMCatalogMgrServicecom.jetsen.jmam32.services.IJMAMCatalogMgrService6.WebRoot/WEB-INF/web.xml 中根节点下增加如下代码:XFireServletorg.codehaus.xfire.transport.http.XFireConfigurableServlet0XFireServlet/services/*7.修改路径,把整个META-INF文件夹拖动到WEB-INF下。可以发布到tomcat,发布之后,浏览器上查看wsdl ,看是否成功http:/localhost:8080/JMAM32/services/MAMCatalogMgrService?wsdl二关于xfire service 支持自定义对象的串行化:如果你用jdk1.5以上版本和xfire1.2以上版本,不需要这一步,因为它会自动序列化。但是如果你的程序是在jdk1.4的基础上运行的,就需要手工搞定了,解决这个问题的核心是一个名称为*.aegis.xml的映射文件。例如:Xfire webService 返回一个自定义的wsResult对象。1.WsResult类定义如下:package com.jetsen.jmam32.services;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;public class wsResult private int errorCode;private String errorString;private String resultVal;public wsResult()this.errorCode = 0;this.errorString = ;this.resultVal = ; public int getErrorCode() return errorCode;public void setErrorCode(int errorCode) this.errorCode = errorCode;public String getErrorString() return errorString;public void setErrorString(String errorString) this.errorString = errorString;public String getResultVal() return resultVal;public void setResultVal(String resultVal) this.resultVal = resultVal;注意:这个自定义类必须与service类和接口在同一个包下(稍后会解释原因),本例中,必须放到包com.jetsen.jmam32.services下;其次,该类成员必须是严格的类属性,使用getter,setter的语法读取或设置。(起初我想懒省事,直接把三个属性设成了public成员,结果不能串行化.)。为了实现返回类型是wsResult,service的接口IJMAMCatalogMgrService代码如下:package com.jetsen.jmam32.services;publicinterface IJMAMCatalogMgrService public wsResult sayHello(String name);Service实现类JMAMCatalogMgrService代码如下:package com.jetsen.jmam32.services;publicclass JMAMCatalogMgrService implements IJMAMCatalogMgrService public wsResult sayHello(String name) wsResult ws = new wsResult(); String retStr = Hello + name; ws.setResultVal(retStr); return ws; 2.在包com.jetsen.jmam32.services下新建映射文件:IJMAMCatalogMgrService.aegis.xml,注意名称一定要是接口的名字(IJMAMCatalogMgrService)+ aegis.xml该文件代码如下: 注意method名称(sayHello)和返回类型的名称(com.jetsen.jmam32.services.wsResult)。3.重启tomcat,然后打开http:/localhost:8080/JMAM32/services/MAMCatalogMgrService?wsdl你可以看到wsdl文件了,可以看到wsdl文件中的wsResult被串行化了: 这里就要解释一下前面为什么要把wsResult类放在com.jetsen.jmam32.services包中了。如果不放在一个包中,wsResult串行化内容会被放在另一个名称空间(namespace)中,而不会同方法名放在一起。当然这是没问题的,问题出在IE 7上,IE 7的xmlhttprequest对象将会不识别返回的responseXml,直接报错! Firefox没有问题。我甚至试过IE 6的XMLHTTP 的activex控件也有这个问题。大功告成!这样客户端就不会不认识web service返回的对象类型了。不过顺便说一句,这方面还是.net比较方便,会自动串行化你自定义的对象。三. 关于使用xfire 客户端调用其他service 我用的Myclipse 6.0,集成了方便生成xfire client的功能,方便地生成代理类:具体为:new othersWeb Services 下面的Web Service Client。然后按提示一步一步生成即可。然后就是调用代理类的代码:MAMCatalogServiceClient service = new MAMCatalogServiceClient();MAMCatalogServiceSoap goIpclinet = service.g

温馨提示

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

最新文档

评论

0/150

提交评论