基于xfire实现webservice的实例
基于xfire实现webservice的实例 ? ?????? 首先下载xfire的jar包,并导入项目当中 ?????? 下载地址:http://xfire.codehaus.org/Download
1.???? 编写实现类 a.???? 首先建一个接口把对外开放的方法添加进该接口,实际上就是开放此接口让客户端 获得 ? ? ? ? 2.???? 映射web.xml 通过配置web.xml来映射相应的路径,在web.xml添加如下代码 ? 3.services配置文件 ??????? 创建services文件 ?????????????? 在src目录下创建META-INF目录,在该目录下创建一个xfire目录在该目录 ?????????????? 下创建services.xml 通过配置此文件来公开我们的接口,客户端可以通过此文件的映射可以找到相应的需要公开的接口 ? 获取wsdl文件的地址 ?什么是wsdl? ?参考: http://blog.csdn.net/sunchaohuang/archive/2008/10/14/3076375.aspx ?通过web.xml与services.xml对地址的映射我们可以获得如下地址并进行访问后就可 访问的地址: 访问后会得到一个类似xml格式的内容 该文件就是一个wsdl文件 4.编写客户端 ?????? 客户端获得webservice的url地址后创建对外开放的接口的实体类,然后向相应的方法传递参数,经过服务端相应的处理返回需要的结果 ?? 不同项目的webservice调用 ?????? 一般情况下webservice的调用都是在不同的项目间或者不同的语言中来使用的 ?????? 如果是不同的语言调用webservice应用: ????????????? 客户端如果是其他语言,则通过得到服务端生成的wsdl或者或者wsdl文件的 ?? ?如果是不同项目间的调用(java语言为例) ??????? 在myeclipse下新建一个web service Client选择xfire下一步后选择wsdl的 ????? ?完成后会自动生成相应的客户端类。 ??????? 在HelloXfireClient类中调取服务端对外开放的接口方法获得相应数据 ??????? 具体代码如下
? ? 如果能够成功运行并正确获得调用的方法返回的值说明webservice成功实现了 ?
? ??? 常见错误及解决办法: ? ?????? 1.jar包冲突 ?????? 如果运行后得到以下错误 org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: Could not marshall type. ? 说明jar包有冲突 解决办法 如果发现以下的包用多个 jaxb-api-1.0.jar 则删除低版本的 ? ? 2. Could?not?find?valid?implementation?for:?2.0如果出现如下错误 java.lang.IllegalStateException: Could not find valid implementation for: 2.0 ? 问题的原因是因为xfire不支持spring2.0的新特性,需要修改service.xml文件,将beans元素的命名空间放到services元素上,修改后的xml如下: <beans> ?<services xmlns="http://xfire.codehaus.org/config/1.0"> ?</services> </beans> 另外,由于我使用了MyEclipse的Spring Capailities和WebService Capailities(使用xfire),由于后者自带了Spring1.2.6的包,造成了和2.0版本的冲突,所以必须作以下工作: ??? 删除<MyEclise_Home>/eclipse/plugins/com.genuitec.eclipse.ws.xfire_5.9.100/data/1.2/lib目录的Spring1.2.6包 Tomcat/Webapps/<项目目录>/WEB-INF/lib目录下的Spring1.2.6包(好像重新部署不能删除已经存在的包) ??? 重新启动MyEclipse 问题解决。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |