当前位置: 代码迷 >> Web前端 >> 初识XFire公布pojo webservice
  详细解决方案

初识XFire公布pojo webservice

热度:121   发布时间:2012-09-22 21:54:54.0
初识XFire发布pojo webservice
XFire 是 codeHaus 组织提供的一个开源框架,它构建了 POJO 和 SOA 之间的桥梁,主要特性就是支持将 POJO 通过非常简单的方式发布成 Web 服务,这种处理方式不仅充分发挥了 POJO 的作用,简化了 Java 应用转化为 Web 服务的步骤和过程,也直接降低了 SOA 的实现难度,为企业转向 SOA 架构提供了一种简单可行的方式。

XFire 目前最新的版本是 1.2.6,目前支持的特性主要包括:
  • 支持将 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 等项目的支持等。

使用过axis2,对比发现xfire真的很快捷、很方便,学习起来也比较容易

xfire发布pojo webservice有2种方式:

1.通过WEB-INF\classes\META-INF\xfire\services.xml文件发布pojo

WEB-INF\classes\META-INF\xfire\services.xml
<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>


WEB-INF\web.xml
<?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来操作也是比较简单的

2.通过spring配置发布pojo

WEB-INF\applicationContext.xml
<?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>

WEB-INF\xfire-servlet.xml
<?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>

WEB-INF\web.xml
<?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的标准服务结构
  相关解决方案