随笔-1  评论-0  文章-0  trackbacks-0
  2009年7月30日
   开发工具是myeclipse7.1,服务器是tomcat6.0,,用的xfire1.2.6和Spring 2.0,虽然MyEclipse自带了开发xfire的插件,但为了不依赖开发工具和引用更新的包,所以建议手动创建。
     首先需要了解一下spring 、xfire 和webservice的概念:

Spring是目前最流行的JavaEE Framework,但是使用SpringSpring-WS开发WebService却十分繁琐。XFire是一个简化WebService开发的开源项目,通过SpringXFire的结合可以大大简化基于Spring Framework的应用中的WebService开发。

XFire是完全基于流数据处理进行工作的系统,这意味着XFire不是将整个SOAP文档缓存在内存中,而是以管道的方式接收SOAP流数据。这种工作方式的转变带来了可观的性能回报,同时节省了内存的占用。

对于习惯了AxisGLUE等这些基于DOM处理模型Web Service框架的开发者来说,需要一些时间来适应这种转变。

XFire从管道中接收一个SOAP请求到返回一个SOAP响应,会经历一系列的阶段。在管道调用的任何一个阶段,XFire都可以添加一些额外的 Handler,在对消息进行加工处理后再传入到下一个阶段中。图1展示了XFire管道从接收SOAP请求到返回SOAP响应所经历的所有阶段:

1 XFire Web Service请求和响应的过程

SOAP请求消息对Web Service发起真正调用之前,分别会经过传输(Transport)、预转发(PreDispatch)、转发(Dispatch)、策略实施Policy)、用户信息处理(User)、预调用(PreInvoke)、服务调用(Service Invocation)等阶段。当,Web Service调用后,XFire生成响应SOAP消息并通过管道发送给客户端请求者,这一过程会先后经历调用后(PostInvoke)、用户信息处理User)、策略实施(Policy)、传输(Transport)这四个阶段。每一个阶段都是一个可控点,通过编写并注册一些相应的Handler可以实施一些额外处理逻辑,如审计、SOAP消息加密、签名、压缩等。

POJO Bean导出为Web Service

通过XFireSpring提供的服务导出器可以轻松地将POJO导出为标准的Web Service,此外,XFire还允许我们使用JSR 181注解对POJO进行标注,无需使用XML配置就可以导出为Web Service,各种复杂的转换细节被巧妙地隐藏在XFire之中。


XFire
可以很好的集成到Spring中,Spring的代码已经做了这方面的集成。

1、将xfire与spring的JAR包放到web 项目的classPath,(注意:把xfire自带的Spring1.2.6删掉,它会和spring2.0中的spring.jar产生冲突)
2、修改web.xml,使其支持Spring 与xfire,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
 xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:org/codehaus/xfire/spring/xfire.xml,
  /WEB-INF/applicationContext-beans.xml
  </param-value>
 </context-param>
 
 <servlet>
  <servlet-name>xfire</servlet-name>
  <servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class>
 </servlet>
 
 <servlet-mapping>
  <servlet-name>xfire</servlet-name>
  <url-pattern>/services/*</url-pattern>
 </servlet-mapping>
 
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
 
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>


3、配置(spring)applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>


<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:aop="http://www.springframework.org/schema/aop"
      xmlns:tx="http://www.springframework.org/schema/tx"
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
 
 <bean id="mathService" class="com.zjh.manager.MathServiceImpl" />
 
 <bean id="mathExporters" class="org.codehaus.xfire.spring.remoting.XFireExporter">
  <property name="serviceFactory" ref="xfire.serviceFactory" />
  <property name="xfire" ref="xfire" />
  <property name="serviceBean" ref="mathService" />
  <property name="serviceClass" value="com.zjh.manager.MathService" />
  <property name="name" value="mathWebService" />
 </bean>
 
</beans>


4、创建一个接口和一个实现类

package com.zjh.manager;

public interface MathService {

 public String add(int a,int b);
}

package com.zjh.manager;

public class MathServiceImpl implements MathService {

 public String add(int a, int b) {
      long result = a+b;
  return "计算的结果:"  + result;
 }

}


这样便生成一个web Service,可以通过域名 http://localhost:8080/testwebservice_server/services/mathWebService?wsdl     来访问,并编写客户端代码了

posted @ 2009-07-30 14:24 Flying Kite 阅读(2044) | 评论 (0)编辑 收藏
仅列出标题