gpt4 book ai didi

java - XML-RPC 异常从execute 切换到executeAsync

转载 作者:行者123 更新时间:2023-12-01 13:01:47 24 4
gpt4 key购买 nike

我有以下 XML-RPC 实现,我从 apache website 复制并稍微修改了它。 .

public class DemoServer { 
public static void main (String [] args) {
try {
WebServer webServer = new WebServer(8080);
XmlRpcServer xmlRpcServer = webServer.getXmlRpcServer();

PropertyHandlerMapping phm = new PropertyHandlerMapping();
phm.addHandler("sample", RequestHandler.class);
xmlRpcServer.setHandlerMapping(phm);

XmlRpcServerConfigImpl serverConfig =
(XmlRpcServerConfigImpl) xmlRpcServer.getConfig();
serverConfig.setEnabledForExtensions(true);
serverConfig.setContentLengthOptional(false);

webServer.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}

与客户:

public class DemoClient {
public static void main (String[] args) {
try {
XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
config.setServerURL(new URL("http://127.0.0.1:8080/xmlrpc"));
config.setEnabledForExtensions(true);
config.setConnectionTimeout(60 * 1000);
config.setReplyTimeout(60 * 1000);

XmlRpcClient client = new XmlRpcClient();

// set configuration
client.setConfig(config);

// make the a regular call
Object[] params = new Object[] { new Integer(2), new Integer(3) };

//!CRITICAL LINE!
Integer result = (Integer) client.execute("sample.sum", params);

System.out.println("2 + 3 = " + result);
} catch (Exception e) {
e.printStackTrace();
}
}
}

我先运行 DemoServer,然后运行 ​​DemoClient,它打印“2 + 3 = 5”。但是如果我改变

Integer result = (Integer) client.execute("sample.sum", params);

client.executeAsync("sample.sum", params, new ClientCallback());

然后我得到以下信息:

In error
java.lang.ExceptionInInitializerError
at java.lang.Runtime.addShutdownHook(Runtime.java:192)
at java.util.logging.LogManager.<init>(LogManager.java:237)
at java.util.logging.LogManager$1.run(LogManager.java:177)
at java.security.AccessController.doPrivileged(Native Method)
at java.util.logging.LogManager.<clinit>(LogManager.java:158)
at java.util.logging.Logger.getLogger(Logger.java:273)
at sun.net.www.protocol.http.HttpURLConnection.<clinit>(HttpURLConnection.java:62)
at sun.net.www.protocol.http.Handler.openConnection(Handler.java:44)
at sun.net.www.protocol.http.Handler.openConnection(Handler.java:39)
at java.net.URL.openConnection(URL.java:945)
at org.apache.xmlrpc.client.XmlRpcSun15HttpTransport.newURLConnection(XmlRpcSun15HttpTransport.java:62)
at org.apache.xmlrpc.client.XmlRpcSunHttpTransport.sendRequest(XmlRpcSunHttpTransport.java:62)
at org.apache.xmlrpc.client.XmlRpcClientWorker$1.run(XmlRpcClientWorker.java:80)
at java.lang.Thread.run(Thread.java:680)
Caused by: java.lang.IllegalStateException: Shutdown in progress
at java.lang.Shutdown.add(Shutdown.java:62)
at java.lang.ApplicationShutdownHooks.<clinit>(ApplicationShutdownHooks.java:21)
... 14 more

我的 ClientCallback 类:

public class ClientCallback implements AsyncCallback {

@Override
public void handleError(XmlRpcRequest request, Throwable t) {
System.out.println("In error");
t.printStackTrace();

}

@Override
public void handleResult(XmlRpcRequest request, Object result) {
System.out.println("In result");
System.out.println(request.getMethodName() + ": " + result);
}
}

这里出了什么问题?我正在使用 Apache XML-RPC 版本 3.1.2,不幸的是我发现的示例代码位于版本 2.x 中,不再适用。另外,我在类的开头省略了 import 语句(肯定没有语法错误)。任何帮助将不胜感激。

最佳答案

您的主程序正在运行结束,因为executeAsync立即返回,而不等待请求发送或响应返回。

您想通过使用executeAsync 来实现什么目的?

关于java - XML-RPC 异常从execute 切换到executeAsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23464650/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com