- 浏览: 485801 次
- 性别:
- 来自: 武汉
最新评论
-
zyzyzy123:
请问有工程吗,我现在正在实现打电话的功能,但是一直不通,怀疑是 ...
实用的java 串口通信程序 -
wuhaitong:
引用[img][/img][*][url][/url] ...
jbpm -
迷糊_le:
maven命令, 蛮好的,谢谢
maven eclipse -
Wuaner:
不错的文章 , 谢谢分享!
Hadoop -
yuqihengsheng:
strong 很细
HighLighter
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。
发表评论
-
安装和使用memcached
2014-04-16 16:24 644如何将 memcached 融入到 ... -
applicationContext.xml
2013-08-09 09:05 948<?xml version="1.0&quo ... -
注释驱动的 Spring cache 缓存介绍
2013-08-08 07:04 665概述 Spring 3.1 引入了激动人心的基于注释(an ... -
Spring2.5 Annotations
2013-08-08 06:33 862完成setXxxx功能,即配置文件的 <propert ... -
Spring基于注解的缓存配置--EHCache AND OSCache
2013-08-07 23:21 1032本文将构建一个普通工程来说明spring注解缓存的使用方式, ... -
Ehcache 整合Spring 使用页面、对象缓存
2013-08-07 22:51 899Ehcache 整合Spring 使用页面、对象缓存 ... -
javassist教程和示例
2013-05-18 08:57 2014Javassist是一个执行字节 ... -
ZooKeeper官方文档
2013-05-16 17:09 1563介绍(源自ZooKeeper官方文档) 学习HBase过程 ... -
ZooKeeper -例子
2013-05-16 17:08 1217ZooKeeper ZooKeepe ... -
Spring整合Hessian访问远程服务
2013-05-15 13:44 860Spring整合Hessian访问远程服务 目录 1.1 ... -
redis
2013-05-14 11:44 773redis是一个key-value存储系统。和Memcach ... -
spring 资源访问
2013-05-13 08:26 1003spring在java基础上封装了资源访问,简单易用。 R ... -
ZooKeeper——入门
2013-05-08 16:12 913ZooKeeper——入门 博客分类: ZooK ... -
分布式服务框架 Zookeeper -- 管理分布式环境中的数据(IBM)
2013-05-08 14:07 788安装和配置详解 本文 ... -
分布式协调服务---Zookeeper
2013-05-08 14:05 7791、Zookeeper overview Zookee ... -
Hibernate
2013-03-28 13:04 927一、简述 Hibernate 和 JD ... -
Apache+Tomcat集群配置详解
2013-02-01 10:52 898Apache + Tomcat集群配置详解(1) 一、 ... -
Apache+Jboss集群基于反向代理的负载均衡
2013-02-01 10:40 2498假设三台机器IP分别为172.29.128.100、172. ... -
spring + ibatis 多数据源事务(分布式事务)管理配置方法
2012-12-17 15:18 1270spring + ibatis 多数据源事务(分布式事务 ... -
Hessian序列化不设SerializerFactory性能问题
2012-10-31 09:47 1503Hessian序列化不设SerializerFactor ...
相关推荐
《Xfire全方位解析:1.2.6版本的全面探讨》 Xfire,这款曾经在游戏社区中广受欢迎的即时通讯软件,以其独特的游戏整合功能和社交特性,为玩家提供了便捷的游戏内通信和社区交流平台。本文将深入探讨Xfire 1.2.6这一...
在本案例中,"Xfire的client.zip"是一个包含了Xfire客户端代码的压缩包,主要用于调用Web服务。 Xfire客户端代码是实现与Xfire服务器通信的代码库,它可能包含了多种语言的实现,如Java、C#或Python等。这些代码...
xfire是一个早期流行的开源Web服务框架,主要用于构建SOAP(简单对象访问协议)和RESTful(Representational State Transfer)服务。这个框架使得Java开发者能够轻松地创建、部署和消费Web服务。xfire依赖于一系列的...
【XFire创建的WebService】是基于Java平台的开源框架,用于构建和消费Web服务。它在Web服务领域提供了一个轻量级、高性能的选择,尤其适合快速开发。在本例中,我们将探讨如何使用XFire来创建一个简单的WebService...
【整合XFire与Spring进行Web Service开发】 XFire是一个基于Java的SOAP Web Service框架,而Spring是一个广泛应用的轻量级框架,它提供了依赖注入、面向切面编程等特性。将两者集成可以方便地构建和消费Web Service...
XFire,全称为XML Fire,是一款历史悠久的开源Java框架,主要用作服务导向架构(SOA)中的Web服务实现工具。它允许开发者快速构建、部署和管理基于HTTP的服务,支持SOAP和RESTful通信协议。在Java开发中,XFire通过...
【xfire myeclipse10包】是一款专为MyEclipse10集成开发环境设计的XFire插件安装包。XFire是一款强大的Java Web服务框架,它提供了对Web服务的全面支持,包括创建、部署和消费Web服务的能力。在MyEclipse这样的集成...
"Java 使用 XFire 调用 webService 接口" 在本文中,我们将学习如何使用 XFire 框架在 Java 中调用 webService 接口。XFIRE 是一个基于 Java 的开源框架,用于简化 Web 服务的开发和集成。下面,我们将通过一个简单...
在IT行业中,集成框架是开发复杂应用程序的关键,Spring和XFire就是两个重要的工具。Spring作为一个强大的Java企业级应用开发框架,提供了丰富的功能,包括依赖注入、面向切面编程(AOP)以及各种服务管理。而XFire...
进行WebService开发中所用到的xfire所有相关包如:xfire-jsr181-api-1.0-M1.jar、xfire-jaxws-1.2.6.jar、xfire-java5-1.2.6.jar、xfire-core-1.2.6.jar、xfire-annotations-1.2.6.jar、xfire-aegis-1.2.6.jar、...
"xfire+spring+安全认证"的主题聚焦于如何利用XFire和Spring框架来实现安全的Web服务。XFire是一个用于创建、消费和部署SOAP Web服务的Java库,而Spring框架则是一个广泛使用的全功能应用开发框架,提供了包括安全性...
在Java开发中,有时我们可能需要整合不同的框架或者库,比如Apache CXF和XFire,这两个都是用于构建Web服务的框架。然而,由于它们都包含了处理XML Schema(XmlSchema)的相关组件,可能会出现jar包冲突的问题,导致...
XFire1.2.6完整版JAR包是一款历史悠久的游戏服务器通信软件,它主要用于网络游戏的多人联机功能。XFire的出现,使得玩家能够轻松地与朋友们一起进行在线游戏,享受更加流畅、稳定的多人对战体验。这个版本是1.2.6,...
1、以下四个类调用了XmlSchema-1.1.jar包 因与cxf包xmlschema-core-*.jar... xfire-all-1.2.6-incomplete.jar 替换 xfire-all-1.2.6.jar 3、XmlSchema-1.1.jar 可以与 xmlschema-core-*.jar 共存避开同路径同名类冲突
Xfire是一款曾经流行的开源Java框架,用于构建和消费Web服务。在本文中,我们将深入探讨Xfire调用Web服务时遇到的参数传递问题以及解决策略。 首先,让我们了解Web服务的基本概念。Web服务基于SOAP(Simple Object ...
1、以下四个类调用了XmlSchema-1.1.jar包 因与cxf包xmlschema-core-*.jar... xfire-all-1.2.6-incomplete.jar 替换 xfire-all-1.2.6.jar 3、XmlSchema-1.1.jar 可以与 xmlschema-core-*.jar 共存避开同路径同名类冲突
XFire(现已被Apache CXF项目合并)是一个Java框架,它支持SOAP(Simple Object Access Protocol)和WS-*规范,帮助开发者构建和消费Web服务。 本文将详细介绍如何使用XFire根据WSDL文件生成客户端代码,以便快速地...
Spring 和 XFire 的集成是构建基于 SOAP 的 Web 服务的一种高效方法。XFire 是一个 Java 框架,专门用于创建和消费 Web 服务,而 Spring 框架则提供了全面的企业级应用开发支持。将这两者结合可以利用 Spring 的强大...
《Xfire:构建Web服务的关键组件》 在IT行业中,Web服务已经成为企业级应用集成、数据交换和跨系统通信的核心技术。Xfire,一个历史悠久的Java库,是开发者们构建Web服务的重要工具,特别是对于那些熟悉Java环境的...