You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by gi...@apache.org on 2003/06/18 13:18:35 UTC

cvs commit: cocoon-2.1/src/blocks/axis/java/org/apache/cocoon/reading AxisRPCReader.java

giacomo     2003/06/18 04:18:35

  Modified:    src/blocks/axis/lib commons-discovery.jar wsdl4j.jar
               src/blocks/axis/samples sitemap.xmap
               lib      jars.xml
               .        status.xml
               src/blocks/axis/java/org/apache/cocoon/reading
                        AxisRPCReader.java
  Added:       src/blocks/axis/lib axis-1.1.jar axis-saaj-1.1.jar
                        axis-jaxrpc-1.1.jar
  Removed:     src/blocks/axis/lib axis-1.0.jar axis-saaj-1.0.jar
                        axis-jaxrpc-1.0.jar
  Log:
  Upgrade to Axis 1.1
  
  Revision  Changes    Path
  1.2       +175 -129  cocoon-2.1/src/blocks/axis/lib/commons-discovery.jar
  
  	<<Binary file>>
  
  
  1.2       +422 -417  cocoon-2.1/src/blocks/axis/lib/wsdl4j.jar
  
  	<<Binary file>>
  
  
  1.1                  cocoon-2.1/src/blocks/axis/lib/axis-1.1.jar
  
  	<<Binary file>>
  
  
  1.1                  cocoon-2.1/src/blocks/axis/lib/axis-saaj-1.1.jar
  
  	<<Binary file>>
  
  
  1.1                  cocoon-2.1/src/blocks/axis/lib/axis-jaxrpc-1.1.jar
  
  	<<Binary file>>
  
  
  1.2       +3 -1      cocoon-2.1/src/blocks/axis/samples/sitemap.xmap
  
  Index: sitemap.xmap
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/axis/samples/sitemap.xmap,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -d -b -u -r1.1 -r1.2
  --- sitemap.xmap	15 Mar 2003 22:21:55 -0000	1.1
  +++ sitemap.xmap	18 Jun 2003 11:18:34 -0000	1.2
  @@ -34,7 +34,9 @@
   
       <!-- Match SOAP RPC Router requests -->
       <map:match pattern="rpcrouter">
  -      <map:read type="soap-rpc" mime-type="text/xml"/>
  +      <map:read type="soap-rpc" mime-type="text/xml">
  +        <in-development-stage>false</in-development-stage>
  +      </map:read>
       </map:match>
   
       <!-- Send all non qualified requests to the status page -->
  
  
  
  1.49      +4 -4      cocoon-2.1/lib/jars.xml
  
  Index: jars.xml
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/lib/jars.xml,v
  retrieving revision 1.48
  retrieving revision 1.49
  diff -u -d -b -u -r1.48 -r1.49
  --- jars.xml	15 Jun 2003 16:15:20 -0000	1.48
  +++ jars.xml	18 Jun 2003 11:18:34 -0000	1.49
  @@ -709,7 +709,7 @@
     <title>???</title>
     <description>???</description>
     <used-by>Axis block</used-by>
  -  <lib>axis/lib/axis-saaj-1.0.jar</lib>
  +  <lib>axis/lib/axis-saaj-1.1.jar</lib>
     <homepage>???</homepage>
    </file>
   
  @@ -733,7 +733,7 @@
     <title>???</title>
     <description>???</description>
     <used-by>Axis block</used-by>
  -  <lib>axis/lib/axis-jaxrpc-1.0.jar</lib>
  +  <lib>axis/lib/axis-jaxrpc-1.1.jar</lib>
     <homepage>???</homepage>
    </file>
   
  @@ -741,7 +741,7 @@
     <title>???</title>
     <description>???</description>
     <used-by>Axis block</used-by>
  -  <lib>axis/lib/axis-1.0.jar</lib>
  +  <lib>axis/lib/axis-1.1.jar</lib>
     <homepage>???</homepage>
    </file>
   
  
  
  
  1.58      +4 -0      cocoon-2.1/status.xml
  
  Index: status.xml
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/status.xml,v
  retrieving revision 1.57
  retrieving revision 1.58
  diff -u -d -b -u -r1.57 -r1.58
  --- status.xml	18 Jun 2003 11:06:31 -0000	1.57
  +++ status.xml	18 Jun 2003 11:18:35 -0000	1.58
  @@ -181,6 +181,10 @@
     <changes>
   
    <release version="@version@" date="@date@">
  +  <action dev="GP" type="iupdate">
  +    Upgraded to new Axis 1.1 release
  +  </action>
  +  <action dev="JH" type="fix" fixes-bug="20658" due-to="Alfred Nathaniel" due-to-email="Alfred.Nathaniel@swx.com">
     <action dev="CZ" type="add">
       Adding concept of parent-aware components, making e.g. the usage of 
       selectors with a component manager hierarchy much easier.
  
  
  
  1.3       +92 -19    cocoon-2.1/src/blocks/axis/java/org/apache/cocoon/reading/AxisRPCReader.java
  
  Index: AxisRPCReader.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/axis/java/org/apache/cocoon/reading/AxisRPCReader.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -d -b -u -r1.2 -r1.3
  --- AxisRPCReader.java	11 Mar 2003 17:44:17 -0000	1.2
  +++ AxisRPCReader.java	18 Jun 2003 11:18:35 -0000	1.3
  @@ -59,14 +59,19 @@
   import javax.servlet.ServletContext;
   import javax.servlet.http.HttpServletRequest;
   import javax.servlet.http.HttpServletResponse;
  +import javax.servlet.http.HttpUtils;
   import javax.xml.soap.SOAPException;
   
   import org.apache.avalon.framework.activity.Disposable;
   import org.apache.avalon.framework.component.ComponentException;
   import org.apache.avalon.framework.component.ComponentManager;
  +import org.apache.avalon.framework.configuration.Configurable;
  +import org.apache.avalon.framework.configuration.Configuration;
  +import org.apache.avalon.framework.configuration.ConfigurationException;
   import org.apache.avalon.framework.parameters.Parameters;
   
   import org.apache.axis.AxisFault;
  +import org.apache.axis.Constants;
   import org.apache.axis.Message;
   import org.apache.axis.MessageContext;
   import org.apache.axis.soap.SOAPConstants;
  @@ -79,6 +84,7 @@
   import org.apache.cocoon.environment.SourceResolver;
   import org.apache.cocoon.environment.http.HttpEnvironment;
   
  +import org.w3c.dom.Element;
   import org.xml.sax.SAXException;
   
   /**
  @@ -108,11 +114,22 @@
    * @version CVS $Id$
    */
   public class AxisRPCReader extends ComposerReader
  -    implements Disposable
  +    implements Configurable, Disposable
   {
       // soap server reference
       private SoapServer m_server;
   
  +    /** Are we in development stage ? */
  +    private boolean m_isDevelompent = false;
  +
  +	/* (non-Javadoc)
  +	 * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)
  +	 */
  +	public void configure(Configuration config) throws ConfigurationException
  +	{
  +        m_isDevelompent = config.getChild("development-stage").getValueAsBoolean(m_isDevelompent );
  +	}
  +
       /**
        * Compose this reader
        *
  @@ -229,6 +246,8 @@
   
               // Set the request(incoming) message field in the context
               msgContext.setRequestMessage(requestMsg);
  +            String url = HttpUtils.getRequestURL(req).toString();
  +            msgContext.setProperty(MessageContext.TRANS_URL, url);
   
               try
               {
  @@ -266,34 +285,40 @@
                   }
   
                   responseMsg = msgContext.getResponseMessage();
  +                if (responseMsg == null) {
  +                    //tell everyone that something is wrong
  +                    throw new Exception("no response message");
               } 
  -            catch (AxisFault e)
  +            } 
  +            catch (AxisFault fault)
               {
                   if (getLogger().isErrorEnabled())
                   {
  -                    getLogger().error("Axis Fault", e);
  +                    getLogger().error("Axis Fault", fault);
                   }
   
  -                // It's been suggested that a lack of SOAPAction
  -                // should produce some other error code (in the 400s)...
  -                int status = getHttpServletResponseStatus(e);
  -                if (status == HttpServletResponse.SC_UNAUTHORIZED)
  -                {
  -                    res.setHeader("WWW-Authenticate","Basic realm=\"AXIS\"");
  +                // log and sanitize
  +                processAxisFault(fault);
  +                configureResponseFromAxisFault(res, fault);
  +                responseMsg = msgContext.getResponseMessage();
  +                if (responseMsg == null) {
  +                    responseMsg = new Message(fault);
                   }
  -
  -                res.setStatus(status);
  -                responseMsg = new Message(e);
               }
               catch (Exception e)
               {
  +                //other exceptions are internal trouble
  +                responseMsg = msgContext.getResponseMessage();
  +                res.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
                   if (getLogger().isErrorEnabled())
                   {
                       getLogger().error("Error during SOAP call", e);
                   }
  -
  -                res.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
  -                responseMsg = new Message(AxisFault.makeFault(e));
  +                if (responseMsg == null) {
  +                    AxisFault fault = AxisFault.makeFault(e);
  +                    processAxisFault(fault);
  +                    responseMsg = new Message(fault);
  +                }
               }
           }
           catch (AxisFault fault)
  @@ -302,9 +327,13 @@
               {
                   getLogger().error("Axis fault occured while perforing request", fault);
               }
  -
  +            processAxisFault(fault);
  +            configureResponseFromAxisFault(res, fault);
  +            responseMsg = msgContext.getResponseMessage();
  +            if( responseMsg == null) {
               responseMsg = new Message(fault);
           }
  +        }
           catch (Exception e)
           {
               throw new ProcessingException("Exception thrown while performing request", e);
  @@ -325,6 +354,50 @@
           {
               getLogger().debug("AxisRPCReader.generate() complete");
           }
  +    }
  +
  +    /**
  +     * routine called whenever an axis fault is caught; where they
  +     * are logged and any other business. The method may modify the fault
  +     * in the process
  +     * @param fault what went wrong.
  +     */
  +    protected void processAxisFault(AxisFault fault) {
  +        //log the fault
  +        Element runtimeException = fault.lookupFaultDetail(
  +                Constants.QNAME_FAULTDETAIL_RUNTIMEEXCEPTION);
  +        if (runtimeException != null) {
  +            getLogger().info("AxisFault:", fault);
  +            //strip runtime details
  +            fault.removeFaultDetail(Constants.QNAME_FAULTDETAIL_RUNTIMEEXCEPTION);
  +        } else if (getLogger().isDebugEnabled()) {
  +            getLogger().debug("AxisFault:", fault);
  +        }
  +        //dev systems only give fault dumps
  +        if (m_isDevelompent) {
  +            //strip out the stack trace
  +            fault.removeFaultDetail(Constants.QNAME_FAULTDETAIL_STACKTRACE);
  +        }
  +    }
  +
  +    /**
  +     * Configure the servlet response status code and maybe other headers
  +     * from the fault info.
  +     * @param response response to configure
  +     * @param fault what went wrong
  +     */
  +    private void configureResponseFromAxisFault(HttpServletResponse response,
  +                                                AxisFault fault) {
  +        // then get the status code
  +        // It's been suggested that a lack of SOAPAction
  +        // should produce some other error code (in the 400s)...
  +        int status = getHttpServletResponseStatus(fault);
  +        if (status == HttpServletResponse.SC_UNAUTHORIZED) {
  +            // unauth access results in authentication request
  +            // TODO: less generic realm choice?
  +          response.setHeader("WWW-Authenticate","Basic realm=\"AXIS\"");
  +        }
  +        response.setStatus(status);
       }
   
       /**