dims        2003/07/09 15:00:49

  Modified:    java/test/wsdl/jaxrpchandler build.xml ClientHandler.java
                        JAXRPCHandlerTestCase.java ServerHandler.java
                        StockQuoteImpl.java
               java/src/org/apache/axis/handlers/soap SOAPService.java
  Log:
  Fix and testcase for Bug 15181 - javax.xml.rpc.handler.Handler#handleFault method is 
not called
  from Pat Cogan ([EMAIL PROTECTED])
  
  Revision  Changes    Path
  1.5       +1 -1      xml-axis/java/test/wsdl/jaxrpchandler/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/wsdl/jaxrpchandler/build.xml,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- build.xml 10 Sep 2002 16:06:54 -0000      1.4
  +++ build.xml 9 Jul 2003 22:00:48 -0000       1.5
  @@ -53,7 +53,7 @@
   <target name="copy" depends="setenv"/>
   
   <target name="compile" depends="copy">
  -  <echo message="Compiling test.${componentName}"/>
  +  <echo message="Compiling ${componentName}"/>
       <!-- This is (OK, "will be") a comprehensive test of XML schema types -->
       <wsdl2java url="${axis.home}/test/wsdl/jaxrpchandler/jaxrpchandler.wsdl"
                  output="${build.dir}/work"
  
  
  
  1.3       +20 -1     xml-axis/java/test/wsdl/jaxrpchandler/ClientHandler.java
  
  Index: ClientHandler.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/wsdl/jaxrpchandler/ClientHandler.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ClientHandler.java        11 Dec 2002 22:40:21 -0000      1.2
  +++ ClientHandler.java        9 Jul 2003 22:00:48 -0000       1.3
  @@ -8,6 +8,7 @@
   import javax.xml.soap.Name;
   import javax.xml.soap.SOAPEnvelope;
   import javax.xml.soap.SOAPHeader;
  +import javax.xml.soap.SOAPBody;
   import javax.xml.soap.SOAPHeaderElement;
   import javax.xml.soap.SOAPMessage;
   import javax.xml.soap.SOAPPart;
  @@ -44,6 +45,7 @@
                        SOAPHeaderElement she = sh.addHeaderElement(name);
                        she.setActor(_actorURI);
                        she.addAttribute(se.createName("counter", "", ""), "1");
  +                     she.addAttribute(se.createName("faultCounter", "", ""), "1");
                } catch (Exception e) {
                        e.printStackTrace();
                }
  @@ -58,11 +60,14 @@
                System.out.println("Hey - in Handle response");
                try {
                        String counter = null;
  +                     String faultCounter = null;
  +
                        SOAPMessageContext smc = (SOAPMessageContext) context;
                        SOAPMessage msg = smc.getMessage();
                        SOAPPart sp = msg.getSOAPPart();
                        SOAPEnvelope se = sp.getEnvelope();
                        SOAPHeader sh = se.getHeader();
  +                     SOAPBody sb = se.getBody();
                        Name name =
                        se.createName(
                                                 "HeaderTest",
  @@ -75,10 +80,23 @@
                                she.getAttributeValue(se.createName("counter", "", 
""));
                                System.out.println(
                                                                  "The counter in the 
element sent back is " + counter);
  +
  +                             faultCounter =
  +                             she.getAttributeValue(se.createName("faultCounter", 
"", ""));
  +                             System.out.println(
  +                                                               "The faultCounter in 
the element sent back is " + faultCounter);
  +
                        }
   
  -                     if (counter.equals("3"))
  +                     if ((counter != null) && (counter.equals("3")) && 
(!sb.hasFault())) {
                                JAXRPCHandlerTestCase.completeRoundtrip();
  +                     }
  +
  +                     if ((faultCounter != null) && (faultCounter.equals("3")) && 
(sb.hasFault())) {
  +                             
JAXRPCHandlerTestCase.setFaultRoundtrip(Integer.parseInt(faultCounter));
  +                     }
  +
  +
                } catch (Exception e) {
                        e.printStackTrace();
                }
  @@ -113,3 +131,4 @@
        }
   
   }
  +
  
  
  
  1.3       +62 -1     xml-axis/java/test/wsdl/jaxrpchandler/JAXRPCHandlerTestCase.java
  
  Index: JAXRPCHandlerTestCase.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/test/wsdl/jaxrpchandler/JAXRPCHandlerTestCase.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- JAXRPCHandlerTestCase.java        11 Dec 2002 22:40:21 -0000      1.2
  +++ JAXRPCHandlerTestCase.java        9 Jul 2003 22:00:48 -0000       1.3
  @@ -16,10 +16,17 @@
   public class JAXRPCHandlerTestCase extends TestCase {
   
        private static boolean _roundtrip = false;
  +     private static int _faultRoundtrip = 0;
  +
        public static void completeRoundtrip() {
                _roundtrip = true;
        }
   
  +     public static void setFaultRoundtrip(int faultCount) {
  +             _faultRoundtrip = faultCount;
  +     }
  +
  +
        /**
         * Default constructor for use as service
         */
  @@ -36,6 +43,11 @@
            goStockQuote(args);
        }
   
  +     public void testHandleFail() throws Exception {
  +         String[] args = {};
  +         goFail(args);
  +     }
  +
        public void goStockQuote(String[] args) throws Exception {
                Options opts = new Options( args );
                args = opts.getRemainingArgs();
  @@ -59,12 +71,40 @@
   
        }
   
  +     public void goFail(String[] args) throws Exception {
  +             Options opts = new Options( args );
  +             args = opts.getRemainingArgs();
  +
  +             URL url = new URL(opts.getURL());
  +             String user = opts.getUser();
  +             String passwd = opts.getPassword();
  +             System.out.println("Fail URL is " + url);
  +
  +             _faultRoundtrip = 0;
  +             doTestDeploy();
  +             try {
  +                     float val = getQuoteFail(url, true);
  +             } catch (Exception e) {
  +                     // catch and ignore the exception
  +             }
  +
  +             assertTrue("Expected setting for config-based handlers should be 3"
  +                       + " (1 Request Client Handler increment, passed in header to 
Server Handler "
  +                       + " 1 Fault Server Handler increment, passed back in header 
to Response Client Handler "
  +                       + " 1 Response Client Handler increment)",
  +                       _faultRoundtrip == 3);
  +
  +             doTestClientUndeploy();
  +             doTestServerUndeploy();
  +
  +     }
  +
        public float getQuote (URL url, boolean runJAXRPCHandler) throws Exception {
                StockQuoteService  service = new StockQuoteServiceLocator();
                if (runJAXRPCHandler) {
                        HandlerRegistry hr = service.getHandlerRegistry();
                        java.util.List lhi = new java.util.Vector();
  -                     test.wsdl.jaxrpchandler.ClientHandler mh = new 
test.wsdl.jaxrpchandler.ClientHandler(); 
  +                     test.wsdl.jaxrpchandler.ClientHandler mh = new 
test.wsdl.jaxrpchandler.ClientHandler();
                        Class myhandler = mh.getClass();
                        HandlerInfo hi = new HandlerInfo(myhandler,null,null);
                        lhi.add(hi);
  @@ -79,9 +119,30 @@
                return res;
        }
   
  +     public float getQuoteFail (URL url, boolean runJAXRPCHandler) throws Exception 
{
  +             StockQuoteService  service = new StockQuoteServiceLocator();
  +             if (runJAXRPCHandler) {
  +                     HandlerRegistry hr = service.getHandlerRegistry();
  +                     java.util.List lhi = new java.util.Vector();
  +                     test.wsdl.jaxrpchandler.ClientHandler mh = new 
test.wsdl.jaxrpchandler.ClientHandler();
  +                     Class myhandler = mh.getClass();
  +                     HandlerInfo hi = new HandlerInfo(myhandler,null,null);
  +                     lhi.add(hi);
  +                     hr.setHandlerChain(new QName("","jaxrpchandler"),lhi);
  +             }
  +
  +             float res;
  +
  +             StockQuote sq = service.getjaxrpchandler(url);
  +             res = sq.getQuote("fail");
  +
  +             return res;
  +     }
  +
        public static void main(String[] args) throws Exception {
                JAXRPCHandlerTestCase test = new JAXRPCHandlerTestCase("test");
                test.goStockQuote(args);
  +             test.goFail(args);
        }
   
        public void doTestClientUndeploy() throws Exception {
  
  
  
  1.4       +23 -1     xml-axis/java/test/wsdl/jaxrpchandler/ServerHandler.java
  
  Index: ServerHandler.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/wsdl/jaxrpchandler/ServerHandler.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ServerHandler.java        11 Mar 2003 13:27:49 -0000      1.3
  +++ ServerHandler.java        9 Jul 2003 22:00:48 -0000       1.4
  @@ -18,7 +18,10 @@
   public class ServerHandler implements Handler {
   
        private int _counter = 0;
  +     private int _faultCounter = 0;
  +
        public final static String _actorURI = "myActorURI";
  +
        /**
         * Constructor for ClientHandler.
         */
  @@ -44,6 +47,9 @@
                                SOAPHeaderElement she = (SOAPHeaderElement) 
iter.next();
                                String counter = 
she.getAttributeValue(se.createName("counter","",""));
                                _counter = Integer.parseInt(counter) + 1;
  +
  +                             String faultCounter = 
she.getAttributeValue(se.createName("faultCounter","",""));
  +                             _faultCounter = Integer.parseInt(faultCounter) + 1;    
                 // Increment it to 2
                        }
                } catch (Exception e) {
                        e.printStackTrace();
  @@ -79,7 +85,23 @@
         * @see javax.xml.rpc.handler.Handler#handleFault(MessageContext)
         */
        public boolean handleFault(MessageContext context) {
  -             return false;
  +             try {
  +                     SOAPMessageContext smc = (SOAPMessageContext) context;
  +                     SOAPMessage msg = smc.getMessage();
  +                     SOAPPart sp = msg.getSOAPPart();
  +                     SOAPEnvelope se = sp.getEnvelope();
  +                     SOAPHeader sh = se.getHeader();
  +                     Name name = se.createName("HeaderTest", "AXIS",
  +                                                                       
"http://xml.apache.org/axis";);
  +                     SOAPHeaderElement she = sh.addHeaderElement(name);
  +
  +                     she.addAttribute(se.createName("faultCounter","",""), new 
Integer(_faultCounter +1).toString());
  +                     she.setActor(_actorURI);
  +             } catch (Exception e) {
  +                     e.printStackTrace();
  +             }
  +
  +             return true;
        }
   
        /**
  
  
  
  1.3       +8 -4      xml-axis/java/test/wsdl/jaxrpchandler/StockQuoteImpl.java
  
  Index: StockQuoteImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/wsdl/jaxrpchandler/StockQuoteImpl.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- StockQuoteImpl.java       22 Apr 2003 19:37:09 -0000      1.2
  +++ StockQuoteImpl.java       9 Jul 2003 22:00:48 -0000       1.3
  @@ -2,7 +2,7 @@
    * The Apache Software License, Version 1.1
    *
    *
  - * Copyright (c) 2001-2003 The Apache Software Foundation.  All rights 
  + * Copyright (c) 2001-2003 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -10,7 +10,7 @@
    * are met:
    *
    * 1. Redistributions of source code must retain the above copyright
  - *    notice, this list of conditions and the following disclaimer. 
  + *    notice, this list of conditions and the following disclaimer.
    *
    * 2. Redistributions in binary form must reproduce the above copyright
    *    notice, this list of conditions and the following disclaimer in
  @@ -18,7 +18,7 @@
    *    distribution.
    *
    * 3. The end-user documentation included with the redistribution,
  - *    if any, must include the following acknowledgment:  
  + *    if any, must include the following acknowledgment:
    *       "This product includes software developed by the
    *        Apache Software Foundation (http://www.apache.org/)."
    *    Alternately, this acknowledgment may appear in the software itself,
  @@ -26,7 +26,7 @@
    *
    * 4. The names "AXIS" and "Apache Software Foundation" must
    *    not be used to endorse or promote products derived from this
  - *    software without prior written permission. For written 
  + *    software without prior written permission. For written
    *    permission, please contact [EMAIL PROTECTED]
    *
    * 5. Products derived from this software may not be called "Apache",
  @@ -62,6 +62,10 @@
   public class StockQuoteImpl {
   
     public float getQuote (String symbol) throws Exception {
  +
  +     if ( symbol.equals("fail") ) {
  +             throw new NullPointerException();
  +     }
   
       if ( symbol.equals("XXX") ) return( (float) 55.25 );
       else return( 0 );
  
  
  
  1.99      +13 -5     xml-axis/java/src/org/apache/axis/handlers/soap/SOAPService.java
  
  Index: SOAPService.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/handlers/soap/SOAPService.java,v
  retrieving revision 1.98
  retrieving revision 1.99
  diff -u -r1.98 -r1.99
  --- SOAPService.java  27 Jun 2003 18:35:05 -0000      1.98
  +++ SOAPService.java  9 Jul 2003 22:00:49 -0000       1.99
  @@ -58,6 +58,7 @@
   import org.apache.axis.AxisFault;
   import org.apache.axis.Constants;
   import org.apache.axis.Handler;
  +import org.apache.axis.Message;
   import org.apache.axis.MessageContext;
   import org.apache.axis.SimpleTargetedChain;
   import org.apache.axis.attachments.Attachments;
  @@ -70,6 +71,7 @@
   import org.apache.axis.handlers.HandlerChainImpl;
   import org.apache.axis.handlers.HandlerInfoChainFactory;
   import org.apache.axis.message.SOAPEnvelope;
  +import org.apache.axis.message.SOAPFault;
   import org.apache.axis.message.SOAPHeaderElement;
   import org.apache.axis.providers.BasicProvider;
   import org.apache.axis.soap.SOAPConstants;
  @@ -80,6 +82,7 @@
   import org.w3c.dom.Document;
   
   import javax.xml.namespace.QName;
  +import javax.xml.rpc.soap.SOAPFaultException;
   import java.io.File;
   import java.io.FileInputStream;
   import java.io.IOException;
  @@ -89,10 +92,6 @@
   import java.util.Hashtable;
   import java.util.Vector;
   
  -import javax.xml.rpc.soap.SOAPFaultException;
  -import org.apache.axis.message.SOAPFault;
  -import org.apache.axis.Message;
  -
   /** A <code>SOAPService</code> is a Handler which encapsulates a SOAP
    * invocation.  It has an request chain, an response chain, and a pivot-point,
    * and handles the SOAP semantics when invoke()d.
  @@ -482,7 +481,16 @@
               }
   
               if (result) {
  -                super.invoke(msgContext);
  +                try {
  +                    super.invoke(msgContext);
  +                } catch (AxisFault e) {
  +                    msgContext.setPastPivot(true);
  +                    if (handlerImpl != null) {
  +                        handlerImpl.handleFault(msgContext);
  +                        handlerImpl.destroy();
  +                    }
  +                    throw e;
  +                }
               } else {
                   msgContext.setPastPivot(true);
               }
  
  
  

Reply via email to