jochen 2005/06/15 11:52:05
Modified: src/java/org/apache/xmlrpc XmlRpcClientWorker.java Added: src/test/org/apache/xmlrpc Jira61.java Log: PR: XMLRPC-61 Revision Changes Path 1.1 ws-xmlrpc/src/test/org/apache/xmlrpc/Jira61.java Index: Jira61.java =================================================================== package org.apache.xmlrpc; import java.io.IOException; import java.util.Vector; import junit.framework.TestCase; public class Jira61 extends TestCase { public class TestLoopBack { /** * @throws XmlRpcException */ public void createItem() throws XmlRpcException { throw new XmlRpcException(7,"Not found"); } } public void testException() throws IOException { WebServer webserver = new WebServer(0); TestLoopBack tt = new TestLoopBack(); webserver.addHandler ("examples", tt); webserver.start(); XmlRpcClient xmlrpc = new XmlRpcClient("http://localhost:" + webserver.serverSocket.getLocalPort() + "/RPC2"); Vector params = new Vector (); boolean ok = false; try { xmlrpc.execute("examples.createItem", params); } catch (XmlRpcException e) { ok = true; } assertTrue(ok); } } 1.7 +15 -34 ws-xmlrpc/src/java/org/apache/xmlrpc/XmlRpcClientWorker.java Index: XmlRpcClientWorker.java =================================================================== RCS file: /home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/XmlRpcClientWorker.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- XmlRpcClientWorker.java 28 Apr 2005 22:48:49 -0000 1.6 +++ XmlRpcClientWorker.java 15 Jun 2005 18:52:05 -0000 1.7 @@ -57,19 +57,24 @@ throws XmlRpcException, XmlRpcClientException, IOException { long now = 0; - Object response = PROCESSING_ERROR_FLAG; if (XmlRpc.debug) { now = System.currentTimeMillis(); } + boolean endClientRequestDone = false; try { byte[] request = requestProcessor.encodeRequestBytes (xmlRpcRequest, responseProcessor.getEncoding()); InputStream is = transport.sendXmlRpc(request); - response = responseProcessor.decodeResponse(is); + Object response = responseProcessor.decodeResponse(is); + endClientRequestDone = true; + transport.endClientRequest(); + if (response != null && response instanceof XmlRpcException) { + throw (XmlRpcException) response; + } return response; } catch (IOException ioe) @@ -97,39 +102,15 @@ + " millis in request/process/response"); } - // End the transport's session, handling any problem while - // avoiding hiding of any earlier exception. - try - { - transport.endClientRequest(); - } - catch (Throwable t) + if (!endClientRequestDone) { - // Don't clobber an earlier exception. - boolean haveFault = response instanceof XmlRpcException; - if (haveFault || response == PROCESSING_ERROR_FLAG) - { - System.err.println("Avoiding obscuring previous error " + - "by supressing error encountered " + - "while ending request: " + t); - if (haveFault) - { - throw (XmlRpcException) response; - } - // else we've already thrown an exception - } - else - { - if (t instanceof XmlRpcException) - { - throw (XmlRpcException) t; - } - else - { - throw new XmlRpcClientException - ("Unable to end request", t); - } - } + try + { + transport.endClientRequest(); + } + catch (Throwable ignore) + { + } } } }