- 浏览: 541068 次
- 性别:
- 来自: 西安
文章分类
- 全部博客 (233)
- 设计模式 (1)
- WEBLOGIC (2)
- spring (2)
- struts (1)
- hibernate (8)
- SOA (11)
- j2ee (0)
- corba (0)
- linux (2)
- oracle (0)
- webService (17)
- javaMail (1)
- junit (3)
- java (45)
- 正则表达式 (7)
- java+xml (4)
- html (2)
- javaScript (6)
- ajax (1)
- mysql (0)
- eclipse (2)
- eclipse插件开发 (3)
- 软件工程 (5)
- ant (6)
- 开源包 (6)
- 学习网站 (7)
- Struts2 (18)
- JSP (1)
- 持续集成 (4)
- FreeMaker (6)
- 工作项目点点 (4)
- Maven2 (6)
- JQuery (1)
- 日志记录 (9)
- 工作流 (4)
- BPEL (1)
- extJs (1)
- 组件 (1)
- OSGI (10)
- ESB总线学习 (1)
- 错误解决 (2)
- JMX (3)
- 网络知识 (1)
最新评论
-
duanlongk:
这个问题解决了么?
java.lang.NoClassDefFoundError: org/apache/tuscany -
sotrip:
从上面结果来看,HelloWorld.class是由虚拟机的内 ...
如何实现自己的classloader -
zengsir2008:
哎,不太明白。。。。
OSGI DS 实例 -
ralfsumahe:
...
使用XFire开发Web Service客户端完整入门教程 -
liuqiao_0702:
...
osgi spring hibernate =
http://www.springside.org.cn/docs/Reference.htm
1.概述
Smallnest写的 XFire初级中文教程。
官方网站的User Guide和Quick Start。
JavaWorld的介绍文章
XFire是与Axis 2并列的新一代WebService框架。之所以并称为新一代,因为它:
- 支持一系列Web Service的新标准--JSR181、WSDL2.0 、JAXB2、WS-Security等 ;
- 使用Stax解释XML,性能有了质的提高。XFire采用Woodstox 作Stax实现;
- Easily Create Services from POJOs;
- Spring的结合;
- 灵活的Binding机制,包括默认的Aegis,xmlbeans,jaxb2,castor。
其中第3,4,5项对一个Pragmatic的应用很重要。SpringSide就是使用了这三样,组合了一个比Axis简单得多的WebService最简做法。
关注一个WebService框架,通常关注Java代码遵循什么接口和规范,做什么XML配置,最后执行什么命令来发布一个Web Service,另外还关注Java类如何绑定为XML与其他语言沟通,下面将分别介绍XFire里的最简做法。
2.WebService的最快创建
2.1.抽取WebService用的窄接口
BookManger.java只须为POJO即可,不需要含任何WebService相关代码。
为它抽取一个 for WebService的窄接口BookService.java。
窄接口一方面满足了由于安全原因,不愿意整个XXXManager所有方法导出为Web Service的需求,另一方面,XFire暂时也只支持基于接口的Proxy。
2.2.至简单的Aegis Binding
XFire默认的Aegis Binding语法非常简单,int,String,Date等类型的参数和返回值都无需定义,只要定义一下List findBooksByName()的返回值List里的对象是Book就可以了,是我见过最简单的binding定义,大大优于其他以设计复杂为终极目标的方案。
<mapping> <method name="findBooksByName"> <return-type componentType="org.springside.bookstore.domain.Book"/> </method> </mapping>
为了以约定俗成代替配置,所有Service和Entity Bean的binding文件要求命名为xxx.aegis.xml,而且要和原来的类sit together在同一目录里。
具体介绍见Aegis Binding。
2.3.配置Spring 导出Web服务
配置文件见applicationContext-webservice.xml ,靠一个XFire Exporter将窄接口导出成Web服务,然后靠Spring MVC的URL Mapper将它绑定到某个URL。
XFire对此还提供了基于XBean的简写法,但我等着Spring2.0,就不上XBean了,抽象出一个parent bean后,其实也差不多了。
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <value>/BookService=bookService</value> </property> </bean>
<bean id="bookService" parent="baseWebService"> <property name="serviceBean" ref="bookManager"/> <property name="serviceClass" value="org.springside.bookstore.service.BookService"/> </bean>
<bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" abstract="true"> <property name="serviceFactory" ref="xfire.serviceFactory"/> <property name="xfire" ref="xfire"/> </bean>
此时,XFire就会导出WebService并显示WSDL如下:
http://localhost:8080/springside/service/BookService?WSDL
另有不依赖于Spring的配置方式,需自行在web.xml配置servlet,在WEB-INF/classes/META-INF/xfire 目录放置services.xml配置文件。
3.Client端代码
1.Client的实现同样只需要POJOs ,Service接口和相应的aegis.xml文件
public static void main(String[] args) { Service serviceModel = new ObjectServiceFactory().create(BookService.class); BookService service = (BookService) new XFireProxyFactory().create( serviceModel,"http://localhost:8080/springside/service/BookService"); List list = service.findBooksByCategory(null); }
2.另一种动态Client:
Client client = new Client(new URL("http://www.webservicex.net/CurrencyConvertor.asmx?WSDL")); Object[] results = client.invoke("ConversionRate", new Object[] {"BRL", "UGX"});
3. 第三种方式可以尝试使用XFire的WSDL->Server/Client Side代码的ant命令生成基于Jaxb2绑定的Stub。
4.Web Service的单元测试
XFiire提供了AbstractXFireSpringTest 测试类,无须启动Web容器也能进行测试。
1.protected ApplicationContext createContext()方法
你必须实现这个方法将返回定义的ApplicationContext对象。例如:
protected ApplicationContext createContext() { return ClassPathXmlApplicationContext(new String[]{"classpath*:applicationContext*.xml"}); }
2. 测试服务端
通过invokeService 调用一段写好的web service请求(XML format),可以访问web service,并得到返回的docuemnt,可以调用assertValid验证结果是否正确。
Document doc = invokeService("BookService", "/org/springside/xfire/BookService.FindBooksByName.xml"); assertNoFault(doc); addNamespace("ss", "http://domain.commons.bookstore.springside.org"); assertValid("//ss:Book/ss:category/ss:descn= \"Java Book\"", doc);
FindBookByName的内容如下:
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Header/> <env:Body> <findBooksByName xmlns="http://www.springside.org.cn"> <in1>Java</in1> </findBooksByName> </env:Body> </env:Envelope>
另外如果涉及到hibernate操作,可以使用easyMock,也可以像RealDaoControllerTest那样,自行实现openSession、closeSession操作,避免hibernate lazyload的问题。
3.测试客户端代码
为了在不启动tomcat的情况下测试客户端代码,则测试代码仍然继承于AbstractXFireSpringTest,使用local的URL进行测试
Service serviceModel = new ObjectServiceFactory().create(BookService.class); XFireProxyFactory factory = new XFireProxyFactory(getXFire()); BookService service = (BookService) factory.create(serviceModel, "xfire.local://BookService");
注意两处红色的地方,和普通的Client代码略有不同,是解决不用启动tomcat跑客户端service测试代码的关键,其中xfire.local://BookService中的ServiceName 为被Export的接口名,与Spring MVC的URL Mapping无关。
5.安全与认证
可以用WS-Security,Xfire用的是WSS4J ,详看 SpringSide里的服务端配置以及以TestCase形式Demo的客户端代码。
也可以写一个认证用户名密码的handler。用户名和密码在WebService请求的<head>中编写。在服务端实现一个hanlder负责在header中读出密码并验证,然后把handler挂到service上。
<bean id="bookWebService" parent="baseWebService"> <property name="serviceBean" ref="bookManager"/> <property name="serviceClass" value="org.springside.bookstore.plugins.xfire.service.BookService"/> <property name="inHandlers" ref="authenticationHandler"/> </bean>
在客户端同样实现一个handler,负责将用户名和密码放入到请求的head中,在客户端代码中挂接此请求,增加代码
Client client = ((XFireProxy) Proxy.getInvocationHandler(bookService)).getClient(); client.addOutHandler(new ClientAuthHandler());
单元测试所编写的web service xml请求也作了相应修改。
6.wsdl2java ant task
在SpringSide的build.xml文件中,增加了wsdl2java的target,利用XFire提供的wsgen task可以从wsdl创建客户端代码。
首先要引入wsgentask,然后调用wsgen:
<taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask" classpathref="compile.classpath"/>
<wsgen outputDirectory="${code_path}" wsdl="${wsdl_path}" package="${code_package}" binding="xmlbeans"/>
其中outputDirectory属性定义了代码输出到的文件夹,wsdl定义了wsdl文件的路径,package则定义了创建的java代码的pachage。
binding可以省略,默认binding为JAXB 2.0,也可以设置为xmlbeans,则binding采用xmlbeans的方式。
7.Tips
7.1. Open Session In View
依然是用spring那个filter,对WebService的URL目录也Filter一下:
<filter-mapping> <filter-name>hibernateFilter</filter-name> <url-pattern>/service/*</url-pattern> </filter-mapping>
7.2 异常处理
以往的模式一般是写一个WebService中间层,负责调用XXXManager,并处理、转化异常。
而XFire是直接export XXXManager的,并提供了一个异常处理的Handler,有默认的实现,也有可扩展的CustomerErrorHandler。
发表评论
-
CXF+JAXB发布获取web
2009-03-26 09:50 2953CXF有多种数据绑定方式,如:Aegis Databindi ... -
StAX介绍
2009-03-10 09:55 2073Streaming API for XML (StAX) 是用 ... -
JAXB2.0
2009-03-10 09:28 3668WEB Service CXF实战3-服务实现 版权声明:转载 ... -
webservice学习
2008-12-30 11:03 1320webservice:[定义]建立可互操作的、分布式应用程序的 ... -
XFire客户端流程分析
2008-12-25 17:25 2612XFire是当前J2EE领域非常 ... -
使用XFire开发Web Service客户端完整入门教程
2008-12-25 17:22 5465虽然XFire现在已经被CXF取代,但在现在已经开发的项目中, ... -
webservice入门与ant结合
2008-12-25 17:05 1892一、实验环境 ... -
XFire在spring中应用
2008-12-25 10:29 2046xfire在spring的应用: xfire在spri ... -
使用xfire开发jsr181风格的web服务
2008-12-25 10:09 1672JSR 181通过标准化一个易于学习且可以快速开发的Web服务 ... -
Eclipse构建WebServices(XFire )
2008-12-25 09:57 4267开发环境Sun Java 5+ Eclipse 3.2 +My ... -
浅谈SOAP
2008-12-24 14:36 1001随着计算机技术的不断 ... -
WSDL样式详解
2008-12-24 14:34 2144http://www.blogjava.net/orangel ... -
apache soap
2008-07-30 17:17 1618******************************* ... -
关于web.xml详细说明
2008-07-30 14:15 1217本节描述用作J2EE环境组 ... -
JavaSE6.0 Web Service学习笔记(引用)
2008-04-05 17:46 1196Web Service概述 Web Service ... -
使用XFire+Spring构建Web Service
2008-04-05 17:43 9799XFire是与Axis 2并列的新 ...
相关推荐
标题“xfire集成spring必须要的jar”表明我们要讨论的是在整合XFire和Spring时必不可少的Java库文件。这些JAR文件通常包含了XFire和Spring框架相互交互所需的核心组件和依赖。下面将详细解释这些关键组件以及它们在...
通过集成XFire和Spring,我们可以利用Spring的强大功能,如依赖注入和事务管理,简化Web Service的开发和维护。这种方式使得Web Service的实现更加灵活和易于扩展。同时,由于XFire支持多种协议,包括SOAP、REST等,...
"xfire+spring+安全认证"的主题聚焦于如何利用XFire和Spring框架来实现安全的Web服务。XFire是一个用于创建、消费和部署SOAP Web服务的Java库,而Spring框架则是一个广泛使用的全功能应用开发框架,提供了包括安全性...
标题 "xfire 与Spring完整集成实例(WebService)" 提示我们关注的是如何将XFire框架与Spring框架整合,以实现Web服务的功能。XFire是一个早期的Java Web Service框架,它提供了快速、轻量级的方式来创建和消费SOAP...
Spring 和 XFire 的集成是构建基于 SOAP 的 Web 服务的一种高效方法。XFire 是一个 Java 框架,专门用于创建和消费 Web 服务,而 Spring 框架则提供了全面的企业级应用开发支持。将这两者结合可以利用 Spring 的强大...
标题"xfire集成spring的jar包"指出,这是一个关于如何将XFire与Spring集成的解决方案,通过包含的jar包,我们可以创建和消费基于SOAP的Web服务。Spring是一个强大的Java应用框架,它提供了依赖注入、面向切面编程等...
总结来说,"xfire+spring+webservice+client"是一个关于利用Spring和XFire集成实现Web服务客户端的议题,涵盖了从Web服务的基本概念到具体实现的多个层次。通过理解这些知识点,开发者可以有效地构建和维护自己的Web...
通过以上步骤,我们成功地将XFire集成到Spring中,创建了一个简单的Web Service应用。这种集成方式不仅简化了Web Service的开发,还利用了Spring的强大功能,如依赖注入和AOP,为Web Service提供了更健壮、更灵活的...
在Web服务领域,Spring提供了对Web服务的支持,可以与XFire无缝集成,允许开发者在Spring环境下创建、配置和管理Web服务。 结合XFire和Spring,有以下两种主要的方式来开发Web服务: 1. **基于注解的方式**:...
`xfire-spring`是特别重要的,因为它包含Spring与Xfire集成所需的类和配置。 3. **XML解析库** - 如`xercesImpl.jar`和`xml-apis.jar`,它们用于处理XML文档,是Xfire处理SOAP消息的基础。 4. **AOP Alliance** - ...
【xfire集成spring+hibernate实现webservice样例工程】是一个典型的Java开发中的整合案例,它演示了如何将三个重要的技术框架——XFire、Spring和Hibernate有效地结合在一起,以构建一个提供Web服务的工程。...
6. **安全控制**:Spring的安全框架可以与XFire集成,提供认证和授权机制。例如,可以使用Spring Security(原Acegi)来保护Web服务,确保只有经过身份验证的用户才能访问。 7. **异常处理**:Spring的异常翻译功能...
在这个例子中,我们将探讨如何将XFire、Spring和Hibernate这三个强大的工具集成为一个整体,以实现高效的Web服务和持久化管理。 首先,XFire是一款轻量级的Java Web服务框架,它允许开发者快速地创建和部署SOAP服务...
Spring的测试框架可以方便地进行单元测试和集成测试,确保服务的正确性和性能。 在提供的文件名“XFireWsClient”和“XFireWsMe”中,我们可以推测它们可能包含了XFire与Spring整合的客户端和服务端示例代码。通过...
集成 Spring 和 XFire 的主要目的是利用 Spring 的管理和配置能力来处理 XFire 的 Web 服务生命周期。这可以通过 Spring 的 Bean 定义和自动装配实现,使得 Web 服务的创建、发布和消费变得更加简单。 集成步骤如下...
总之,"xfire与spring集成案例"是一个实用的教程,旨在帮助开发者理解和实践如何在Spring环境中利用XFire构建Web服务。这个案例提供了完整的流程,从配置到测试,对于初学者来说是一个很好的学习起点,同时也为有...
- **集成优势**:通过Spring框架管理XFire服务的生命周期,简化了配置和服务的组装过程。例如,可以通过Spring的Bean工厂轻松创建XFire的服务实例。 #### 运行环境 - **JDK版本**:要求使用JDK 1.4及以上版本,这...
XFire的强项在于它的灵活性和与Spring框架的紧密集成。 Spring,作为一个全面的企业级应用框架,提供了丰富的功能,包括依赖注入、AOP(面向切面编程)、事务管理等。Spring的IoC(Inversion of Control)容器使得...
在IT行业中,集成框架是开发复杂应用程序的关键,Spring和XFire就是两个重要的工具。Spring作为一个强大的Java企业级应用开发框架,提供了丰富的功能,包括依赖注入、面向切面编程(AOP)以及各种服务管理。而XFire...