author: calvin,smallnest
1.概述
网站:
Smallnestservice fault写的 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>
<method name="findBooksByName">
<return-type componentType="org.springside.bookstore.domain.Book"/>
</method>
</mapping>
为了以约定俗成代替配置,所有Service和Entity Bean的binding文件要求命名为l,而且要和原来的类sit together在同一目录里。
具体介绍见Aegis Binding。
2.3.配置Spring 导出Web服务
配置文件见l ,靠一个XFire Exporter将窄接口导出成Web服务,然后靠Spring MVC的URL Mapper将它绑定到某个URL。
XFire对此还提供了基于XBean的简写法,但我等着Spring2.0,就不上XBean了,抽象出一个parent bean后,其实也差不多了。
XFire对此还提供了基于XBean的简写法,但我等着Spring2.0,就不上XBean了,抽象出一个parent bean后,其实也差不多了。
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<value>/BookService=bookService</value>
</property>
</bean>
<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>
<property name="serviceBean" ref="bookManager"/>
<property name="serviceClass" value="org.springside.bookstore.service.BookService"/>
</bean>
<bean id="baseWebService" class="dehaus.ing.XFireExporter" abstract="true">
<property name="serviceFactory" ref="xfire.serviceFactory"/>
<property name="xfire" ref="xfire"/>
</bean>
<property name="serviceFactory" ref="xfire.serviceFactory"/>
<property name="xfire" ref="xfire"/>
</bean>
此时,XFire就会导出WebService并显示WSDL如下:
localhost:8080/springside/service/BookService?WSDL
localhost:8080/springside/service/BookService?WSDL
另有不依赖于Spring的配置方式,需自行在l配置servlet,在WEB-INF/classes/META-INF/xfire 目录放置l配置文件。
3.Client端代码
1.Client的实现同样只需要POJOs ,Service接口和相应的l文件
public static void main(String[] args) {
Service serviceModel = new ObjectServiceFactory().create(BookService.class);
BookService service = (BookService) new XFireProxyFactory().create(
serviceModel,"localhost:8080/springside/service/BookService");
List list = service.findBooksByCategory(null);
}
BookService service = (BookService) new XFireProxyFactory().create(
serviceModel,"localhost:8080/springside/service/BookService");
List list = service.findBooksByCategory(null);
}
2.另一种动态Client:
Client client = new Client(new URL("www.webservicex/CurrencyConvertor.asmx?WSDL"));
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论