Author: hiranya
Date: Sat May 28 20:52:04 2016
New Revision: 1745938
URL: http://svn.apache.org/viewvc?rev=1745938&view=rev
Log:
Fixing the support for FORCE_HTTP_CONTENT_LENGTH and
COPY_CONTENT_LENGTH_FROM_INCOMING; Applying the patch from SYNAPSE-923
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ClientWorker.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/ServerWorker.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/TargetRequest.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/SourceResponseFactory.java
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ClientWorker.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ClientWorker.java?rev=1745938&r1=1745937&r2=1745938&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ClientWorker.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ClientWorker.java
Sat May 28 20:52:04 2016
@@ -141,6 +141,10 @@ public class ClientWorker implements Run
headerMap.put(headerEntry.getKey(), headerEntry.getValue());
}
responseMsgCtx.setProperty(MessageContext.TRANSPORT_HEADERS,
headerMap);
+ if (headerMap.get(HTTP.CONTENT_LEN) != null){
+
responseMsgCtx.setProperty(PassThroughConstants.ORIGINAL_CONTENT_LENGTH,
+ headerMap.get(HTTP.CONTENT_LEN));
+ }
if (response.getStatus() == 202) {
responseMsgCtx.setProperty(AddressingConstants.
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=1745938&r1=1745937&r2=1745938&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
Sat May 28 20:52:04 2016
@@ -126,4 +126,6 @@ public class PassThroughConstants {
public static final String GET_REQUEST_HANDLED = "GET_REQUEST_HANDLED";
+ public static final String
COPY_CONTENT_LENGTH_FROM_INCOMING="COPY_CONTENT_LENGTH_FROM_INCOMING";
+ public static final String ORIGINAL_CONTENT_LENGTH
="ORIGINAL_CONTENT_LENGTH";
}
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=1745938&r1=1745937&r2=1745938&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
Sat May 28 20:52:04 2016
@@ -359,6 +359,20 @@ public class PassThroughHttpSender exten
}
private void sendRequestContent(final MessageContext msgContext) throws
AxisFault {
+ // NOTE:this a special case where, when the backend service expects
content-length but,
+ // we don't want the message to be built. If FORCE_HTTP_CONTENT_LENGTH
and
+ // COPY_CONTENT_LENGTH_FROM_INCOMING, we assume that the content
coming from the
+ // client side has not changed.
+ boolean forceContentLength =
msgContext.isPropertyTrue(NhttpConstants.FORCE_HTTP_CONTENT_LENGTH);
+ boolean copyContentLength =
msgContext.isPropertyTrue(PassThroughConstants.COPY_CONTENT_LENGTH_FROM_INCOMING);
+
+ if (forceContentLength && copyContentLength &&
+
msgContext.getProperty(PassThroughConstants.ORIGINAL_CONTENT_LENGTH) != null) {
+ long contentLength = Long.parseLong((String)
msgContext.getProperty(
+ PassThroughConstants.ORIGINAL_CONTENT_LENGTH));
+
msgContext.setProperty(PassThroughConstants.PASS_THROUGH_MESSAGE_LENGTH,
contentLength);
+ }
+
if
(Boolean.TRUE.equals(msgContext.getProperty(PassThroughConstants.MESSAGE_BUILDER_INVOKED)))
{
synchronized (msgContext) {
while
(!Boolean.TRUE.equals(msgContext.getProperty("READY2ROCK")) &&
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ServerWorker.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ServerWorker.java?rev=1745938&r1=1745937&r2=1745938&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ServerWorker.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ServerWorker.java
Sat May 28 20:52:04 2016
@@ -477,6 +477,10 @@ public class ServerWorker implements Run
headers.put(entry.getKey(), entry.getValue());
}
msgContext.setProperty(MessageContext.TRANSPORT_HEADERS, headers);
+ if (headers.get(HTTP.CONTENT_LEN) != null){
+
msgContext.setProperty(PassThroughConstants.ORIGINAL_CONTENT_LENGTH,
+ headers.get(HTTP.CONTENT_LEN));
+ }
// Following section is required for throttling to work
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/TargetRequest.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/TargetRequest.java?rev=1745938&r1=1745937&r2=1745938&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/TargetRequest.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/TargetRequest.java
Sat May 28 20:52:04 2016
@@ -163,11 +163,19 @@ public class TargetRequest {
BasicHttpEntity entity = new BasicHttpEntity();
- if (contentLength != -1) {
+ if
(requestMsgCtx.isPropertyTrue(NhttpConstants.FORCE_HTTP_CONTENT_LENGTH)) {
entity.setChunked(false);
- entity.setContentLength(contentLength);
+ if
(requestMsgCtx.isPropertyTrue(PassThroughConstants.COPY_CONTENT_LENGTH_FROM_INCOMING)
+ && contentLength > 0) {
+ entity.setContentLength(contentLength);
+ }
} else {
- entity.setChunked(chunk);
+ if (contentLength != -1) {
+ entity.setChunked(false);
+ entity.setContentLength(contentLength);
+ } else {
+ entity.setChunked(chunk);
+ }
}
((BasicHttpEntityEnclosingRequest) request).setEntity(entity);
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/SourceResponseFactory.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/SourceResponseFactory.java?rev=1745938&r1=1745937&r2=1745938&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/SourceResponseFactory.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/SourceResponseFactory.java
Sat May 28 20:52:04 2016
@@ -29,6 +29,7 @@ import org.apache.synapse.transport.nhtt
import org.apache.synapse.transport.passthru.SourceRequest;
import org.apache.synapse.transport.passthru.SourceResponse;
import org.apache.synapse.transport.passthru.config.SourceConfiguration;
+import org.apache.synapse.transport.passthru.PassThroughConstants;
import java.util.HashMap;
import java.util.Map;
@@ -46,6 +47,14 @@ public class SourceResponseFactory {
// set any transport headers
Map transportHeaders = (Map)
msgContext.getProperty(MessageContext.TRANSPORT_HEADERS);
+
+ if
(msgContext.isPropertyTrue(NhttpConstants.FORCE_HTTP_CONTENT_LENGTH) &&
+
msgContext.isPropertyTrue(PassThroughConstants.COPY_CONTENT_LENGTH_FROM_INCOMING)
&&
+
msgContext.getProperty(PassThroughConstants.ORIGINAL_CONTENT_LENGTH) != null) {
+ sourceResponse.addHeader(HTTP.CONTENT_LEN,
+ (String)
msgContext.getProperty(PassThroughConstants.ORIGINAL_CONTENT_LENGTH));
+ }
+
if (transportHeaders != null) {
addResponseHeader(sourceResponse, transportHeaders);
} else {