锁定老帖子 主题:XFire令WebService如此简单
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-02-06
运行环境:JBOXX 4.04 、 Tomcat <st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">5.3.9</st1:chsdate> 开发工具:Eclipse3.1 + MyEclipse 4.0
1. 利用xFire发布WebService<o:p></o:p>对于一般的接口方法,即方法的返回类型或参数不是List或Map中存放对象的方法,则只需要两步简单的配置即可。 一、配置web.xml 添加一个servlet xml 代码
一、建立services.xml 在源代码包src(也可能是其它的名称)下建立META-INF/xfire文件夹,并在下面建立services.xml文件。 xml 代码
一 name 元素:表示该webService的名称<o:p></o:p> 二 namespace 元素:表示该webService的命名空间<o:p></o:p> 三 serviceClass 元素:表示该webService的接口<o:p></o:p> 四 implementationClass 元素:表示该webService的实现类<o:p></o:p> <o:p></o:p> 对!就是这么简单,就可以啦。
<o:p></o:p> 如果返回类型是List或Map,并且里面存放的是自定义类的话,则需要增加一个对于服务接口的配置文件。该文件的命名规则是 接口文件名.aegis.xml。例如接口是HelloWorld.java的话,则此配置文件命名为HelloWorld.aegis.xml。<o:p></o:p> xml 代码
getUsers方法返回类型是List,里面装的User对象。对于这种类型的方法,在配置文件中描述了它的返回值类型。<o:p></o:p> 如果返回的类型是Map的话,做法和List一样。但定义的类型,是Map中的Value部分,并且这样的话,Map中Value所存放的对象就必须全部是同一种类啦。<o:p></o:p>
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-02-06
tomcat5.0.28可以吗?
|
|
返回顶楼 | |
发表时间:2007-02-07
试一下吧,我是用的5.5.9,JBOSS4.0也可以。
但websphere application server 和weblogic不行 |
|
返回顶楼 | |
发表时间:2007-02-07
XFire用过一段时间,感觉还是不错的,相对axis来说,部署相当简单,基本上写完Java类就搞定了。相对于axis2来说,它使用的性的特性,如采用Rest的传输协议,采用Stax的XML处理模型,还有许多新的特性和标准,感觉XFire在WS方面会大有作为,关注ing,有要学习的可以交流一下啦
|
|
返回顶楼 | |
发表时间:2007-03-06
一直报org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: Couldn't instantiate class. cn.lsdf.ebs.webservice.remote.OrderForm
org.codehaus.xfire.fault.XFireFault: Couldn't instantiate class. cn.lsdf.ebs.webservice.remote.OrderForm异常,怎么回事。 <?xml version="1.0" encoding="UTF-8"?> <mappings> <mapping > <method name="getOrderForms"> <return-type componentType="cn.lsdf.ebs.webservice.remote.OrderForm"/> </method> <method name="getOrderForm"> <return-type componentType="cn.lsdf.ebs.webservice.remote.OrderForm"/> </method> </mapping> </mappings> |
|
返回顶楼 | |
发表时间:2007-03-06
找到问题了。If you have constructors defined in your Java beans, make sure a default constructor (i.e. no arguments) is also declared. (Aegis needs a no-argument contstructor to instantiate client Java classes.)
需要一个无参的构造器。 |
|
返回顶楼 | |
发表时间:2007-04-27
大家都用过,我想请教一个问题,怎么使用xfire客户端来调用远程的xfire WebService啊,最好有个例子
|
|
返回顶楼 | |
发表时间:2007-05-11
wangwenpinghello 写道 大家都用过,我想请教一个问题,怎么使用xfire客户端来调用远程的xfire WebService啊,最好有个例子
/** * 版权信息: * 文件编号:TestCallWebService.java * 文件名称: * 系统编号: * 系统名称: * 设计作者: * 完成日期:2006-11-3 * 设计文档: * 内容摘要: * * 修改记录1: * 修改日期: * 修 改 人: * 修改内容: * 包括Bug/变更:<bug/变更 ID> 活动标题 > * */ package com.zte.ihs.eyouems.test; import java.net.MalformedURLException; import java.net.URL; import org.codehaus.xfire.client.Client; /** * 类 编 号:TestCallWebService.java * 类 名 称: * 内容摘要: * 完成日期: * 编码作者: */ public class TestCallWebService { //记得传入WebServer的服务地址,应该从常量配置中获得。 URL ServerUrl = null; public String sendESBMessage(String webServiceURL, String xmlStr) { try { ServerUrl = new URL(webServiceURL); } catch (MalformedURLException e1) { e1.printStackTrace(); } Client client = null; Object[] returnMessage = null; try { client = new Client(ServerUrl); //就是这里了,指定调用的方法,并传入参数 returnMessage = client.invoke("SendMsg", new Object[] { "测试", xmlStr }); } catch (Exception e) { e.printStackTrace(); } String receiveMessage = (String) returnMessage[0]; return receiveMessage; } } |
|
返回顶楼 | |
发表时间:2007-05-11
能举个复杂例子么?如返回List类型 远程调用怎么做?
|
|
返回顶楼 | |
发表时间:2007-07-03
如果你写的服务返回List,可以利用myeclipse自动生成客户端代码
|
|
返回顶楼 | |