公司最近的项目要用到WebService,本来以前用过CXF的,但是现在的系统框架一直以来都是用XFire,上头为了保持统一,决定还是采用XFire来实现,所以我又来补了
以最简单的HelloWorld为例,来了解XFire的工作流程
开发环境:Win7+MyEclipse6.5+Jdk1.6+Tomcat6+Spring2.5+XFire1.2
我们先来写服务端,发布一个WebService的服务接口
一、环境搭建
在MyEclipse中新建web工程,取名HelloWebService,首先添加Spring的jar包支持,可以参考我的SSH开发环境详细搭建(配置文件)
然后添加XFire支持,也是利用MyEclipse,在项目名上点右键->MyEclipse->选择WebService XFire支持。
它会生成services.xml文件,不需要用它,将它删除掉。
它也会在web.xml中生成XFireSpringServlet的过滤器,这个要,留着:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>XFireServlet</servlet-name> <servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>XFireServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
在web.xml中添加我们的Spring启动配置:
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/*.xml</param-value> </context-param>
发布到tomcat,启动看下是否报错,结果发现一直报下面这个错:
org.xml.sax.SAXParseException: Document root element "beans", must match DOCTYPE root "null".
初一看觉得是Spring配置文件头部没有DOCTYPE,结果加上去不好使,上网查发现是引的XFire的jar包里面的Spring1.2版本与开始添加的2.5版本冲突。
解决办法:删除XFire中的低版本的Spring包,因为它是MyEclipse添加的jar包关联,所以要删除,得删除关联,然后再添加XFire中除了Spring1.2的其它Jar包,如果在MyEclipse中找不到,可以去网上搜“XFire所有Jar包下载”关键字
重新添加XFire的jar包,再启服务就好了
二、写Java接口
添加Java接口与实现,用于对外提供服务:
package com.yuwl.webservice; /** * WebService接口 * @author yuwl */ public interface IHelloWebService { String sayHello(String name); }
实现:
package com.yuwl.webservice; /** * 接口实现 * @author yuwl * */ public class HelloWebServiceImp implements IHelloWebService { public String sayHello(String name) { return "hello WS: "+name; } }
并添加到applicationContext.xml中,供XFire访问:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="HelloWS" class="com.yuwl.webservice.HelloWebServiceImp"/> </beans>
三、配置XFire
配置导出器将我们的接口发布成wsdl服务
在Src目录下新建xfire-servlet.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <!-- 引入XFire预配置信息 --> <import resource="classpath:org/codehaus/xfire/spring/xfire.xml" /> <!-- 定义访问的url --> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="urlMap"> <map> <entry key="/HelloWebService"> <ref bean="HelloWebService" /> </entry> </map> </property> </bean> <!-- 使用XFire导出器 --> <bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" lazy-init="false" abstract="true"> <!-- 引用xfire.xml中定义的工厂 --> <property name="serviceFactory" ref="xfire.serviceFactory" /> <!-- 引用xfire.xml中的xfire实例 --> <property name="xfire" ref="xfire" /> </bean> <bean id="HelloWebService" parent="baseWebService"> <!-- 业务服务bean --> <property name="serviceBean" ref="HelloWS" /> <!-- 业务服务bean的窄接口类 --> <property name="serviceClass" value="com.yuwl.webservice.IHelloWebService" /> </bean> </beans>
好了,到此一个简单的HelloWorld WebService服务开发完成了,发布测试一下:
http://localhost:8080/HelloWebService/services/IHelloWebService?wsdl
发现可以看到生成的xml文档数据,有我们定义的接口元素,就说明服务端开发成功了。
四、客户端测试
新建Java工程,导入刚才引的XFire jar包。
将生成的wsdl文档保存为wsdl格式的文件,放入src目录下
建立Java类用main方法来测试我们的服务:
package com.yuwl.test; import org.codehaus.xfire.client.Client; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; /** * WebService客户端测试 * @author yuwl */ public class WebServiceTest { public static void main(String[] args) throws Exception { String wsdl = "IHelloWebService.wsdl"; //对应的WSDL文件 Resource resource = new ClassPathResource(wsdl); Client client = new Client(resource.getInputStream(), null); //根据WSDL创建客户实例 Object[] objArray = new Object[1]; objArray[0] = "yuwl"; //调用特定的Web Service方法 Object[] results = client.invoke("sayHello", objArray); System.out.println("result: " + results[0]); } }
运行main方法,发现报错:
java.lang.NoClassDefFoundError: org/apache/ws/commons/schema/resolver/URIResolver
一看就知道是少jar包,上百度搜这个错,发现是少了XmlSchema-1.1.jar,下载下来引进去,再测就好了,打印结果:result: hello WS: yuwl
至此一个简单的HelloWorld,基于XFire的WebService开发完成了,但在实际的项目开发中,各个系统间的相互对接远不只这么简单,让我们在它的基础上,继续前行吧。
相关推荐
本入门实例将深入探讨如何使用XFire框架与Spring集成来构建和消费Web服务。XFire是Apache CXF的前身,是一个轻量级、高性能的Java Web服务实现库,而Spring则是一个广泛使用的应用框架,它提供了对Web服务的全面支持...
标题“使用xfire+spring构建webservice”指出的是一个关于如何利用XFire和Spring框架创建Web服务的教程。XFire是早先的一个用于构建Web服务的开源Java库,它简化了SOAP(简单对象访问协议)服务的开发。而Spring框架...
总的来说,"webService+Xfire入门"的教程适合初学者,通过它你可以快速了解Web Service的基本概念,学会使用MyEclipse创建、部署和测试Web Service,并理解XFire在Web服务开发中的作用。实践这个小例子,你将对Web ...
### 使用XFire与Spring开发WebService的关键知识点 #### 实现功能与特点 - **基于J2EE平台的WebService服务**:这种服务充分利用了Java 2 Platform, Enterprise Edition (J2EE)的强大特性,如事务管理、安全性等,...
标题中的"Spring+Hibernate+Xfire"是一个集成开发的框架组合,主要应用于Java后端开发。这个组合将Spring的依赖注入、事务管理等优势,与Hibernate的持久化能力,以及Xfire的Web服务支持相结合,形成一个强大的企业...
标题中的"MyEclipse下用XFire开发WebService(入门级)源码"指的是一项使用MyEclipse集成开发环境,结合XFire框架来创建和部署Web服务的教程,适合初学者。XFire是一款早期的Java Web服务实现库,它简化了SOAP(简单...
这通常包括服务发布、绑定到特定端口、启用Spring集成等。例如: ```xml <bean id="xfireConfig" class="org.codehaus.xfire.spring.XFireSpringConfigurator"> <property name="xfire" ref="xfire"/> ...
这里可以使用Spring框架来集成XFire,或者直接在代码中创建和启动服务器。 ```java XFire xfire = new XFire(); xfire.init(); Service service = new AnnotatedService(HelloWorldServiceImpl.class); service....
【Web服务——XFire快速入门代码实训】 在IT行业中,Web服务是一种使应用程序能够通过互联网交换数据的...通过本次实训,你将掌握如何在Eclipse环境中使用XFire快速开发Web服务,从而开启你在Web服务领域的探索之旅。
总的来说,Web Service接口的开发需要理解SOAP协议,熟悉各种开发组件的特点和用法,并能有效地与企业级框架如Spring集成。本文档旨在为开发者提供快速入门的指导,帮助他们高效地实现跨平台的交互式服务。
这不仅包括了 WebService 的创建、部署和测试流程,还涵盖了相关的开发环境搭建和 XFire 框架的使用方法。对于初学者而言,这是一个很好的起点,帮助他们理解 WebService 的核心概念和技术实现方式。 以上就是关于 ...
Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-...Spring 进行无缝集成。
CXF(CXF stands for "CXF is a great XFire Fork")是一个开源的Java框架,用于构建和开发Web服务。它提供了强大的支持,包括对JAX-WS和JAX-RS标准的实现,以及丰富的工具集,帮助开发者从Java类生成WSDL,反之亦然...
Java WebService是Java技术在分布式应用开发中的一个重要组成部分,它允许不同的系统通过网络进行通信和交互,实现服务的互操作性。本教程涵盖了Java WebService的中文和英文学习资源,适合初学者和有一定基础的学习...
CXF可与其他Java EE技术如Spring、Hibernate等无缝集成,提供更强大的功能。例如,通过Spring容器管理CXF服务,可以实现依赖注入和事务管理。 总结,CXF作为一个强大的Web服务框架,提供了从服务端到客户端的全方位...
CXF(CXF: XFire + XStream)是一个开源的Java框架,用于构建和开发Web服务。它提供了多种方式来创建和消费Web服务,包括基于JAX-WS和JAX-RS的标准。CXF以其灵活性、易用性和强大的功能而受到开发者们的青睐。以下是...
资料包中的**SpringCXF源码**提供了深入学习CXF和Spring集成的机会。通过阅读和分析源码,你可以了解CXF如何与Spring协同工作,以及如何利用Spring的配置和管理优势来提升Web服务的开发效率和可维护性。 最后,**...
- **第十四章:WebService 开发**:探讨了基于 XFire 的 WebService 快速开发过程,为实现服务导向架构(SOA)打下基础。 - **第十五章:EJB 3 开发**:讲解了 EJB 3 的基本特性和使用方法,这是一种用于构建企业级...