Apache xml-rpc与spring的整合

在项目中使用了Apache xml-rpc,遇到了一个麻烦的问题。spring没有提供对xml-rpc的支持,在处理webservice请求的时候,没有办法使用spring容器中管理的各种各样的bean对象。显然,这是不能接受的。

使用Apache xml-rpc,一般只需要在web.xml中定义一个servlet (XmlRpcServlet), 再实现用于处理webservice请求的组件类就可以了。

比如定义一个Servlet:

  1. <servlet>  
  2.     <servlet-name>XmlRpcServlet</servlet-name>  
  3.     <servlet-class>org.apache.xmlrpc.webserver.XmlRpcServlet</servlet-class>  
  4.     <init-param>  
  5.         <param-name>enabledForExtensions</param-name>  
  6.         <param-value>true</param-value>  
  7.     </init-param>  
  8. </servlet>  

实现处理webservice请求的组件:

  1. public class Calculator   
  2. {   
  3.     public int add(int i1, int i2)   
  4.     {   
  5.         return i1 + i2;   
  6.     }   
  7. }  

除此之外,还需要定义一个property文件,告诉xml-rpc,在请求来了以后,用哪个组件去处理。这个property文件必须命名为XmlRpcServlet.properties,并且必须放到org.apache.xmlrpc.webserver包下面。

Properties代码

Calculator=com.oyl.Calculator  

那么,怎么才能在xml-rpc中使用spring管理的bean去处理webservice的请求呢?

首先,要实现一个接口org.apache.xmlrpc.server.RequestProcessorFactoryFactory,这个接口类定义了如何创建对象去处理webservice请求:

  1. public class CustomRequestProcessorFactoryFactory implements  
  2.         RequestProcessorFactoryFactory   
  3. {   
  4.     private final RequestProcessorFactory factory = new CustomRequestProcessorFactory();   
  5.     private final CustomWebServiceHandler service;   
  6.   
  7.   
  8.     public CustomRequestProcessorFactoryFactory(CustomWebServiceHandler service)   
  9.     {   
  10.         this.service = service;   
  11.     }   
  12.   
  13.   
  14.     @Override  
  15.     public RequestProcessorFactory getRequestProcessorFactory(Class arg0)   
  16.             throws XmlRpcException   
  17.     {   
  18.         return factory;   
  19.     }   
  20.   
  21.     private class CustomRequestProcessorFactory implements  
  22.             RequestProcessorFactory   
  23.     {   
  24.   
  25.         @Override  
  26.         public Object getRequestProcessor(XmlRpcRequest arg0)   
  27.                 throws XmlRpcException   
  28.         {   
  29.             return service;   
  30.         }   
  31.   
  32.     }   
  33. }  

相关推荐