WebSerice学习笔记2——XFire基础

1.XFire是codehaus推出的下一代的java SOAP框架,通过提供的简单的API和支持标准协议,可以方面地开发webservice程序。XFire最大的特点就是支持将POJO通过非常简单的方式发布为WebService,同时还拥有很高的性能。

2.XFire将 POJO 发布成 Web 服务的基本步骤:

(1).创建 Web 服务接口,声明该 Web 服务对外暴露的接口;

(2).创建 Web 服务实现类,为 Web 服务接口提供实现;

(3).修改 XFire 框架的服务发布文件 ---- services.xml,将 POJO 发布成 Web 服务。

3.简单的XFire开发过程:

(1).在web.xml中加入如下配置:

[xhtml]  view plain copy
  1. <servlet>  
  2.        <servlet-name>XFireServlet</servlet-name>  
  3.        <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>  
  4. </servlet>  
  5. <servlet-mapping>  
  6.        <servlet-name>XFireServlet</servlet-name>  
  7.        <url-pattern>/services/*</url-pattern>  
  8. </servlet-mapping>  
 

(2).创建services.xml文件,加入如下配置:

[xhtml]  view plain copy
  1. <? xml version=”1.0” encoding=”UTF-8” ?>  
  2. <beans>  
  3.        <service xmlns=”http://xfire.codehaus.org/config/1.0”>  
  4.               <name>webservice名</name>  
  5.               <namespace>http://包名的逆序/服务类名</namespace>  
  6.               <serviceClass>提供服务的接口全路径</serviceClass>  
  7.               <implementationClass>服务实现类全路径</implementationClass>  
  8.               <scope>服务存活范围</scope>  
  9.        </service>  
  10.        ……  
  11. </beans>  
 

4.XFire配置文件元素:

(1).service:service 标签和它所包含的 xml 内容为发布成 Web 服务的 POJO 提供完整的描述。

(2).name:Web 服务被发布时所采用的唯一名称。

(3).namespace:Web 服务发布时所使用的命名空间。

(4).serviceClass:Web 服务接口类的全名,包括包名和类名。

(5).implemetationClass:Web 服务实现类的全名,包括包名和类名。

5.XFire传递复杂对象:

分两种情况:

(1).客户端创建一个实现Remote接口的类,方法名、参数类型和返回值类型均与WebService服务相同,则传递自定义的复杂对象参数和返回值时不用特殊配置和处理。

注意:只适用于在自定义对象中传递List、Map、数组等的复杂对象。

(2).服务器端实现一个接口(非Remote接口),客户端通过该接口来调用WebService对象,则必须在服务器端接口同一目录下建立一个名为“服务端接口名.aegis.xml”文件,添加如下配置:

[xhtml]  view plain copy
  1. <? xml version=”1.0” encoding=”UTF-8” ?>  
  2. <mappings>  
  3.        <mapping>  
  4.               <method name=”接口中的方法名”>  
  5.                      <!--配置方法参数类型,索引从0开始-->  
  6.                      <parameter index=”0” componentType=”参数类型全路径(如:java.lang.String)”/>  
  7.                      ……  
  8.                      <return-Type componentType=”返回值类型全路径”/>  
  9.               </method>  
  10.               ……  
  11.        </mapping>  
  12. </mappings>  
 

注意:适用于Map等传递自定义对象这种情况。

6.XFire的Handler:

一个Handler可以看成是XFire的一个加工套件,XFire通过它们定义SOAP发送和接收之前的各种加工处理逻辑。如Handler可以对SOAP体的内容进行加工处理,或者SOAP头进行处理。

(1).编写自定义Handler:

继承AbstractHandler类。

(2).服务器配置Handler:

在services.xml文件中加入如下配置:

在<scope>元素标签之下加入:

[xhtml]  view plain copy
  1. <inHandlers>  
  2.        <handler handlerClass=”自定义Handler的全路径”/>  
  3.        ……  
  4. </inHandlers>  
  5. <outHandlers>  
  6.        <handler handlerClass=”自定义Handler的全路径”/>  
  7.        ……  
  8. </outHandlers>  
 

(3).客户端Handler的配置:

[java]  view plain copy
  1. Client client = Client.getInstance(客户端得到的服务对象);  
  2. client.addInHandler(new 自定义Handler());  
  3. client.addOutHandler(new 自定义Handler());  
 

7.文件上传处理:

(1).将文件用DataHandler包装后传递到服务器端。

(2).服务器端根据得到的DataHandler对象.getInputStream()得到文件输入流,将其写到服务器端。

(3).对SOAP消息进行MTOM编码。

[java]  view plain copy
  1. org.codehaus.xfire.client.Client client = ((XFireProxy)Proxy.getInVocationHandler(服务对象)).getClient();  
  2. client.setProperty(SoapConstants.MTOM_ENABLED, “true”);  
 

(4).对输入输出流指定UTF-8字符集:

[java]  view plain copy
  1. InputStreamReader input = new InputStreamReader(handler.getInputSream(), “UTF-8”);  
  2. OutputStreamWriter writer output = new OutputStreamWriter(new FileOutputStream(file), “UTF-8”);  
 

(5).在对应的services.xml文件中,上传文件的Service必须添加如下的Property:

[xhtml]  view plain copy
  1. <properties>  
  2.        <property key=”mtom-enabled”>true</property>  
  3. </properties>  
 

8.XFire与Spring的集成(服务器端使用XFire导出器方式):

(1).在web.xml中指定XFire和Spring的配置文件如下:

[xhtml]  view plain copy
  1. <context-param>  
  2.        <param-name>classpath:org/codehaus/xfire/spring/xfire.xml,  
  3.                             /WEB-INF/applicationContext.xml</param-name>  
  4. </context-param>  
 

(2).在Spring配置文件中导入XFire配置文件,配置要发布的服务:

[xhtml]  view plain copy
  1. <import resource=”classpath:org/codehaus/xfire/spring/xfire.xml”/>  
  2. <bean id=”服务id” parent=”baseWebService”>  
  3.        <property name=”name” value=”服务名”/>  
  4.        <property name=”serviceClass” value=”服务接口全路径”/>  
  5.        <property name=”serviceBean” value=”服务实现类”/>  
  6. </bean>  
 

(3).在Spring中配置XFire导出器:

[xhtml]  view plain copy
  1. <bean id=” baseWebService” class=”org.codehaus.xfire.spring.remoting.XFireExporter” lazy-init=”false” abstract=”true”>  
  2.        <property name=”serviceFactory” ref=”xfire serviceFactory”/>  
  3.        <property name=”xfire” ref=”xfire”/>  
  4. </bean>  
 

(4).客户端Spring配置:

[xhtml]  view plain copy
  1. <bean id=”客户端服务名” class=”org.codehaus.xfire.spring.remoting.XFireClientFactoryBean”>  
  2.        <property name=”serviceClass” value=”服务接口全路径”/>  
  3.        <property name=”wsdlDocument” value=”服务的WSDL地址”/>  
  4. </bean>  
 

在客户端就可以像使用普通java对象一样使用被spring管理起来的web服务了。

9.XFire与Spring的集成(服务器端不使用XFire导出器方式):

和服务器端使用XFire导出器类似,不同之处在于配置发布的服务:

[xhtml]  view plain copy
  1. <bean id=”服务id” class=”服务名”>  
  2.        <property name=”name” value=”服务名”/>  
  3.        <property name=”namespace” value=”服务命名空间”/>  
  4.        <property name=”serviceClass” value=”服务接口全路径”/>  
  5.        <property name=”serviceBean” value/ref=”服务实现类”/>  
  6. </bean>  
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值