Afkham,

Your change in createDocumentElement causes a regression detected by
the unit tests of the Synapse NHTTP transport. The failing test cases
send POST requests with plain XML and content type application/xml to
the NHTTP transport receiver. Because of your change, the service now
receives an empty message.

Andreas

On Wed, Dec 9, 2009 at 22:25,  <az...@apache.org> wrote:
> Author: azeez
> Date: Wed Dec  9 21:25:21 2009
> New Revision: 888980
>
> URL: http://svn.apache.org/viewvc?rev=888980&view=rev
> Log:
> If it is a REST request and the service or operation cannot be found, do not 
> consume the input stream
>
> Modified:
>    
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java
>
> Modified: 
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java
> URL: 
> http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java?rev=888980&r1=888979&r2=888980&view=diff
> ==============================================================================
> --- 
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java
>  (original)
> +++ 
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java
>  Wed Dec  9 21:25:21 2009
> @@ -66,10 +66,10 @@
>     public static SOAPEnvelope createSOAPMessage(MessageContext msgContext) 
> throws AxisFault {
>         return createSOAPMessage(msgContext, false);
>     }
> -
> +
>     /**
>      * This method will create a SOAPEnvelope based on the InputStream stored 
> on
> -     * the MessageContext. The 'detach' parameter controls whether or not the
> +     * the MessageContext. The 'detach' parameter controls whether or not the
>      * underlying DetachableInputStream is detached at the end of the method. 
> Note,
>      * detaching the DetachableInputStream closes the underlying InputStream 
> that
>      * is stored on the MessageContext.
> @@ -106,7 +106,7 @@
>             
> msgContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING, 
> charSetEnc);
>
>             SOAPEnvelope env = createSOAPMessage(msgContext, inStream, 
> contentType);
> -
> +
>             // if we were told to detach, we will make the call here, this is 
> only applicable
>             // if a DetachableInputStream instance is found on the 
> MessageContext
>             if(detach) {
> @@ -156,7 +156,9 @@
>             // SOAPEnvelope.
>             SOAPFactory soapFactory = new SOAP11Factory();
>             envelope = soapFactory.getDefaultEnvelope();
> -            envelope.getBody().addChild(documentElement);
> +            if (documentElement != null) {
> +                envelope.getBody().addChild(documentElement);
> +            }
>         }
>         return envelope;
>     }
> @@ -164,6 +166,13 @@
>     public static OMElement createDocumentElement(String contentType,
>                                                   MessageContext msgContext,
>                                                   InputStream inStream) 
> throws AxisFault, XMLStreamException {
> +        // If we are handling a REST request, and the dispatchAndVerify 
> method was not able to
> +        // locate the relevant service/operation, we should not try to build 
> a document element
> +        if (msgContext.isDoingREST() &&
> +            (msgContext.getAxisService() == null || 
> msgContext.getAxisOperation() == null)) {
> +            return null;
> +        }
> +
>         OMElement documentElement = null;
>         String type = null;
>         if (contentType != null) {
> @@ -191,7 +200,7 @@
>             Builder builder = BuilderUtil.getBuilderFromSelector(type, 
> msgContext);
>             if (builder != null) {
>                    if (log.isDebugEnabled()) {
> -                       log.debug("createSOAPEnvelope using Builder (" +
> +                       log.debug("createSOAPEnvelope using Builder (" +
>                                  builder.getClass() + ") selected from type 
> (" + type +")");
>                    }
>                 documentElement = builder.processDocument(inStream, 
> contentType, msgContext);
> @@ -435,8 +444,8 @@
>         }
>         return messageFormatterProperty;
>     }
> -
> -
> +
> +
>         /**
>          * This is a helper method to get the response written flag from the 
> RequestResponseTransport
>          * instance.
> @@ -456,7 +465,7 @@
>                 return false;
>             }
>         }
> -
> +
>        /**
>          * This is a helper method to set the response written flag on the 
> RequestResponseTransport
>          * instance.
> @@ -474,7 +483,7 @@
>                }
>            }
>        }
> -
> +
>        /**
>         * This is an internal helper method to retrieve the 
> RequestResponseTransport instance
>         * from the MessageContext object. The MessageContext may be the 
> response MessageContext so
> @@ -484,7 +493,7 @@
>           try {
>                   // If this is the request MessageContext we should find it 
> directly by the getProperty()
>                // method
> -               if 
> (messageContext.getProperty(RequestResponseTransport.TRANSPORT_CONTROL)
> +               if 
> (messageContext.getProperty(RequestResponseTransport.TRANSPORT_CONTROL)
>                           != null) {
>                    return (RequestResponseTransport) 
> messageContext.getProperty(
>                                   RequestResponseTransport.TRANSPORT_CONTROL);
> @@ -497,10 +506,10 @@
>                                                        
> getOperationContext().getMessageContext(
>                                                                        
> WSDLConstants.MESSAGE_LABEL_IN_VALUE).getProperty(
>                                                                               
>          RequestResponseTransport.TRANSPORT_CONTROL);
> -                       }
> +                       }
>                        else {
>                                return null;
> -                       }
> +                       }
>           }
>            catch(AxisFault af) {
>                // probably should not be fatal, so just log the message
> @@ -509,16 +518,16 @@
>                return null;
>            }
>     }
> -
> +
>        /**
> -        * Clean up cached attachment file
> +        * Clean up cached attachment file
>         * @param msgContext
>         */
>        public static void deleteAttachments(MessageContext msgContext) {
>                if (log.isDebugEnabled()) {
>                log.debug("Entering deleteAttachments()");
>            }
> -
> +
>                Attachments attachments = msgContext.getAttachmentMap();
>                LifecycleManager lcm = 
> (LifecycleManager)msgContext.getRootContext().getAxisConfiguration().getParameterValue(DeploymentConstants.ATTACHMENTS_LIFECYCLE_MANAGER);
>            if (attachments != null) {
> @@ -555,7 +564,7 @@
>
>                            if (file != null) {
>                                if(lcm!=null){
> -                                   try{
> +                                   try{
>                                        lcm.deleteOnExit(file);
>                                    }catch(Exception ex){
>                                        file.deleteOnExit();
> @@ -569,16 +578,16 @@
>                    }
>                }
>            }
> -
> +
>            if (log.isDebugEnabled()) {
>                log.debug("Exiting deleteAttachments()");
>            }
>        }
> -
> +
>        /**
>         * This method can be called by components wishing to detach the 
> DetachableInputStream
>         * object that is present on the MessageContext. This is meant to 
> shield components
> -        * from any logic that needs to be executed on the 
> DetachableInputStream in order to
> +        * from any logic that needs to be executed on the 
> DetachableInputStream in order to
>         * have it effectively detached. If the DetachableInputStream is not 
> present, or if
>         * the supplied MessageContext is null, no action will be taken.
>         */
> @@ -597,7 +606,7 @@
>                    if(log.isDebugEnabled()) {
>                        log.debug("Detach not performed for MessageContext: " 
> + msgContext);
>                    }
> -               }
> +               }
>            }
>            catch(Throwable t) {
>                throw AxisFault.makeFault(t);
> @@ -642,8 +651,8 @@
>                 if (msgContext.isServerSide()) {
>                     if (msgContext.isDoingMTOM()) {
>                         enableMTOM = true;
> -                    }
> -                    // in the client side, we enable MTOM if it is optional
> +                    }
> +                    // in the client side, we enable MTOM if it is optional
>                 } else {
>                     enableMTOM = true;
>                 }
> @@ -699,7 +708,7 @@
>         if (msgContext.isDoingREST()) {
>             return true;
>         }
> -
> +
>         Object enableRESTProperty = 
> msgContext.getProperty(Constants.Configuration.ENABLE_REST);
>         if (enableRESTProperty != null) {
>             enableREST = JavaUtils.isTrueExplicitly(enableRESTProperty);
> @@ -739,3 +748,4 @@
>     }
>
>  }
> +
> \ No newline at end of file
>
>
>

Reply via email to