opensubscriber
   Find in this group all groups
 
Unknown more information…

r : rpc-user@xml.apache.org 14 January 2005 • 9:55AM -0500

Throwing Exceptions in XmlRpcServer
by Adam Taft

REPLY TO AUTHOR
 
REPLY TO GROUP




Hi all,

I'm writing an XmlRpcServer, using the WebServer class as my base
starting point.

I'm able to add a handler to process xmlrpc requests.  However, inside
that handler, I'm unable to throw an exception that has a custom message
passed back to the client.

Just from guessing, it looks like the XmlRpcServer is catching the
thrown exception, then creates an xmlrpc error response to send back to
the client using the exception's toString() method.

In my example code (pasted below), I'm getting the following message
from the console:

org.apache.xmlrpc.XmlRpcException: java.lang.Exception: XmlRpc Failure

This message is what the client sees.  Again, it seems to me that the
XmlRpcServer is catching the thrown exception (in the execute()) method,
and then uses the exception's toString() method in order to craft the
xmlrpc fault response.

I guess the question is, how do I raise an exception (or somehow
otherwise trigger an error response by the XmlRpcServer) such that the
error response message doesn't include (from the example)
"java.lang.Exception".  I'm just looking to get the error message only
passed back to the client.

Even more ideal, I'd like to actually craft the XmlRpcException to send
back to the client, such that I can include my own xmlrpc fault code and
fault message.

What's the appropriate way to get an xmlrpc error response back to the
client?

Thanks.

Adam


This is my example code which reproduces the problem:


import java.util.*;
import org.apache.xmlrpc.*;

public class TestServer implements XmlRpcHandler {

TestServer() {
WebServer server = new WebServer(8080);
server.addHandler("$default", this);
server.start();
}

public Object execute(String method, Vector params) throws Exception {
if (true) {
throw new Exception ("XmlRpc Failure");
}

return "XmlRpc Success";
}

public static void main(String[] args) {
new TestServer();

try {
Thread.currentThread().sleep(3000);
} catch (Exception e) {}

try {
XmlRpcClient xmlRpcClient = new XmlRpcClient ("http://localhost:8080/");
Vector params = new Vector();
String results = (String) xmlRpcClient.execute("any_method", params);
System.out.println(results);
} catch (Exception e) {
System.err.println(e);
}

}
}


Bookmark with:

Delicious   Digg   reddit   Facebook   StumbleUpon

opensubscriber is not affiliated with the authors of this message nor responsible for its content.