`
yaodi0818
  • 浏览: 135168 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用XFire+Spring构建WebService

阅读更多
XFire是完全基于流数据处理进行工作的,这意味着XFire不是将整个SOAP文档缓存在内存中,而是以管道的方式接收SOAP流数据。这种工作方式的转变带来了可观的性能回报,同时节省了内存的占用
XFire从管道中接收一个SOAP请求到返回一个SOAP响应,在管道调用的任何一个阶段,XFire都可以添加一些额外的Handler,在对消息进行加工处理后再传入到下一个阶段中
在SOAP请求消息对WebService发起真正调用之前,分别会经过传输、预转发、转发、策略实施、用户信息处理、预调用、服务调用等阶段

下面实例一个XFire于Spring集成的helloWorld的简单实例

(1)、在MyEclipse中新建Web工程,名为webservice_spring
为项目增加XFire支持的类库,把xfire-1.2.6里lib所有jar和xfire-all-1.2.6.jar拷贝到WEB-INF/lib下
因为XFire集成Spring,所以不需要加入spring类库支持

(2)、WEB-INF下建立两个Spring配置文件,一个为applicationContext.xml用来定义本工程的bean,一个为xfire-servlet.xml用来配置XFire的相关bean

(3)、web.xml的配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- Spring配置 -->
    <context-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>/WEB-INF/applicationContext.xml,/WEB-INF/xfire-servlet.xml</param-value>
    </context-param>
    <listener>
       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener> 
       <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
    </listener>
<!-- XFire配置 -->
    <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>*.ws</url-pattern>
    </servlet-mapping>
    <servlet>
<!-- 配合Spring容器中XFire一起工作的Servlet-->
       <servlet-name>XFireServlet</servlet-name>
       <servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class>
    </servlet>
    <servlet-mapping>
       <servlet-name>XFireServlet</servlet-name>
       <url-pattern>/services/*</url-pattern>
    </servlet-mapping>
</web-app>


(4)、WebService的接口类HelloWorld.java和对应的实现类HelloWorldImpl.java
package webservice;
public interface HelloWorld {	
    String sayHelloWorld(String name);
}

package webservice;
public class HelloWorldImpl implements HelloWorld {
	@Override
	public String sayHelloWorld(String name) {
		String helloWorld = "hello," + name;
	    return helloWorld;
	}
}


(5)、Spring配置文件
applicationContext.xml文件中配置对应的bean
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean id="HelloWorldBean" class="webservice.HelloWorldImpl"/>
</beans>

XFire为Spring提供了方便易用的导出器XFireExporter,借助该导出器的支持,我们可以在Spring容器中将一个POJO导出为WebService
HelloWorld是业务服务类,在此拥有一个sayHelloWorld的方法,我们希望将此方法开放为WebService
在实际应用中,如果某个类具有众多的方法,而其中的某些方法不需要开放为WebService的情况下,可以定义一个窄接口,该接口中只需定义那些开放为WebService的业务方法

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>
    <!-- 引入XFire预配置信息 -->
    <import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
    <!-- 定义访问的url -->
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
       <property name="urlMap">             
           <map>                 
              <entry key="/HelloWorldService.ws">                  
                  <ref bean="HelloWorldService" />                 
              </entry>             
           </map>         
       </property>     
    </bean>     
    <!-- 使用XFire导出器 -->
    <bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" lazy-init="false" abstract="true">
       <!-- 引用xfire.xml中定义的工厂 -->
       <property name="serviceFactory" ref="xfire.serviceFactory" />
       <!-- 引用xfire.xml中的xfire实例 -->
       <property name="xfire" ref="xfire" />
    </bean>
    <bean id="HelloWorldService" parent="baseWebService">
       <!-- 业务服务bean -->
       <property name="serviceBean" ref="HelloWorldBean" />
       <!-- 业务服务bean的窄接口类 -->
       <property name="serviceClass" value="webservice.HelloWorld" />
    </bean>
</beans>

在该配置文件中引入了xfire.xml这个Spring配置文件,它是在XFire核心JAR包中拥有一个预定义的Spring配置文件,它定义了XFire在Spring中必须用到的一些Bean和资源,需要引入这个预定义的配置文件从该配置文件中可以看出,通过XFireExporter将业务类导出为WebService,对于任何导出器都需要引入XFire环境,即serviceFactory和xfire,这是标准的配置
ServiceFactory是XFire的核心类,它可以将一个POJO生成为一个WebService

(6)、在上一步操作完成之后,这个简单的WebService已经编写完毕,下面来看看效果吧!!!
在浏览器中输入地址:http://localhost:8080/webservice_spring/HelloWorldService.ws?wsdl
可以看到HelloWorldService对应的WSDL信息,只要拿到这个WSDL就可以开发相应的客户端调用程序了


(7)、根据服务地址创建客户端调用程序
在src目录下建立客户端调用的Spring配置文件client.xml。在client.xml配置文件中定义了一个testWebService的bean,该bean访问wsdlDocumentUrl为http://localhost:8080/webservice_spring/HelloWorldService.ws?wsdl的WSDL
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean id="testWebService" class="org.codehaus.xfire.spring.remoting.XFireClientFactoryBean">
       <property name="serviceClass">          
   <value>webservice.HelloWorld</value>       
       </property>      
        <property name="wsdlDocumentUrl">         
<value>http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl</value>       
        </property>      
     </bean>
</beans>


(8)、在WebServiceClientTest.java文件中获得HelloWorld,并调用它的sayHelloWorld方法来完成测试
package webservice;
import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;
import org.springframework.context.ApplicationContext;
public class WebServiceClientTest { 
    HelloWorld helloWorld = null;
    public static void main(String[] args) {
       WebServiceClientTest test = new WebServiceClientTest();
       test.testClient();
    } 
    public void testClient() {
       ApplicationContext ctx = new ClassPathXmlApplicationContext("client.xml");
       helloWorld = (HelloWorld) ctx.getBean("testWebService");
       System.out.println(helloWorld.sayHelloWorld("北京"));
    }
}


在启动webservice_spring工程的情况下,运行WebServiceClientTest类,可看到控制台包含如下信息:hello,北京
由此可看出调用WebService成功
分享到:
评论
1 楼 alert_mm 2009-04-15  
  很好 很详细 正是我需要的

相关推荐

    使用xfire+spring构建webservice

    NULL 博文链接:https://cdxs2.iteye.com/blog/1974525

    ssh及XFire+Spring构建WebService

    关于ssh demo 演示验证码及图片流显示在界面中,XFire+Spring构建WebService整合

    使用XFire+Spring构建Web+Service

    2 使用Stax解释XML,性能有了质的提高。XFire采用Woodstox 作Stax实现; 3 容易上手,可以方便快速地从pojo发布服务; 4 支持Spring、Pico、Plexus、Loom等容器; 5 灵活的Binding机制,包括默认的Aegis,...

    xfire+spring+maven构建webservice服务器和客户端

    NULL 博文链接:https://jishiweili.iteye.com/blog/2087930

    Web Service框架xfire与spring集成开发流程

    XFire 是与Axis 2并列的新一代Web Service框架,通过提供简单的API支持Web Service各项标准协议,帮助你方便快速地...并且因为XFire为Spring提供的支持,使得我们可以很容易在Spring中使用XFire构建Web Service应用。

    webservice例子

    在Spring中使用XFire构建Web Service应用.例子不错,值得下载看看。

    WebService with Apache CXF

    WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。目前它仍只是 Apache 的一个孵化项目。 Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 ...

    CXF WEBSERVICE入门,非常详细实用

    WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。Apache CXF已经是一个正式的Apache顶级项目。 Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ...

    WebSer之CXF框架例子.docx

    Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种...本资源以项目工程实例为例子,讲解如何使用CXF开发WebService服务。

Global site tag (gtag.js) - Google Analytics