You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xmlrpc-dev@ws.apache.org by dl...@apache.org on 2005/04/29 00:38:23 UTC
cvs commit: ws-xmlrpc/src/java/org/apache/xmlrpc XmlRpcClientResponseProcessor.java XmlRpcClientWorker.java
dlr 2005/04/28 15:38:23
Modified: src/java/org/apache/xmlrpc
XmlRpcClientResponseProcessor.java
XmlRpcClientWorker.java
Log:
* src/java/org/apache/xmlrpc/XmlRpcClientWorker.java
Corrected @since tag in header JavaDoc.
(PROCESSING_ERROR): New constant which is Used as an internal marker
value in the execute() method.
(execute): Rewrote exception handling changes introduced in CVS rev
1.3 to avoid masking root cause exceptions when completing a
request.
(canReUse): Improved JavaDoc and suggested better method name.
* src/java/org/apache/xmlrpc/XmlRpcClientResponseProcessor.java
Corrected @since tag in header JavaDoc.
(decodeResponse, decodeException): Improved JavaDoc.
Revision Changes Path
1.3 +12 -12 ws-xmlrpc/src/java/org/apache/xmlrpc/XmlRpcClientResponseProcessor.java
Index: XmlRpcClientResponseProcessor.java
===================================================================
RCS file: /home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/XmlRpcClientResponseProcessor.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -u -r1.2 -r1.3
--- XmlRpcClientResponseProcessor.java 22 Apr 2005 10:25:57 -0000 1.2
+++ XmlRpcClientResponseProcessor.java 28 Apr 2005 22:38:23 -0000 1.3
@@ -31,7 +31,7 @@
* @author <a href="mailto:hannes@apache.org">Hannes Wallnoefer</a>
* @author <a href="mailto:andrew@kungfoocoder.org">Andrew Evers</a>
* @version $Id$
- * @since 1.2
+ * @since 2.0
*/
public class XmlRpcClientResponseProcessor extends XmlRpc
{
@@ -42,16 +42,15 @@
protected boolean fault;
/**
- * Decode an XML-RPC response from the specified InputStream. This
- * method will parse the input and return an Object. The result
- * will be an XmlRpcException if the server returned a fault, or
- * an Object if the server returned a result.
+ * Decode an XML-RPC response from the specified InputStream.
*
- * @param is the stream to read from.
- * @return Object an XmlRpcException if an error occured, or the response.
+ * @param is The stream from which to read the response.
+ * @return The response, which will be a XmlRpcException if an
+ * error occured.
+ * @exception XmlRpcClientException
*/
public Object decodeResponse(InputStream is)
- throws XmlRpcClientException
+ throws XmlRpcClientException
{
result = null;
fault = false;
@@ -80,12 +79,13 @@
* it throws an exception then an exception occured locally when decoding
* the response
*
- * @param result the result from the remote XML-RPC server.
- * @throws XmlRpcClientException if the result could not be processed.
+ * @param result The response from the remote XML-RPC server.
+ * @return A XmlRpcException describing the error which occurred.
+ * @exception XmlRpcClientException if the result could not be processed.
* @return XmlRpcException the processed response from the server.
*/
protected XmlRpcException decodeException(Object result)
- throws XmlRpcClientException
+ throws XmlRpcClientException
{
Hashtable exceptionData;
1.5 +55 -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.4
retrieving revision 1.5
diff -u -u -r1.4 -r1.5
--- XmlRpcClientWorker.java 22 Apr 2005 10:25:57 -0000 1.4
+++ XmlRpcClientWorker.java 28 Apr 2005 22:38:23 -0000 1.5
@@ -25,13 +25,19 @@
* a request serially in a single thread.
*
* @author <a href="mailto:andrew@kungfoocoder.org">Andrew Evers</a>
- * @since 1.2
+ * @since 2.0
*/
public class XmlRpcClientWorker
{
protected XmlRpcClientRequestProcessor requestProcessor;
protected XmlRpcClientResponseProcessor responseProcessor;
+ /**
+ * Used as an internal marker value in {@link
+ * #execute(XmlRpcClientRequest, XmlRpcTransport)}.
+ */
+ private static final Object PROCESSING_ERROR = new Object();
+
public XmlRpcClientWorker()
{
this(new XmlRpcClientRequestProcessor(),
@@ -46,33 +52,25 @@
this.responseProcessor = responseProcessor;
}
- public Object execute(XmlRpcClientRequest xmlRpcRequest, XmlRpcTransport transport)
- throws XmlRpcException, XmlRpcClientException, IOException
+ public Object execute(XmlRpcClientRequest xmlRpcRequest,
+ XmlRpcTransport transport)
+ throws XmlRpcException, XmlRpcClientException, IOException
{
long now = 0;
- Object response;
+ Object response = PROCESSING_ERROR;
if (XmlRpc.debug)
{
now = System.currentTimeMillis();
}
- boolean endClientDone = false;
try
{
- byte [] request = requestProcessor.encodeRequestBytes(xmlRpcRequest, responseProcessor.getEncoding());
+ byte[] request = requestProcessor.encodeRequestBytes
+ (xmlRpcRequest, responseProcessor.getEncoding());
InputStream is = transport.sendXmlRpc(request);
response = responseProcessor.decodeResponse(is);
- if (response instanceof XmlRpcException)
- {
- throw (XmlRpcException) response;
- }
- else
- {
- endClientDone = true;
- transport.endClientRequest();
- return response;
- }
+ return response;
}
catch (IOException ioe)
{
@@ -82,35 +80,57 @@
{
throw xrce;
}
- catch (XmlRpcException xre)
- {
- throw xre;
- }
- catch (Exception x)
+ catch (RuntimeException x)
{
if (XmlRpc.debug)
{
x.printStackTrace();
}
- throw new XmlRpcClientException("Unexpected exception in client processing.", x);
+ throw new XmlRpcClientException
+ ("Unexpected exception in client processing", x);
}
finally
{
if (XmlRpc.debug)
{
- System.out.println("Spent " + (System.currentTimeMillis() - now)
+ System.err.println("Spent " + (System.currentTimeMillis() - now)
+ " millis in request/process/response");
}
- if (!endClientDone)
- {
- try
- {
- transport.endClientRequest();
- }
- catch (Throwable ignore)
- {
- }
- }
+
+ // End the transport's session, handling any problem while
+ // avoiding hiding of any earlier exception.
+ try
+ {
+ transport.endClientRequest();
+ }
+ catch (Throwable t)
+ {
+ // Don't clobber an earlier exception.
+ boolean haveFault = response instanceof XmlRpcException;
+ if (haveFault || response == PROCESSING_ERROR)
+ {
+ 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);
+ }
+ }
+ }
}
}
@@ -119,8 +139,9 @@
* re-used. Must attempt to clean up any state, and return true if it can
* be re-used.
*
- * @return boolean true if this worker has been cleaned up and may be re-used.
+ * @return Whether this worker has been cleaned up and may be re-used.
*/
+ // ### isReusable() would be a better name for this set of methods
protected boolean canReUse()
{
return responseProcessor.canReUse() && requestProcessor.canReUse();