在 XmlRpc 中 JAVA 中 WebServer class 的 addHandler 方法已弃用此方法的其他替代方法是什么?

In XmlRpc The addHandler method of WebServer class in JAVA is deprecated what is the other alternative for this method?

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

我有两个项目

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

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

区域服务器

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());

Link AreaHandler class with area 所以当客户端请求服务器时它returns area.

您仍然可以使用已弃用的方法。您使用的是什么版本的 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();