在XmlRpc中,JAVA中WebServer类的addHandler方法已被弃用.此方法的其他替代方法是什么



我知道这个问题已经被问过了。在之前的问题中,有一个链接,我们可以从中找到关于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类对给定半径的圆的面积进行copmute。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类与区域链接,因此当客户端请求服务器时,它会返回区域。

您仍然可以使用不推荐使用的方法。您正在使用哪个版本的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();

相关内容

  • 没有找到相关文章

最新更新