XFire 是 codeHaus 组织提供的一个开源框架,它构建了 POJO 和 SOA 之间的桥梁,主要特性就是支持将 POJO 通过非常简单的方式发布成 Web 服务,这种处理方式不仅充分发挥了 POJO 的作用,简化了 Java 应用转化为 Web 服务的步骤和过程,也直接降低了 SOA 的实现难度,为企业转向 SOA 架构提供了一种简单可行的方式。
XFire 目前最新的版本是 1.2.6,目前支持的特性主要包括:
[list]
[*]支持将 Web 服务绑定到 POJO、XMLBeans、JAXB1.1、JAXB2.0 和 Castor;
[*]支持基于 HTTP、JMS、XMPP 等多种协议访问 Web 服务;
[*]支持多种 Web 服务业界重要标准如 SOAP、WSDL、Web 服务寻址(WS-Addressing)、Web 服务安全(WS-Security)等;
[*]支持 JSR181,可以通过 JDK5 配置 Web 服务;
[*]高性能的 SOAP 实现;
[*]服务器端、客户端代码辅助生成;
[*]对 Spring、Pico、Plexus 等项目的支持等。
[/list]
使用过axis2,对比发现xfire真的很快捷、很方便,学习起来也比较容易
[size=large][b]xfire发布pojo webservice有2种方式:[/b][/size]
[b]1.通过WEB-INF\classes\META-INF\xfire\services.xml文件发布pojo[/b]
[color=orange]WEB-INF\classes\META-INF\xfire\services.xml[/color]
[color=orange]WEB-INF\web.xml[/color]
这种方式比较繁琐,如果使用ant或maven来操作也是比较简单的
[b]2.通过spring配置发布pojo[/b]
[color=orange]WEB-INF\applicationContext.xml[/color]
[color=orange]WEB-INF\xfire-servlet.xml[/color]
[color=orange]WEB-INF\web.xml[/color]
这种方式直接整合在项目中,直接打包为web项目就能发布成功,无需生成xfire的标准服务结构
XFire 目前最新的版本是 1.2.6,目前支持的特性主要包括:
[list]
[*]支持将 Web 服务绑定到 POJO、XMLBeans、JAXB1.1、JAXB2.0 和 Castor;
[*]支持基于 HTTP、JMS、XMPP 等多种协议访问 Web 服务;
[*]支持多种 Web 服务业界重要标准如 SOAP、WSDL、Web 服务寻址(WS-Addressing)、Web 服务安全(WS-Security)等;
[*]支持 JSR181,可以通过 JDK5 配置 Web 服务;
[*]高性能的 SOAP 实现;
[*]服务器端、客户端代码辅助生成;
[*]对 Spring、Pico、Plexus 等项目的支持等。
[/list]
使用过axis2,对比发现xfire真的很快捷、很方便,学习起来也比较容易
[size=large][b]xfire发布pojo webservice有2种方式:[/b][/size]
[b]1.通过WEB-INF\classes\META-INF\xfire\services.xml文件发布pojo[/b]
[color=orange]WEB-INF\classes\META-INF\xfire\services.xml[/color]
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>HelloWorldService</name>
<namespace>http://vivianj.org/HelloWorldService</namespace>
<serviceClass>
org.vivianj.xfire.pojo.HelloWorldService
</serviceClass>
<implementationClass>
org.vivianj.xfire.pojo.HelloWorldServiceImpl
</implementationClass>
</service>
</beans>
[color=orange]WEB-INF\web.xml[/color]
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<display-name>XFire Service</display-name>
<description>
基于XFire框架发布Web服务
</description>
<servlet>
<servlet-name>XFireServlet</servlet-name>
<display-name>XFire Servlet</display-name>
<servlet-class>
org.codehaus.xfire.transport.http.XFireConfigurableServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>
这种方式比较繁琐,如果使用ant或maven来操作也是比较简单的
[b]2.通过spring配置发布pojo[/b]
[color=orange]WEB-INF\applicationContext.xml[/color]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<import resource="classpath:org/codehaus/xfire/spring/xfire.xml"/>
<bean id="echoBean" class="org.codehaus.xfire.spring.example.EchoImpl"/>
<bean id="helloWorldService" class="org.vivianj.xfire.pojo.HelloWorldServiceImpl"/>
</beans>
[color=orange]WEB-INF\xfire-servlet.xml[/color]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- START SNIPPET: xfire -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>
<entry key="/EchoService">
<ref bean="echo" />
</entry>
<entry key="/HelloWorldService">
<ref bean="helloWorld" />
</entry>
</map>
</property>
</bean>
<!--
Declare a parent bean with all properties common to both services
-->
<bean id="echo" class="org.codehaus.xfire.spring.remoting.XFireExporter">
<property name="serviceFactory">
<ref bean="xfire.serviceFactory" />
</property>
<property name="xfire">
<ref bean="xfire" />
</property>
<property name="serviceBean">
<ref bean="echoBean" />
</property>
<property name="serviceClass">
<value>org.codehaus.xfire.spring.example.Echo</value>
</property>
</bean>
<bean id="helloWorld" class="org.codehaus.xfire.spring.remoting.XFireExporter">
<property name="serviceFactory">
<ref bean="xfire.serviceFactory" />
</property>
<property name="xfire">
<ref bean="xfire" />
</property>
<property name="serviceBean">
<ref bean="helloWorldService" />
</property>
<property name="serviceClass">
<value>org.vivianj.xfire.pojo.HelloWorldService</value>
</property>
</bean>
<!-- END SNIPPET: xfire -->
</beans>
[color=orange]WEB-INF\web.xml[/color]
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<!-- START SNIPPET: xfire -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>xfire</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xfire</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<!-- END SNIPPET: xfire -->
</web-app>
这种方式直接整合在项目中,直接打包为web项目就能发布成功,无需生成xfire的标准服务结构