【问题标题】:In XmlRpc The addHandler method of WebServer class in JAVA is deprecated what is the other alternative for this method?在 XmlRpc 中,Java 中 WebServer 类的 addHandler 方法已被弃用,此方法的其他替代方法是什么?
【发布时间】:2020-09-02 03:59:35
【问题描述】:

我知道这个问题已经被问过了。在之前的问题中有一个链接,我们可以从中找到有关 org.apache.xmlrpc 的详细信息,但我无法确定 WebServer 类的 addHandler 方法的替代方案。

我有两个项目

    1    Server
            Server project consist of
                1.1 AreaServer
                1.2 AreaHandler
    2   Client
            Client project consist of
        2.1 Client
        

AreaHandler 类计算给定半径的圆的面积。 AreaServer 使用 AreaHandler 类。

区域服务器

package webtutorial;

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.xmlrpc.webserver.WebServer;

/**
 *
 * @author Dev Parzival
 */
public class AreaServer {
    public static void main(String $[]){
        try {
            startServer($);
        } catch (IOException ex) {
            Logger.getLogger(AreaServer.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    public static void startServer(String $[]) throws IOException{
        WebServer server;
        server=new WebServer(Integer.parseInt($[0]));
        server.addHandler("area",new AreaHandler());
        server.start();
    }
}

区域处理程序

package webtutorial;

/**
 *
 * @author Dev Parzival
 */
public class AreaHandler {
    
    /**
     *
     * @param radius radius of circle whose area has to be computed
     * @return area of the circle whose type is double
     */
    public double circleArea(double radius){
        return Math.PI*radius*radius;
    }
}

客户

package client;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.client.XmlRpcClient;

/**
 *
 * @author Dev Parzival
 * @date   02-Sep-2020
 * @time   08:46:01
 */
public class Client {

    /**
     * @param $ the command line arguments , represent the radius of the circle whose area is to be computer via the server.
     */
    public static void main(String[] $) {
        // TODO code application logic here
        Client client=new Client();
        double radius=Double.parseDouble($[0]);
        try{
            double area=client.areaCircle(radius);
            System.out.println("Area of the circle is : "+area);
        }
        catch(Exception ex){
            System.out.println(ex);
        }
    }
    public double areaCircle(double radius) throws IOException,XmlRpcException{
        double area=0;
        XmlRpcClient client=new XmlRpcClient();
        ArrayList<Double> vec=new ArrayList<Double>();
        vec.add(new Double(radius));
        Object result=client.execute("area.circleArea", vec);
        area=Double.parseDouble(result.toString());
        return area;
    }
}

addHandler 方法已被弃用,所以我想知道如何做到这一点

server.addHandler("area",new AreaHandler());

将 AreaHandler 类与 area 链接起来,因此当客户端请求服务器时,它会返回该区域。

【问题讨论】:

    标签: java server client xml-rpc


    【解决方案1】:

    您仍然可以使用已弃用的方法。你用的是什么版本的xmlrpc?

    文档表明您可以使用 PropertyHandlerMapping 从属性文件添加映射。

          PropertyHandlerMapping phm = new PropertyHandlerMapping();
          /* Load handler definitions from a property file.
           * The property file might look like:
           *   Calculator=org.apache.xmlrpc.demo.Calculator
           *   org.apache.xmlrpc.demo.proxy.Adder=org.apache.xmlrpc.demo.proxy.AdderImpl
           */
         phm.load(Thread.currentThread().getContextClassLoader(),
                   "MyHandlers.properties");
         xmlRpcServer.setHandlerMapping(phm);
    

    也可以直接添加:

          /* You may also provide the handler classes directly,
           * like this:
           * phm.addHandler("Calculator",
           *     org.apache.xmlrpc.demo.Calculator.class);
           * phm.addHandler(org.apache.xmlrpc.demo.proxy.Adder.class.getName(),
           *     org.apache.xmlrpc.demo.proxy.AdderImpl.class);
           */
    

    见:https://ws.apache.org/xmlrpc/server.html

    您仍然可以像这样添加处理程序:

    WebServer server = new WebServer(Integer.parseInt($[0]));
    PropertyHandlerMapping handlerMapping = new PropertyHandlerMapping();
    handlerMapping.addHandler("area", AreaHandler.class);
    XmlRpcServer xmlRpcServer = webServer.getXmlRpcServer();
    xmlRpcServer.setHandlerMapping(handlerMapping);
    
    XmlRpcServerConfigImpl serverConfig = (XmlRpcServerConfigImpl) xmlRpcServer.getConfig();
    serverConfig.setEnabledForExtensions(true);
    serverConfig.setContentLengthOptional(false);
    
    server.start();
    

    【讨论】:

    • jar版本为3.1.3
    • 能否分享旧版xmlrpc jar文件的链接,以便支持addHandler方法
    • 更新答案,您应该仍然可以添加处理程序,但使用属性处理程序映射类来完成。
    • 我在线程 "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory at org.apache.xmlrpc.server.XmlRpcStreamServer 中收到此错误异常。(未知Source) at org.apache.xmlrpc.webserver.WebServer.newXmlRpcStreamServer(Unknown Source) at org.apache.xmlrpc.webserver.WebServer.(Unknown Source) ;
    • 在这一行:server=new WebServer(Integer.parseInt($[0]));//$[0]=4404
    猜你喜欢
    • 2013-12-16
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多