`
yuwenlin2008
  • 浏览: 127206 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

WebService之XFire+Spring集成开发入门

 
阅读更多

公司最近的项目要用到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开发完成了,但在实际的项目开发中,各个系统间的相互对接远不只这么简单,让我们在它的基础上,继续前行吧。

 


 

 

  • 大小: 47.3 KB
0
5
分享到:
评论
5 楼 王新春 2013-06-22  
yuwenlin2008 写道
王新春 写道
楼主能否 给出这种webservice 和 requestResponse 输出json 数据,有什么相似性和不同,性能上优势和劣势不,非常感谢!

WebServie和Request其实没什么可比性,WebService是一种处理不同系统之间的数据交换技术,可跨平台,跨语言等。Request,Response是一种客户端发出请求,服务端作出响应。它们应用的场景不一样,无非都是基于Http的,只是个人觉得的哈。

好吧,你理解的角度和我说的都不一样。
4 楼 yuwenlin2008 2013-06-08  
王新春 写道
楼主能否 给出这种webservice 和 requestResponse 输出json 数据,有什么相似性和不同,性能上优势和劣势不,非常感谢!

WebServie和Request其实没什么可比性,WebService是一种处理不同系统之间的数据交换技术,可跨平台,跨语言等。Request,Response是一种客户端发出请求,服务端作出响应。它们应用的场景不一样,无非都是基于Http的,只是个人觉得的哈。
3 楼 王新春 2013-06-08  
shanlingyunjavafuns 写道
   个人觉得,他们的相似性都是通过对象来组装属性信息,开发效率上来说,后者应该跟快捷些。但是在通信过程中,信息转化成对象的效率前者高一些。如果是第三方调用接口,后者,得提供sdk。说的不好,还望大家补充,探讨,勿喷。

效率上,从调用方而言:协议都是http,数据一个json 和xml 应该差异不大吧。都是字符串解析。
从提供方而言:websevice应该更便捷,接口数据转换为 文本都不用做了,json其实也以及很方便了。
2 楼 shanlingyunjavafuns 2013-06-08  
   个人觉得,他们的相似性都是通过对象来组装属性信息,开发效率上来说,后者应该跟快捷些。但是在通信过程中,信息转化成对象的效率前者高一些。如果是第三方调用接口,后者,得提供sdk。说的不好,还望大家补充,探讨,勿喷。
1 楼 王新春 2013-06-08  
楼主能否 给出这种webservice 和 requestResponse 输出json 数据,有什么相似性和不同,性能上优势和劣势不,非常感谢!

相关推荐

    xfire+spring+webservice入门例子

    本入门实例将深入探讨如何使用XFire框架与Spring集成来构建和消费Web服务。XFire是Apache CXF的前身,是一个轻量级、高性能的Java Web服务实现库,而Spring则是一个广泛使用的应用框架,它提供了对Web服务的全面支持...

    使用xfire+spring构建webservice

    标题“使用xfire+spring构建webservice”指出的是一个关于如何利用XFire和Spring框架创建Web服务的教程。XFire是早先的一个用于构建Web服务的开源Java库,它简化了SOAP(简单对象访问协议)服务的开发。而Spring框架...

    webService+Xfire入门

    总的来说,"webService+Xfire入门"的教程适合初学者,通过它你可以快速了解Web Service的基本概念,学会使用MyEclipse创建、部署和测试Web Service,并理解XFire在Web服务开发中的作用。实践这个小例子,你将对Web ...

    xfire-spring.pdf

    ### 使用XFire与Spring开发WebService的关键知识点 #### 实现功能与特点 - **基于J2EE平台的WebService服务**:这种服务充分利用了Java 2 Platform, Enterprise Edition (J2EE)的强大特性,如事务管理、安全性等,...

    Spring+hibernate+Xfire

    标题中的"Spring+Hibernate+Xfire"是一个集成开发的框架组合,主要应用于Java后端开发。这个组合将Spring的依赖注入、事务管理等优势,与Hibernate的持久化能力,以及Xfire的Web服务支持相结合,形成一个强大的企业...

    MyEclipse下用XFire开发WebService(入门级)源码

    标题中的"MyEclipse下用XFire开发WebService(入门级)源码"指的是一项使用MyEclipse集成开发环境,结合XFire框架来创建和部署Web服务的教程,适合初学者。XFire是一款早期的Java Web服务实现库,它简化了SOAP(简单...

    ssh下做webservice需要的xfire所有jar

    这通常包括服务发布、绑定到特定端口、启用Spring集成等。例如: ```xml &lt;bean id="xfireConfig" class="org.codehaus.xfire.spring.XFireSpringConfigurator"&gt; &lt;property name="xfire" ref="xfire"/&gt; ...

    webservice 新手入门配置 xfire做引擎

    这里可以使用Spring框架来集成XFire,或者直接在代码中创建和启动服务器。 ```java XFire xfire = new XFire(); xfire.init(); Service service = new AnnotatedService(HelloWorldServiceImpl.class); service....

    【webservice----xfire 快速入门代码实训】----<下载不扣分,回帖加1分,欢迎下载,童叟无欺>

    【Web服务——XFire快速入门代码实训】 在IT行业中,Web服务是一种使应用程序能够通过互联网交换数据的...通过本次实训,你将掌握如何在Eclipse环境中使用XFire快速开发Web服务,从而开启你在Web服务领域的探索之旅。

    Webservice接口快速开发指导

    总的来说,Web Service接口的开发需要理解SOAP协议,熟悉各种开发组件的特点和用法,并能有效地与企业级框架如Spring集成。本文档旨在为开发者提供快速入门的指导,帮助他们高效地实现跨平台的交互式服务。

    WebService

    这不仅包括了 WebService 的创建、部署和测试流程,还涵盖了相关的开发环境搭建和 XFire 框架的使用方法。对于初学者而言,这是一个很好的起点,帮助他们理解 WebService 的核心概念和技术实现方式。 以上就是关于 ...

    CXF WEBSERVICE入门,非常详细实用

    Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-...Spring 进行无缝集成。

    cxf webserice 开发指南

    CXF(CXF stands for "CXF is a great XFire Fork")是一个开源的Java框架,用于构建和开发Web服务。它提供了强大的支持,包括对JAX-WS和JAX-RS标准的实现,以及丰富的工具集,帮助开发者从Java类生成WSDL,反之亦然...

    java webService 中文与英文教程

    Java WebService是Java技术在分布式应用开发中的一个重要组成部分,它允许不同的系统通过网络进行通信和交互,实现服务的互操作性。本教程涵盖了Java WebService的中文和英文学习资源,适合初学者和有一定基础的学习...

    CXF 一个完整的webService(整合客户端和服务端)

    CXF可与其他Java EE技术如Spring、Hibernate等无缝集成,提供更强大的功能。例如,通过Spring容器管理CXF服务,可以实现依赖注入和事务管理。 总结,CXF作为一个强大的Web服务框架,提供了从服务端到客户端的全方位...

    CXF资料宝典大全

    资料包中的**SpringCXF源码**提供了深入学习CXF和Spring集成的机会。通过阅读和分析源码,你可以了解CXF如何与Spring协同工作,以及如何利用Spring的配置和管理优势来提升Web服务的开发效率和可维护性。 最后,**...

Global site tag (gtag.js) - Google Analytics