`
somebody
  • 浏览: 81329 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SpringXmlrpcServiceExporter for xmlrpc3.x

阅读更多

      我们的项目用到了xmlrpc,不过还是用的2.x版本的。由于xmlrpc3.x地推出。提供了NULL,Serializable等的支持,将原来的Hashtable改成了Map,Vector改成了List。都是不错的进步。所以我们决定从xmlrpc2.x升级到xmlrpc3.x.
      在spring里面有几个ServiceExporter,org.springframework.remoting.rmi.RmiServiceExporter、org.springframework.remoting.caucho.HessianServiceExporter、org.springframework.remoting.caucho.BurlapServiceExporter。不过没有xmlrpc的serviceExporter,原来我们是自己封装的XmlRpcServer,用servlet提供服务。(eg:http://localhost:8080/community/service/xmlrpc)没有和spring集成虽然用了spring。
    考虑到spring的便利以及配置的同意我决定将xmlrpcService放入spring中。xmlrpc3.x和xmlrpc2.x的代码基本上没有一样的。改了很多东西。除了类型变化之外,还添加了对异常的支持。详细信息请参照xmlrpc3.x源代码。
XmlRpcServiceExporter.java

package  com.jdkcn.xmlrpc;

import  javax.servlet.ServletException;

/**
 * 
@author  <a href="mailto:rory.cn@gmail.com">somebody</a>
 * 
@since  2006-9-27 03:59:22 pm
 * 
@version  $Id XmlRpcServiceExporter.java$
 
*/
public   class  XmlRpcServiceExporter  extends  RemoteExporter  implements
        Controller, InitializingBean {
    
    
private  XmlRpcServletServer server;
    
    
public  String serviceName;
    
    
public  Resource configFile;
    
    
public  Boolean enabledForExtensions;
    
    
public   void  setEnabledForExtensions(Boolean enabledForExtensions) {
        
this .enabledForExtensions  =  enabledForExtensions;
    }

    
public   void  setConfigFile(Resource configFile) {
        
this .configFile  =  configFile;
    }

    
public  String getServiceName() {
        
return  serviceName;
    }

    
public   void  setServiceName(String serviceName) {
        
this .serviceName  =  serviceName;
    }

    
public  XmlRpcServletServer getXmlRpcServletServer() {
        
return  server;
    }
    
    
/*  (non-Javadoc)
     * @see org.springframework.web.servlet.mvc.Controller#handleRequest(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
     
*/
    
public  ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) 
throws  Exception {
        
if  ( ! WebContentGenerator.METHOD_POST.equals(request.getMethod())) {
            
throw   new  ServletException( " XmlRpcServiceExporter only supports POST requests " );
        }
        server.execute(request, response);
        
return   null ;
    }

    
/*  (non-Javadoc)
     * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
     
*/
    
public   void  afterPropertiesSet()  throws  Exception {
        server 
=   new  XmlRpcServletServer();
        server.setHandlerMapping(newXmlRpcHandlerMapping());
        
if  (enabledForExtensions != null ) {
            ((XmlRpcServerConfigImpl) server.getConfig()).setEnabledForExtensions(enabledForExtensions.booleanValue());
        }
        
    }

    
/**  Creates a new handler mapping. The default implementation loads
     * a property file from the resource
     * 
     
*/
    
protected  XmlRpcHandlerMapping newXmlRpcHandlerMapping()  throws  XmlRpcException {
        
        SpringHandlerMapping mapping 
=   new  SpringHandlerMapping(getServiceInterface());
        mapping.addHandler(getServiceName(), getServiceInterface());
        mapping.setTagetObject(getProxyForService());
        
return  mapping;
    }
    
}

spring配置文件
    <bean id="accountService"  class="com.jdkcn.service.impl.AccountServiceImpl">
    
</bean>
        
<bean name="rpcAccountService" class="com.jdkcn.xmlrpc.XmlRpcServiceExporter">
        
<property name="service">
            
<ref bean="accountService"/>
        
</property>
        
<property name="serviceName">
            
<value>jdkcn.accountService</value>
        
</property>
        
<property name="enabledForExtensions">
            
<value>true</value>
        
</property>
        
<property name="serviceInterface">
            
<value>com.jdkcn.service.AccountService</value>
        
</property>
    
</bean>
然后映射一个地址就可以通过xmlrpc访问服务了
    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        
<property name="mappings">
            
<props> 
                
<prop key="/account">rpcAccountService</prop>
            
</props>
        
</property>
    
</bean>
web.xml
    <context-param>
        
<param-name>contextConfigLocation</param-name>
        
<param-value>
            classpath:spring/global.xml
        
</param-value>
    
</context-param>
    
    
<listener>
        
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    
</listener>

        
<servlet>
            
<servlet-name>service</servlet-name>
            
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        
</servlet>

        
<servlet-mapping>
            
<servlet-name>service</servlet-name>
            
<url-pattern>/service/xmlrpc3/*</url-pattern>
        
</servlet-mapping>
然后我们的service地址就是这样的http://localhost:8080/service/xmlrpc3/account

希望对大家有用,这里提供project下载。包含一个client程序。com.jdkcn.xmlrpc.Client

点击下载完整代码

创造共用协议:署名,非商业,保持一致   除经特别注明外,本文章版权归莫多泡泡所有.
署名,非商业用途,保持一致.   somebody(莫多)

莫多 2006-10-22 16:12 发表评论
分享到:
评论

相关推荐

    xmlrpc3.1.3 jar包.

    xmlrpc jar包. 版本: 3.1.3

    xmlrpc-2.0-src.zip_xmlrpc_xmlrpc java_xmlrpc s_xmlrpc-2.0.1.jar_

    标签"xmlrpc xmlrpc_java xmlrpc_s xmlrpc-2.0.1.jar zip"进一步强调了这个资源与Java语言的XMLRPC库、XMLRPC服务(xmlrpc_s可能指代服务端组件)以及对应的jar文件相关,同时指出文件是以zip格式打包的。...

    前端项目-jquery-xmlrpc.zip

    **前端项目-jquery-xmlrpc.zip** 这个前端项目的核心是利用jQuery库来实现与远程XML-RPC(Remote Procedure Call)服务的交互。XML-RPC是一种轻量级的远程调用协议,它允许客户端通过HTTP发送结构化的XML数据到...

    apache-xmlrpc-3.1.3.jar

    3. **服务器端实现**:使用Apache XML-RPC库,开发者可以快速创建一个XML-RPC服务器,只需提供处理RPC请求的方法。服务器会自动将XML请求转换为方法调用,并处理响应。 4. **客户端调用**:在客户端,可以创建一个...

    xmlrpc.jar文件

    xmlrpc.jar文件,Java调用xmlrpc时需要此jar包

    apache-xmlrpc-3.1.3-src.zip

    主要涉及的包有org.apache.xmlrpc、org.apache.xmlrpc.common、org.apache.xmlrpc.server和org.apache.xmlrpc.client等。通过阅读这些源码,你可以了解XML-RPC请求从创建、编码、发送到接收、解码和执行的整个流程。...

    Ub.XMLRPC.rar_xmlrpc

    在这个"Ub.XMLRPC.rar_xmlrpc"压缩包中,我们很可能是找到了一个C#实现的XMLRPC接口开发示例,用于web开发,目的是与其他接口进行对接。 XMLRPC的核心概念包括以下几个方面: 1. **客户端**:客户端是发起RPC调用...

    android-xmlrpc.tar.gz_Help!

    1. 添加依赖:在项目的build.gradle文件中添加Android-Xmlrpc库的依赖,例如通过JitPack仓库。 2. 创建XML-RPC客户端:使用Android-Xmlrpc库创建一个XML-RPC客户端实例,设置服务器URL。 3. 调用远程方法:通过...

    XMLRPC jar包+教程+例子

    3. **XMLRPC jar包的使用**: - 首先,你需要将对应的xmlrpc-client和xmlrpc-server的jar包添加到你的项目类路径中,可以通过Maven或Gradle等构建工具进行依赖管理。 - 创建服务器端,你需要实现一个处理方法的...

    Python库 | xmlrpc2-0.2.2.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:xmlrpc2-0.2.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    j2me-xmlrpc.rar

    这个压缩包“j2me-xmlrpc.rar”可能包含了这个库的源代码、API文档、示例代码等资源,方便开发者理解和使用。 2. **XML-RPC协议原理** XML-RPC协议的核心思想是将方法名和参数封装成XML文档,然后通过HTTP POST...

    xmlrpc基于xml rpc实现源代码

    3. 创建XMLRPC客户端:在客户端代码中,使用XMLRPC库创建请求,指定目标URL、方法名和参数。 4. 发送和接收:客户端发送请求到服务器,服务器解析请求,执行相应的函数,然后将结果编码回XML并返回给客户端。 5. ...

    Wordpress-XMLRPC-Brute-Force-Exploit:Wordpress XMLRPC系统多方调用蛮力利用(0天)by 1N3 @ C​​rowdShield

    1N3的Wordpress XMLRPC System Multicall蛮力利用漏洞,最近更新:20170215 关于: 这是对Wordpress xmlrpc.php系统多重调用功能的一种利用,影响了最新版本的Wordpress(3.5.1)。 该漏洞利用通过向xmlrpc.php发送...

    (java)xmlrpc.7z

    static String serverUrl = "http://192.168.1.6:81/phacoa/xmlrpc"; static String usr = ""//帐号 static String pwd = ""; //密码 public static &lt;JSONObject&gt; Object RPC(String methodName, List&lt;String&gt; L...

    PyPI 官网下载 | aiohttp-xmlrpc-0.4.1.tar.gz

    3. 错误处理机制,包括异常捕获和返回错误信息。 4. 可能包含自定义序列化和反序列化选项,以适应不同的数据类型和格式。 5. 可能提供了与其他Python XML-RPC库的兼容性,便于迁移和集成。 在云原生环境中,aiohttp...

    cookcomputing.xmlrpc.dll

    c#的xmlrpc需要的包,简单易用的网络编程框架

    xmlrpc-client-3.1.jar下载

    xmlrpc-client-3.1.jar下载

    xmlrpc 导入的Lib

    在Python的`xmlrpc`库中,主要有两个模块:`xmlrpc.client`和`xmlrpc.server`。`xmlrpc.client`模块提供了客户端功能,用于发起XMLRPC请求并处理响应;而`xmlrpc.server`模块则包含了服务器端的实现,可以创建XMLRPC...

    xmlrpc-common-3.1.jar下载

    xmlrpc-common-3.1.jar下载

Global site tag (gtag.js) - Google Analytics