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

Reply via email to