Adam,

Thank you very much... that has helped tremendously!

Oli

On Sun, 2005-07-31 at 18:08, Adam Taft wrote:
> Oliver,
> 
> I was frustrated with this issue too.  I had to work this out for 
> myself, but finally figured out how to get it right.  It's kindof 
> confusing, and there's not a lot of documention available.
> 
> In essence, you need to:
> 
> 1)  Extend XmlRpcException and override the toString() method.
> 2)  Throw this extended XmlRpcException in your server code.
> 
> I'm attaching some test code to demonstrate why you need to do the above.
> 
> The problem essentially comes from how the XmlRpcServer must wrap any 
> thrown exceptions in an XmlRpcException.  To do this, it calls the 
> toString() method of the thrown Exception and stores this as the message 
> field in the newly created XmlRpcException.  This is mistake number one 
> (it should call the exception's getMessage() method instead).  Then, the 
> XmlRpcServer must convert the XmlRpcException to a string for sending on 
> the wire.  Again, it calls the toString() method of XmlRpcException 
> instead of getMessage().  This is mistake number two.
> 
> So anyway, if you do the two steps above on your server, you should get 
> the results you're looking for.  Hope this helps.
> 
> Adam
> 
> p.s.  I'm using xmlrpc-1.2-b1.jar
> 
> 
> Oliver Cole wrote:
> > 
> > Yes, but I am talking about the fault string that is actually sent over
> > the wire, in the XMLRPC/HTTP response. I throw an exception in my server
> > side code, and it ends up with that name in the text of the fault that
> > gets returned to the client.
> > 
> > Now, I could be receiving that fault in a Perl RPC client, or in Java
> > code or whatever, the fact remains: the name of the exception class is
> > in the *text* of the fault.
> > 
> > On the client side in Java, this of course generates an XmlRpcException,
> > but my issue is what gets sent to the client, from my server code, in
> > the first place.
> > 
> > Can anyone help?
> > 
> > Oli
> > 
> 
> ______________________________________________________________________
> import java.util.Vector;
> 
> import org.apache.xmlrpc.WebServer;
> import org.apache.xmlrpc.XmlRpcClient;
> import org.apache.xmlrpc.XmlRpcException;
> 
> 
> public class Test {   
> 
>       public static void main(String[] args) {
> 
>               WebServer server = new WebServer(8080);
>               server.addHandler("test", new Test());
>               server.start();
>               
> 
>               // Test #1
>               try {
>                       XmlRpcClient client = new 
> XmlRpcClient("http://localhost:8080";);
>                       client.execute("test.throwException", new Vector());
>               } catch (Exception e) {
>                       System.err.println(e.getMessage());
>               }
>               
>               
>               // Test #2
>               try {
>                       XmlRpcClient client = new 
> XmlRpcClient("http://localhost:8080";);
>                       client.execute("test.throwXmlRpcException", new 
> Vector());
>               } catch (Exception e) {
>                       System.err.println(e.getMessage());
>               }
>               
>               
>               // Test #3
>               try {
>                       XmlRpcClient client = new 
> XmlRpcClient("http://localhost:8080";);
>                       client.execute("test.throwMyOwnXmlRpcException", new 
> Vector());
>               } catch (Exception e) {
>                       System.err.println(e.getMessage());
>               }
>               
>               
>               server.shutdown();
>               
>       }
> 
>       
>       public boolean throwException() throws Exception {
>               if (true) {
>                       throw new Exception("throwException() called.  This is 
> a normal Exception.");
>               }
>               return true;
>       }
>       
>       public boolean throwXmlRpcException() throws Exception {
>               if (true) {
>                       throw new XmlRpcException(1, "throwXmlRpcException() 
> called.  This is an unmodified XmlRpcException.");
>               }
>               return true;
>       }
>       
>       public boolean throwMyOwnXmlRpcException() throws Exception {
>               if (true) {
>                       throw new MyOwnXmlRpcException (2, 
> "throwMyOwnXmlRpcException() called.  This is an extended XmlRpcException 
> with the overridden toString() method.");
>               }               
>               return true;
>       }       
> 
> }
> 
> class MyOwnXmlRpcException extends XmlRpcException {
> 
>       protected MyOwnXmlRpcException(int code, String message) {
>               super(code, message);
>       }
>       
>       public String toString() {
>               return super.getMessage();
>       }
>       
> }

Reply via email to