xfire 1.0 终于final了

来源:互联网 发布:java switch是什么意思 编辑:程序博客网 时间:2024/05/21 07:14

受白衣同志的当,上了xfire的贼船,抛弃了axis,呜!

xfire 1.0终于final了,试用了一下,,感觉同1.0M6相比,使用变化不大。

看看user guide,照着examples下的例子,基本上hello xfire不成问题。

1、jar包

同以往一样,xfire user guide中的Dependency Guide.html还是说得不明不白,除了让人发晕,没有太大的实际意义。

SNAG-0000.jpg

注:
1)XmlSchema-1.0.jar、jakatra commons httpclient/codec只有在Dynamic Client中才需要用。
2)采用quick start、examples/book中用的service.xml配置方法时,xbean-spring与spring有兼容问题,我用1.2.7、2.0M2的spring时,总是报addPropertyValue(String,Object)之类的异常,换成1.2.6以后一切正常。用examples/spring例子中的配置方法时,没有出现这种情况。

2、quick start、examples/book

这种做法很简单,好象也不太合我的胃口,就没仔细折腾。
(1)在web.xml中配置一下

 1  <servlet>
 2    <servlet-name>XFireServlet</servlet-name>
 3    <display-name>XFire Servlet</display-name>
 4    <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
 5  </servlet>
 6
 7  <servlet-mapping>
 8    <servlet-name>XFireServlet</servlet-name>
 9    <url-pattern>/servlet/XFireServlet/*</url-pattern>
10  </servlet-mapping>
11
12  <servlet-mapping>
13    <servlet-name>XFireServlet</servlet-name>
14    <url-pattern>/services/*</url-pattern>
15  </servlet-mapping>

(2)编码。这个不用说,呵呵
(3)在classpath中,建META-INF/xfire/services.xml配置文件,把刚才做好的webservices配置一下。

1<beans xmlns="http://xfire.codehaus.org/config/1.0">
2  <service>
3    <name>BookService</name>
4    <namespace>http://xfire.codehaus.org/BookService</namespace>
5    <serviceClass>org.codehaus.xfire.demo.BookService</serviceClass>
6  </service>
7</beans>

(4)然后就是deploy,访问http://ip:port/webapp name/BookService?WSDL之类的动作了。

3、examples/spring

xfire和spring勾搭得比较紧密啊,只需要简单配置一下,就可以把spring.xml中配置好的bean拿出来做web services了。
(1)折腾spring的东西(略)。
(2)在web.xml中配置一下(注意xfire那一段)

 1    <context-param>
 2        <param-name>contextConfigLocation</param-name>
 3        <param-value>/WEB-INF/applicationContext.xml classpath:org/codehaus/xfire/spring/xfire.xml</param-value>
 4    </context-param>
 5
 6    <listener>
 7        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 8    </listener>
 9
10    <servlet>
11        <servlet-name>xfire</servlet-name>
12        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
13    </servlet>
14    <servlet-mapping>
15        <servlet-name>xfire</servlet-name>
16        <url-pattern>/*</url-pattern>
17    </servlet-mapping>

(3)在WEB-INF/xfire-servlet.xml中把spring bean同xfire webservices“关联”起来。这个xfire-servlet.xml实际上就是一个标准的spring.xml配置文件。

 1<?xml version="1.0" encoding="UTF-8"?>
 2<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
 3<beans>
 4    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
 5        <property name="urlMap">
 6            <map>
 7                <entry key="/EchoService" value-ref="echo"/>
 8            </map>
 9        </property>
10    </bean>
11    
12    <bean id="echo" class="org.codehaus.xfire.spring.remoting.XFireExporter">
13        <property name="serviceFactory" ref="xfire.serviceFactory"/>
14        <property name="xfire" ref="xfire"/>
15        <property name="serviceBean" ref="echoBean"/>
16        <property name="serviceClass" value="org.codehaus.xfire.spring.example.Echo"/>>
17    </bean>
18</beans>

注:第16行,xfire 1.0M6中用serviceInterface,现在改成serviceClass了。

(4)然后就完工,用http://ip:port/webapp name/xfire/EchoService?WSDL可以看到WSDL内容。

4、客户端

按我的恶习,这类事情,肯定是直接开vs.net或者C# developer来显摆一下了。不得不承认,.net里面调web services就是方便啊!
SNAG-0001.jpg
至于java做client么,以前一般是用axis来生成client class,xfire也提供类似的工具,不过对于xfire来说,最简单的办法就是用Dynamic Client,几行代码搞定。

1    Service serviceModel = new ObjectServiceFactory().create(Echo.class);
2    Echo service = (Echo) new XFireProxyFactory().create(serviceModel,
3        "http://localhost:8080/xfire-examples/EchoService");
4    String result = service.echo("ok");