Xfire Web Services + Spring2.5的整合

Xfire Web Services + Spring2.5的整合

1.需要的jar包括:xfire的核心jar包,Spring的jar包(Spring-webmvc.jar必须需要)。

2.以例子作介绍:

3.向Spring的项目工程中加入xfire webService的jar包

Web.xml文件的配置:

<!-- begin 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>
  <!-- 在这个URI下开放Web Service服务 -->
  <url-pattern>/service/*</url-pattern>
 </servlet-mapping>
 <!-- end XFire 配置 -->

创建xfire-servlet.xml文件:根据自己工程创建的文件将其加载web.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.5.xsd   
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd   
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

 <import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
 <!-- 定义访问的url -->
 <bean
  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="urlMap">
   <map>
    <entry key="/webservices.ws">
     <ref bean="webservices" />
    </entry>
   </map>
  </property>
 </bean>

 <bean id="orderWebServiceImpl"
  class="com.centfor.zmd.xfire.impl.OrderWebServiceImpl">
  <property name="cfCsOrderDetailService"
   ref="cfCsOrderDetailService" />
 </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="webservices" parent="baseWebService">
  <!-- 业务服务bean -->
  <property name="serviceBean" ref="orderWebServiceImpl" />
  <!-- 业务服务bean的窄接口类 -->
  <property name="serviceClass"
   value="com.centfor.zmd.xfire.IOrderWebService">
  </property>
 </bean>


</beans>

 

4.一下是实现类

Java接口类:

package com.centfor.zmd.xfire;


public interface IOrderWebService {
 public String aa(String a);

 public boolean OrderSave(String merchcode, String orderid,
   String ordercount, String price);
}

 

Java接口实现类:

package com.centfor.zmd.xfire.impl;

import org.apache.commons.lang.math.NumberUtils;

import com.centfor.zmd.business.dto.bi.cigarette.CfBiCigaretteDto;
import com.centfor.zmd.business.dto.cs.order.CfCsOrderDetailDto;
import com.centfor.zmd.business.dto.cs.order.CfCsOrderMainDto;
import com.centfor.zmd.business.services.cs.order.ICfCsOrderDetailService;
import com.centfor.zmd.web.core.BaseCrudActionSupport;
import com.centfor.zmd.xfire.IOrderWebService;

/**
 *
 * 类说明
 * 
 */
public class OrderWebServiceImpl extends
  BaseCrudActionSupport<CfCsOrderDetailDto> implements IOrderWebService {

 /**
  *
  */
 private static final long serialVersionUID = 1L;
 private ICfCsOrderDetailService cfCsOrderDetailService;

 public void setCfCsOrderDetailService(
   ICfCsOrderDetailService cfCsOrderDetailService) {
  this.cfCsOrderDetailService = cfCsOrderDetailService;
  this.baseService = cfCsOrderDetailService;
 }

 @Override
 public boolean OrderSave(String merchcode, String orderid,
   String ordercount, String price) {

  CfCsOrderDetailDto cfCsOrderDetailDto = new CfCsOrderDetailDto();
  CfBiCigaretteDto cfBiCigaretteDto = new CfBiCigaretteDto();
  cfBiCigaretteDto.setMerchcode(merchcode);
  CfCsOrderMainDto cfCsOrderMainDto = new CfCsOrderMainDto();
  cfCsOrderMainDto.setOrderid(orderid);
  // cfCsOrderDetailDto.setId("31");
  cfCsOrderDetailDto.setCfBiCigaretteDto(cfBiCigaretteDto);
  cfCsOrderDetailDto.setCfCsOrderMain(cfCsOrderMainDto);
  cfCsOrderDetailDto.setOrdercount(NumberUtils.toInt(ordercount));
  cfCsOrderDetailDto.setPrice(NumberUtils.toDouble(price));

  boolean b = false;
  b = cfCsOrderDetailService.save(cfCsOrderDetailDto);
  return b;
 }

 @Override
 public String aa(String a) {
  if (a != null) {
   return "yes";
  }
  return "no";
 }
}

输入http://localhost:8080/项目名/service/IOrderWebServices?wsdl;将得到的文件保存为.wsdl格式的文档,并将其放到lib目录下。运行下面的测试类:

Java接口测试类:

package com.centfor.zmd.xfire;

import java.lang.reflect.Proxy;

import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.client.XFireProxy;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import org.codehaus.xfire.transport.http.CommonsHttpMessageSender;

import com.centfor.zmd.business.dto.bi.cigarette.CfBiCigaretteDto;
import com.centfor.zmd.business.dto.cs.order.CfCsOrderDetailDto;
import com.centfor.zmd.business.dto.cs.order.CfCsOrderMainDto;

/**
 *
 * 类说明
 * 
 */
public class RemoteXfire {
 public boolean OrderSave() {
  boolean b = false;
  String serviceURL = "
http://localhost:8080/zmd/service/IOrderWebService"; // webservice测试地址
  System.out.println("serviceURL=" + serviceURL);
  // 创建service对象
  Service serviceModel = new ObjectServiceFactory().create(
    IOrderWebService.class, "webservices",
    "
http://10.0.111.137:8080/zmd/service", null);
  XFireProxyFactory serviceFactory = new XFireProxyFactory();

  try {
   // 获取服务对象
   IOrderWebService service = (IOrderWebService) serviceFactory
     .create(serviceModel, serviceURL);
   // 获取客户端代理
   Client client = ((XFireProxy) Proxy.getInvocationHandler(service))
     .getClient();
   // 同时启动response和request压缩
   client.setProperty(CommonsHttpMessageSender.GZIP_ENABLED,
     Boolean.FALSE);
   // 忽略超时
   client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, "0");

   CfCsOrderDetailDto cfCsOrderDetailDto = new CfCsOrderDetailDto();

   CfBiCigaretteDto cfBiCigaretteDto = new CfBiCigaretteDto();
   cfBiCigaretteDto.setMerchcode("31010501");
   CfCsOrderMainDto cfCsOrderMainDto = new CfCsOrderMainDto();
   cfCsOrderMainDto.setOrderid("20090407013");
   cfCsOrderDetailDto.setCfCsOrderMain(cfCsOrderMainDto);
   cfCsOrderDetailDto.setCfBiCigaretteDto(cfBiCigaretteDto);
   // b = service.OrderSave(cfCsOrderDetailDto);
   System.out.println(b);
  } catch (Exception e) {
   System.out.println(e);
   e.printStackTrace();
  }
  return b;
 }

 /**
  * 测试接口
  *
  * @param args
  */
 public static void main(String[] args) {
  RemoteXfire obj = new RemoteXfire();
  obj.OrderSave();
 }

}

posted @ 2010-10-29 11:23  Jolly-zhang  阅读(492)  评论(0编辑  收藏  举报