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)
+ {
+ }
}
}
}