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