受白衣同志的当,上了xfire的贼船,抛弃了axis,呜!
xfire 1.0终于final了,试用了一下,,感觉同1.0M6相比,使用变化不大。
看看user guide,照着examples下的例子,基本上hello xfire不成问题。
1、jar包
同以往一样,xfire user guide中的Dependency Guide.html还是说得不明不白,除了让人发晕,没有太大的实际意义。

注:
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中配置一下
<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配置一下。
<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那一段)
<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配置文件。
<?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就是方便啊!
至于java做client么,以前一般是用axis来生成client class,xfire也提供类似的工具,不过对于xfire来说,最简单的办法就是用Dynamic Client,几行代码搞定。
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");
本文介绍了XFire 1.0的部署步骤及注意事项,包括配置文件设置、Spring集成方法以及客户端调用技巧等。
2459

被折叠的 条评论
为什么被折叠?



