XFire使用详解

XFire使用详解

最近一直使用XFire做WebServices方式使用,总结一些相关经验,本文以具体例子进行XFire开发过程分析

1、首先定义一个Interface,具体包含简单类型传值、返回自定义对象、返回集合三个接口方法

import java.util.List;

import com.gresoft.commons.core.exception.BusinessException;
import com.gresoft.sanitation.model.dictionary.Hospital;

public interface WebServicesInterface {
 public String savePutXml(int i,String typecode) throws BusinessException;
 public Hospital getList(int p);
 public List getAll();
}


2、实现上述接口,实现业务逻辑

 

 

 

public class HospitalService extends HibernateEntityDao<Hospital> implements
  WebServicesInterface {

 private HospitalManager hospitalManager;

 public void setHospitalManager(HospitalManager hospitalManager) {
  this.hospitalManager = hospitalManager;
 }

 public String savePutXml(int o, String typecode) throws BusinessException {
  // TODO Auto-generated method stub
  Hospital h = new Hospital(o, typecode);
  super.save(h);
  System.out.println("ccccc");
  return "gggg";
 }

 public Hospital getList(int p) {
  // TODO Auto-generated method stub

  Hospital h = hospitalManager.get(p);
  System.out.println("name:" + h.getHospitalName());
  return hospitalManager.get(p);

 }

 @SuppressWarnings("unchecked")
 public List getAll() {
  List list = hospitalManager.getAll();
  System.out.println("size:" + list.size());
  return hospitalManager.getAll();
 }

}

定义自定义对象Hospital

 

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

/**
 * @author wuxj:
 * @version 创建时间:2007-10-15 上午11:31:39
 */
@Entity
@Table(name = "HOSPITAL", schema = "DB2ADMIN")
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
public class Hospital implements java.io.Serializable {
 private int hospitalId;

 private String hospitalName;

 public Hospital() {

 }

 public Hospital(int hospitalId) {
  this.hospitalId = hospitalId;
 }

 public Hospital(int hospitalId, String hospitalName) {
  this.hospitalId = hospitalId;
  this.hospitalName = hospitalName;
 }

 @Id
 @Column(name = "HOSPITAL_ID", unique = true, nullable = false)
 public int getHospitalId() {
  return hospitalId;
 }

 public void setHospitalId(int hospitalId) {
  this.hospitalId = hospitalId;
 }

 @Column(name = "HOSPITAL_NAME", nullable = false, length = 20)
 public String getHospitalName() {
  return hospitalName;
 }

 public void setHospitalName(String hospitalName) {
  this.hospitalName = hospitalName;
 }

}


3、编写XFire的描述文件

描述文件为WebServicesInterface.aegis.xml,一定要与Interface接口类在同一个目录,否则会出错误
只需要描述返回是集合的描述,getAll方法返回是List集合,需要对集合中的元素进行定义,在这里是Hospital对象

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

  <method name="getAll">
   <return-type
    componentType="com.gresoft.sanitation.model.dictionary.Hospital" />
  </method>
    <property name="hibernateGenericDao" ignore="true" />

  <!-- 在HospitalService中这个文件可以不用,主要是为了定义返回为对象或集合 -->
  <!--
  <method name="savePutXml">
   <parameter index="1" componentType="java.lang.String" />
  </method>
  -->
 </mapping>
</mappings>


4、编写xfire-servlet.xml文件

xfire是跟spring结合一起使用的,所以用到了spring相关内容。
注意:位置一定要在WEB-INF目录下

key="/echo"中的echo为你在客户端访问的地址,具体看client内容

<?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="/echo" value-ref="echo" />
    </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="xfire.serviceFactory" />
  <property name="xfire" ref="xfire" />
  <property name="serviceBean" ref="hospitalService" />
  <property name="serviceInterface"
   value="com.gresoft.sanitation.service.WebServicesInterface" />
   </bean>

 <!-- END SNIPPET: xfire -->
</beans>


5、编写客户端测试

 

import java.net.MalformedURLException;

import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;

 

public class HospitalServiceClient {
 public static void main(String args[]) {
  Service srvcModel = new ObjectServiceFactory()
    .create(WebServicesInterface.class);
  XFireProxyFactory factory = new XFireProxyFactory(XFireFactory
    .newInstance().getXFire());
  // XFireProxyFactory factory = new XFireProxyFactory(getXFire());

  String helloWorldURL = "http://localhost:8080/sanitation/service/echo";
  // String helloWorldURL ="xfire.local://echo";
  try {
   WebServicesInterface srvc = (WebServicesInterface) factory.create(
     srvcModel, helloWorldURL);

   Hospital h = new Hospital();
   h.setHospitalId(11);
   h.setHospitalName("测试");
   // System.out.print(srvc.sayHello("wuxj")+"\n");
   // RegisterApply apply = new RegisterApply();
   // apply.setOperateDate("20071221");
   // apply.setRegisterId("1000");

   // srvc.savePutXml(apply);

   System.out.println(srvc.savePutXml(11, "测试"));
   srvc.getList(1);
   srvc.getAll();

   // System.out.print(((MsdpUser)srvc.getUser().get(0)).getUid());
  } catch (MalformedURLException e) {
   System.out.println("wrong");
   e.printStackTrace();
  }

 }

}


6、定义web.xml的xfire

红色字体一定要加上,而且是固定格式,这是xfire需要加载的文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"
   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath*:spring/*.xml, classpath:org/codehaus/xfire/spring/xfire.xml</param-value>
 </context-param>
<!--Spring ApplicationContext 载入 -->
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>

<!-- XFire WebServices的入口 -->
 <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>/service/*</url-pattern>
 </servlet-mapping>

</web-app>

你可能感兴趣的:(XFire使用详解)