Author: hiranya
Date: Sun Jul 14 03:58:07 2013
New Revision: 1502935

URL: http://svn.apache.org/r1502935
Log:
Committing a part of the patch to SYNAPSE-935

Added:
    synapse/trunk/java/repository/conf/sample/synapse_sample_800.xml
Modified:
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/PropertyMediator.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/SynapseXPath.java
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughConstants.java
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughHttpSender.java
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/BufferFactory.java

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/PropertyMediator.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/PropertyMediator.java?rev=1502935&r1=1502934&r2=1502935&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/PropertyMediator.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/PropertyMediator.java
 Sun Jul 14 03:58:07 2013
@@ -19,6 +19,7 @@
 
 package org.apache.synapse.mediators.builtin;
 
+import org.apache.http.protocol.HTTP;
 import org.apache.synapse.MessageContext;
 import org.apache.synapse.SynapseLog;
 import org.apache.synapse.SynapseException;
@@ -64,7 +65,7 @@ public class PropertyMediator extends Ab
     /** Set the property (ACTION_SET) or remove it (ACTION_REMOVE). Defaults 
to ACTION_SET */
     private int action = ACTION_SET;
 
-    /** Regualar expresion pattern to be evaluated over the property value.
+    /** Regular expression pattern to be evaluated over the property value.
      * Resulting match string will be applied to the property */
     private Pattern pattern;
 
@@ -359,6 +360,23 @@ public class PropertyMediator extends Ab
 
     @Override
     public boolean isContentAware() {
-        return expression != null;
+        if (expression != null) {
+            return expression.isContentAware();
+        }
+
+        boolean contentAware = false;
+        if (XMLConfigConstants.SCOPE_AXIS2.equals(scope)) {
+            //the logic will determine the content-aware true
+            if 
(org.apache.axis2.Constants.Configuration.MESSAGE_TYPE.equals(name)) {
+                contentAware = true;
+            }
+
+        } else if (XMLConfigConstants.SCOPE_TRANSPORT.equals(scope)) {
+            //the logic will determine the content-aware true
+            if (HTTP.CONTENT_ENCODING.equals(name)) {
+                contentAware = true;
+            }
+        }
+        return contentAware;
     }
 }

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/SynapseXPath.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/SynapseXPath.java?rev=1502935&r1=1502934&r2=1502935&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/SynapseXPath.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/xpath/SynapseXPath.java
 Sun Jul 14 03:58:07 2013
@@ -76,6 +76,7 @@ import java.util.*;
  * @see org.apache.synapse.util.xpath.SynapseXPathVariableContext
  */
 public class SynapseXPath extends AXIOMXPath {
+
     private static final long serialVersionUID = 7639226137534334222L;
 
     private static final Log log = LogFactory.getLog(SynapseXPath.class);
@@ -95,13 +96,17 @@ public class SynapseXPath extends AXIOMX
         // TODO: Improve this
         if (xpathString.contains("/")) {
             contentAware = true;
-        } else if (xpathString.contains("get-property('To')") ||
-                xpathString.contains("get-property('From'") ||
+        } else if (xpathString.contains("get-property('From'") ||
                 xpathString.contains("get-property('FAULT')")) {
             contentAware = true;
         } else {
             contentAware = false;
         }
+
+        if (xpathString.contains("$trp") || xpathString.contains("$ctx") ||
+                xpathString.contains("$axis2")) {
+            contentAware = false;
+        }
     }
 
     /**

Modified: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughConstants.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughConstants.java?rev=1502935&r1=1502934&r2=1502935&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughConstants.java
 (original)
+++ 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughConstants.java
 Sun Jul 14 03:58:07 2013
@@ -126,5 +126,4 @@ public class PassThroughConstants {
        
        public static final String WSDL_GEN_HANDLED = "WSDL_GEN_HANDLED";
 
-       
 }

Modified: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughHttpSender.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughHttpSender.java?rev=1502935&r1=1502934&r2=1502935&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughHttpSender.java
 (original)
+++ 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughHttpSender.java
 Sun Jul 14 03:58:07 2013
@@ -26,6 +26,7 @@ import java.io.OutputStream;
 import javax.net.ssl.SSLContext;
 
 import org.apache.axiom.om.OMOutputFormat;
+import org.apache.axiom.util.blob.OverflowBlob;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
 import org.apache.axis2.addressing.AddressingConstants;
@@ -42,7 +43,6 @@ import org.apache.axis2.transport.base.B
 import org.apache.axis2.transport.base.threads.NativeThreadFactory;
 import org.apache.axis2.transport.base.threads.WorkerPool;
 import org.apache.axis2.util.MessageProcessorSelector;
-import org.apache.commons.io.IOUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.http.HttpException;
@@ -306,9 +306,9 @@ public class PassThroughHttpSender exten
                                        OMOutputFormat format = 
PassThroughTransportUtils.getOMOutputFormat(msgContext);
                                        formatter.writeTo(msgContext, format, 
_out, false);
                                        try {
-                           IOUtils.write(_out.toByteArray(),out);
-                           
msgContext.setProperty(PassThroughConstants.PASS_THROUGH_MESSAGE_LENGTH,
-                                _out.toByteArray().length);
+                        long messageSize = 
setStreamAsTempData(formatter,msgContext,format);
+                        
msgContext.setProperty(PassThroughConstants.PASS_THROUGH_MESSAGE_LENGTH,messageSize);
+                        formatter.writeTo(msgContext, format, out, false);
                     } catch (IOException e) {
                         handleException("IO error while building message", e);
                     }
@@ -493,6 +493,29 @@ public class PassThroughHttpSender exten
         }
     }
 
+    /**
+     * Write the stream to a temporary storage and calculate the content length
+     *
+     * @param messageFormatter Formatter used to serialize the message
+     * @param msgContext Message to be serialized
+     * @param format Output format
+     *
+     * @throws IOException if an exception occurred while writing data
+     */
+    private long setStreamAsTempData(MessageFormatter messageFormatter,
+                                     MessageContext msgContext,
+                                     OMOutputFormat format) throws IOException 
{
+
+        OverflowBlob serialized = new OverflowBlob(256, 4096, "http-nio_", 
".dat");
+        OutputStream out = serialized.getOutputStream();
+        try {
+            messageFormatter.writeTo(msgContext, format, out, true);
+        } finally {
+            out.close();
+        }
+        return serialized.getLength();
+    }
+
     private void handleException(String s, Exception e) throws AxisFault {
         log.error(s, e);
         throw new AxisFault(s, e);

Modified: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/BufferFactory.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/BufferFactory.java?rev=1502935&r1=1502934&r2=1502935&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/BufferFactory.java
 (original)
+++ 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/BufferFactory.java
 Sun Jul 14 03:58:07 2013
@@ -52,10 +52,11 @@ public class BufferFactory {
         if (marker == -1) {
             return allocator.allocate(bufferSize);
         } else {
-            lock.lock();
             try {
+                lock.lock();
                 if (marker >= 0) {
                     ByteBuffer b = buffers[marker];
+                    b.clear();
                     buffers[marker] = null;
                     marker--;
                     return b;
@@ -64,14 +65,14 @@ public class BufferFactory {
                 lock.unlock();
             }
         }
-
         return allocator.allocate(bufferSize);
     }
 
     public void release(ByteBuffer buffer) {
-        lock.lock();
         try {
+            lock.lock();
             if (marker < buffers.length - 1) {
+                buffer.clear();
                 buffers[++marker] = buffer;
             }
         } finally {

Added: synapse/trunk/java/repository/conf/sample/synapse_sample_800.xml
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/repository/conf/sample/synapse_sample_800.xml?rev=1502935&view=auto
==============================================================================
--- synapse/trunk/java/repository/conf/sample/synapse_sample_800.xml (added)
+++ synapse/trunk/java/repository/conf/sample/synapse_sample_800.xml Sun Jul 14 
03:58:07 2013
@@ -0,0 +1,39 @@
+<definitions xmlns="http://ws.apache.org/ns/synapse";>
+    <api name="StockQuoteAPI" context="/stockquote">
+        <resource uri-template="/view/{symbol}" methods="GET">
+            <inSequence>
+                <payloadFactory>
+                    <format>
+                        <m0:getQuote xmlns:m0="http://services.samples";>
+                            <m0:request>
+                                <m0:symbol>$1</m0:symbol>
+                            </m0:request>
+                        </m0:getQuote>
+                    </format>
+                    <args>
+                        <arg expression="get-property('uri.var.symbol')"/>
+                    </args>
+                </payloadFactory>
+                <send>
+                    <endpoint>
+                        <address 
uri="http://localhost:9000/services/SimpleStockQuoteService"; format="soap11"/>
+                    </endpoint>
+                </send>
+            </inSequence>
+            <outSequence>
+                <send/>
+            </outSequence>
+        </resource>
+        <resource url-pattern="/order/*" methods="POST">
+            <inSequence>
+                <property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>
+                <property name="OUT_ONLY" value="true"/>
+                <send>
+                    <endpoint>
+                        <address 
uri="http://localhost:9000/services/SimpleStockQuoteService"; format="soap11"/>
+                    </endpoint>
+                </send>
+            </inSequence>
+        </resource>
+    </api>
+</definitions>
\ No newline at end of file


Reply via email to