Question

I have the following XML-RPC implementation working which I copied and slightly modified from the 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();
    }
  }
}

With a client:

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

I run DemoServer first, and then I run DemoClient, and it prints "2 + 3 = 5". However if I change

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

to

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

then I get the following:

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

My ClientCallback class:

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

What is going wrong here? I am working with Apache XML-RPC version 3.1.2, and unfortunately example code I have found are in version 2.x and doesn't apply anymore. Also I have omitted the import statements from the beginning of my classes (there are no syntax errors for sure). Any help would be much appreciated.

Was it helpful?

Solution

Your main program is running off the end because executeAsync returns immediately without waiting for the request to be sent or the response to come back.

What are you trying to accomplish by using executeAsync?

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top