stevel      2003/01/25 11:28:01

  Modified:    java/src/org/apache/axis AxisFault.java Constants.java
               java/src/org/apache/axis/transport/http AxisServlet.java
               java/src/org/apache/axis/providers/java JavaProvider.java
  Log:
  some new methods to add fault detail elements, refactored into existing code, then 
the JavaProvider takes note of any RuntimeExceptions that it catches in the fault 
details...the AxisServlet logs said faults at INFO level, before stripping out the 
marker detail.
  
  Revision  Changes    Path
  1.69      +27 -13    xml-axis/java/src/org/apache/axis/AxisFault.java
  
  Index: AxisFault.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/AxisFault.java,v
  retrieving revision 1.68
  retrieving revision 1.69
  diff -u -r1.68 -r1.69
  --- AxisFault.java    16 Jan 2003 23:47:27 -0000      1.68
  +++ AxisFault.java    25 Jan 2003 19:28:01 -0000      1.69
  @@ -260,10 +260,7 @@
           // Set the exception message (if any) as the fault string
           setFaultString( target.toString() );
   
  -        initFaultDetails();
   
  -        Element el;
  -        
           // If we're derived from AxisFault, then put the exception class
           // into the "exceptionName" element in the details.  This allows
           // us to get back a correct Java Exception class on the other side
  @@ -271,19 +268,14 @@
           
           if ((target instanceof AxisFault) &&
               (target.getClass() != AxisFault.class)) {
  -            el = 
XMLUtils.StringToElement(Constants.QNAME_FAULTDETAIL_EXCEPTIONNAME.getNamespaceURI(),
  -                                          
Constants.QNAME_FAULTDETAIL_EXCEPTIONNAME.getLocalPart(),
  -                                          target.getClass().getName());
  -            
  -            faultDetails.add(el);
  +            addFaultDetail(Constants.QNAME_FAULTDETAIL_EXCEPTIONNAME,
  +                    target.getClass().getName());
           }
  -
           //add stack trace
  -        el =  
XMLUtils.StringToElement(Constants.QNAME_FAULTDETAIL_STACKTRACE.getNamespaceURI(),
  -                Constants.QNAME_FAULTDETAIL_STACKTRACE.getLocalPart(),
  -                                       JavaUtils.stackToString(target));
  +        addFaultDetail(Constants.QNAME_FAULTDETAIL_STACKTRACE,
  +                JavaUtils.stackToString(target));
  +
   
  -        faultDetails.add(el);
       }
   
       /**
  @@ -590,6 +582,28 @@
           }
       }
   
  +    /**
  +     * append an element to the fault detail list
  +     * @param detail the new element to add
  +     * @since Axis1.1
  +     */
  +    public void addFaultDetail(Element detail) {
  +        initFaultDetails();
  +        faultDetails.add(detail);
  +    }
  +
  +    /**
  +     * create an element of the given qname and add it to the details
  +     * @param qname qname of the element
  +     * @param body string to use as body
  +     */
  +    public void addFaultDetail(QName qname,String body) {
  +        Element detail = XMLUtils.StringToElement(qname.getNamespaceURI(),
  +                qname.getLocalPart(),
  +                body);
  +
  +        addFaultDetail(detail);
  +    }
       /**
        * get all the fault details
        * @return an array of fault details, or null for none
  
  
  
  1.110     +5 -0      xml-axis/java/src/org/apache/axis/Constants.java
  
  Index: Constants.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/Constants.java,v
  retrieving revision 1.109
  retrieving revision 1.110
  diff -u -r1.109 -r1.110
  --- Constants.java    19 Jan 2003 21:25:10 -0000      1.109
  +++ Constants.java    25 Jan 2003 19:28:01 -0000      1.110
  @@ -628,6 +628,11 @@
        */
       public static final QName QNAME_FAULTDETAIL_EXCEPTIONNAME = new 
QName(NS_URI_AXIS, "exceptionName");
   
  +    /**
  +     * QName of stack trace element in an axis fault detail.
  +     */
  +    public static final QName QNAME_FAULTDETAIL_RUNTIMEEXCEPTION = new 
QName(NS_URI_AXIS, "isRuntimeException");
  +
       //QNames of well known faults
       /**
        * the no-service fault value
  
  
  
  1.157     +9 -2      
xml-axis/java/src/org/apache/axis/transport/http/AxisServlet.java
  
  Index: AxisServlet.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/transport/http/AxisServlet.java,v
  retrieving revision 1.156
  retrieving revision 1.157
  diff -u -r1.156 -r1.157
  --- AxisServlet.java  16 Jan 2003 23:54:25 -0000      1.156
  +++ AxisServlet.java  25 Jan 2003 19:28:01 -0000      1.157
  @@ -72,6 +72,7 @@
   import org.apache.axis.utils.XMLUtils;
   import org.apache.commons.logging.Log;
   import org.w3c.dom.Document;
  +import org.w3c.dom.Element;
   
   import javax.servlet.ServletContext;
   import javax.servlet.ServletException;
  @@ -218,7 +219,7 @@
   
           PrintWriter writer = response.getWriter();
   
  -        try
  +        try 
           {
               AxisEngine engine = getEngine();
               ServletContext servletContext =
  @@ -385,7 +386,13 @@
        */
       protected void processAxisFault(AxisFault fault) {
           //log the fault
  -        if(exceptionLog.isDebugEnabled()) {
  +        Element runtimeException = fault.lookupFaultDetail(
  +                Constants.QNAME_FAULTDETAIL_RUNTIMEEXCEPTION);
  +        if (runtimeException != null) {
  +            exceptionLog.info(Messages.getMessage("axisFault00"), fault);
  +            //strip runtime details
  +            fault.removeFaultDetail(Constants.QNAME_FAULTDETAIL_RUNTIMEEXCEPTION);
  +        } else if (exceptionLog.isDebugEnabled()) {
               exceptionLog.debug(Messages.getMessage("axisFault00"), fault);
           }
           //dev systems only give fault dumps
  
  
  
  1.98      +9 -2      
xml-axis/java/src/org/apache/axis/providers/java/JavaProvider.java
  
  Index: JavaProvider.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/providers/java/JavaProvider.java,v
  retrieving revision 1.97
  retrieving revision 1.98
  diff -u -r1.97 -r1.98
  --- JavaProvider.java 16 Jan 2003 23:47:29 -0000      1.97
  +++ JavaProvider.java 25 Jan 2003 19:28:01 -0000      1.98
  @@ -331,12 +331,19 @@
           } catch( SAXException exp ) {
               entLog.debug( Messages.getMessage("toAxisFault00"), exp);
               Exception real = exp.getException();
  -            if (real == null)
  +            if (real == null) {
                   real = exp;
  +            }
               throw AxisFault.makeFault(real);
           } catch( Exception exp ) {
               entLog.debug( Messages.getMessage("toAxisFault00"), exp);
  -            throw AxisFault.makeFault(exp);
  +            AxisFault fault = AxisFault.makeFault(exp);
  +            //make a note if this was a runtime fault, for better logging
  +            if (exp instanceof RuntimeException) {
  +                fault.addFaultDetail(Constants.QNAME_FAULTDETAIL_RUNTIMEEXCEPTION,
  +                        "true");
  +            }
  +            throw fault;
           } finally {
               // If this is a request scoped service object which implements
               // ServiceLifecycle, let it know that it's being destroyed now.
  
  
  


Reply via email to