Author: dushan
Date: Sun May 29 18:27:45 2016
New Revision: 1746042
URL: http://svn.apache.org/viewvc?rev=1746042&view=rev
Log:
merging https://issues.apache.org/jira/browse/SYNAPSE-1025, integration tests
were verified
Modified:
synapse/trunk/java/modules/transports/core/nhttp/pom.xml
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/NhttpConstants.java
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/ServerWorker.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/SourceRequest.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/SourceResponse.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/TargetResponse.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/PassThroughTransportUtils.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/SourceResponseFactory.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/TargetRequestFactory.java
Modified: synapse/trunk/java/modules/transports/core/nhttp/pom.xml
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/pom.xml?rev=1746042&r1=1746041&r2=1746042&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/pom.xml (original)
+++ synapse/trunk/java/modules/transports/core/nhttp/pom.xml Sun May 29
18:27:45 2016
@@ -158,6 +158,11 @@
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
</dependency>
+
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ </dependency>
<!-- BouncyCastle API which is required when validating Certificates.
-->
<dependency>
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/NhttpConstants.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/NhttpConstants.java?rev=1746042&r1=1746041&r2=1746042&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/NhttpConstants.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/NhttpConstants.java
Sun May 29 18:27:45 2016
@@ -166,4 +166,10 @@ public class NhttpConstants {
//property name of nhttp log directory
public static final String NHTTP_LOG_DIRECTORY = "nhttp.log.directory";
+
+ /**
+ * This holds a MultiValue Map, which keeps transport headers' values
other than last value
+ * (in order they appear) against the transport header.
+ */
+ public static final String EXCESS_TRANSPORT_HEADERS =
"EXCESS_TRANSPORT_HEADERS";
}
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=1746042&r1=1746041&r2=1746042&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
Sun May 29 18:27:45 2016
@@ -69,6 +69,7 @@ public class ClientWorker implements Run
this.expectEntityBody = response.isExpectResponseBody();
Map<String,String> headers = response.getHeaders();
+ Map excessHeaders = response.getExcessHeaders();
String oriURL = headers.get(PassThroughConstants.LOCATION);
@@ -141,6 +142,7 @@ public class ClientWorker implements Run
headerMap.put(headerEntry.getKey(), headerEntry.getValue());
}
responseMsgCtx.setProperty(MessageContext.TRANSPORT_HEADERS,
headerMap);
+ responseMsgCtx.setProperty(NhttpConstants.EXCESS_TRANSPORT_HEADERS,
excessHeaders);
if (headerMap.get(HTTP.CONTENT_LEN) != null){
responseMsgCtx.setProperty(PassThroughConstants.ORIGINAL_CONTENT_LENGTH,
headerMap.get(HTTP.CONTENT_LEN));
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=1746042&r1=1746041&r2=1746042&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 May 29 18:27:45 2016
@@ -135,4 +135,7 @@ public class PassThroughConstants {
public static final String
COPY_CONTENT_LENGTH_FROM_INCOMING="COPY_CONTENT_LENGTH_FROM_INCOMING";
public static final String ORIGINAL_CONTENT_LENGTH
="ORIGINAL_CONTENT_LENGTH";
+
+ //Http method type constants to be used in synapse
+ public static final String HTTP_HEAD = "HEAD";
}
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=1746042&r1=1746041&r2=1746042&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
Sun May 29 18:27:45 2016
@@ -430,6 +430,7 @@ public class ServerWorker implements Run
* @return the Axis2 message context created
*/
private MessageContext createMessageContext(SourceRequest request) {
+ Map excessHeaders = request.getExcessHeaders();
ConfigurationContext cfgCtx =
sourceConfiguration.getConfigurationContext();
MessageContext msgContext =
new MessageContext();
@@ -477,6 +478,8 @@ public class ServerWorker implements Run
headers.put(entry.getKey(), entry.getValue());
}
msgContext.setProperty(MessageContext.TRANSPORT_HEADERS, headers);
+ msgContext.setProperty(NhttpConstants.EXCESS_TRANSPORT_HEADERS,
excessHeaders);
+
if (headers.get(HTTP.CONTENT_LEN) != null){
msgContext.setProperty(PassThroughConstants.ORIGINAL_CONTENT_LENGTH,
headers.get(HTTP.CONTENT_LEN));
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/SourceRequest.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/SourceRequest.java?rev=1746042&r1=1746041&r2=1746042&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/SourceRequest.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/SourceRequest.java
Sun May 29 18:27:45 2016
@@ -20,6 +20,7 @@
package org.apache.synapse.transport.passthru;
+import org.apache.commons.collections.map.MultiValueMap;
import org.apache.http.*;
import org.apache.http.message.BasicHttpResponse;
import org.apache.http.nio.ContentDecoder;
@@ -65,6 +66,10 @@ public class SourceRequest {
/** The connection from the client */
private NHttpServerConnection connection = null;
+
+ /** Excess headers of the request */
+ private Map excessHeaders = new MultiValueMap();
+
public SourceRequest(SourceConfiguration sourceConfiguration,
HttpRequest request,
@@ -87,9 +92,13 @@ public class SourceRequest {
Header[] headers = request.getAllHeaders();
if (headers != null) {
for (Header header : headers) {
- this.headers.put(header.getName(), header.getValue());
- }
- }
+ if(this.headers.containsKey(header.getName())) {
+ addExcessHeader(header);
+ } else {
+ this.headers.put(header.getName(), header.getValue());
+ }
+ }
+ }
}
/**
@@ -181,4 +190,12 @@ public class SourceRequest {
public boolean isEntityEnclosing() {
return entityEnclosing;
}
+
+ public Map getExcessHeaders() {
+ return this.excessHeaders;
+ }
+
+ public void addExcessHeader(Header h) {
+ this.excessHeaders.put(h.getName(), h.getValue());
+ }
}
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/SourceResponse.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/SourceResponse.java?rev=1746042&r1=1746041&r2=1746042&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/SourceResponse.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/SourceResponse.java
Sun May 29 18:27:45 2016
@@ -31,15 +31,17 @@ import org.apache.synapse.transport.pass
import java.io.IOException;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.Map;
import java.util.Set;
+import java.util.TreeSet;
public class SourceResponse {
private Pipe pipe = null;
/** Transport headers */
- private Map<String, String> headers = new HashMap<String, String>();
+ private Map<String, TreeSet<String>> headers = new HashMap<String,
TreeSet<String>>();
/** Status of the response */
private int status = HttpStatus.SC_OK;
@@ -58,6 +60,7 @@ public class SourceResponse {
private SourceRequest request = null;
+
public SourceResponse(SourceConfiguration config, int status,
SourceRequest request) {
this(config, status, null, request);
}
@@ -99,7 +102,11 @@ public class SourceResponse {
BasicHttpEntity entity = new BasicHttpEntity();
int contentLength = -1;
- String contentLengthHeader = headers.get(HTTP.CONTENT_LEN);
+ String contentLengthHeader = null;
+ if(headers.get(HTTP.CONTENT_LEN) != null &&
headers.get(HTTP.CONTENT_LEN).size() > 0) {
+ contentLengthHeader = headers.get(HTTP.CONTENT_LEN).first();
+ }
+
if (contentLengthHeader != null) {
contentLength = Integer.parseInt(contentLengthHeader);
@@ -116,13 +123,17 @@ public class SourceResponse {
response.setEntity(entity);
// set any transport headers
- Set<Map.Entry<String, String>> entries = headers.entrySet();
+ Set<Map.Entry<String, TreeSet<String>>> entries = headers.entrySet();
- for (Map.Entry<String, String> entry : entries) {
- if (entry.getKey() != null) {
- response.addHeader(entry.getKey(), entry.getValue());
+ for (Map.Entry<String, TreeSet<String>> entry : entries) {
+ if (entry.getKey() != null) {
+ Iterator<String> i = entry.getValue().iterator();
+ while(i.hasNext()) {
+ response.addHeader(entry.getKey(), i.next());
+ }
}
}
+
SourceContext.updateState(conn, ProtocolState.RESPONSE_HEAD);
@@ -163,10 +174,18 @@ public class SourceResponse {
}
public void addHeader(String name, String value) {
- headers.put(name, value);
+ if(headers.get(name) == null) {
+ TreeSet<String> values = new TreeSet<String>();
+ values.add(value);
+ headers.put(name, values);
+ } else {
+ TreeSet<String> values = headers.get(name);
+ values.add(value);
+ }
}
public void setStatus(int status) {
this.status = status;
- }
+ }
+
}
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=1746042&r1=1746041&r2=1746042&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
Sun May 29 18:27:45 2016
@@ -45,8 +45,10 @@ import java.io.IOException;
import java.io.OutputStream;
import java.net.URL;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.Map;
import java.util.Set;
+import java.util.TreeSet;
import javax.xml.stream.XMLStreamException;
@@ -61,8 +63,8 @@ public class TargetRequest {
private Pipe pipe = null;
/** Headers map */
- private Map<String, String> headers = new HashMap<String, String>();
-
+ private Map<String, TreeSet<String>> headers = new HashMap<String,
TreeSet<String>>();
+
/** URL */
private URL url;
@@ -125,11 +127,17 @@ public class TargetRequest {
(url.getQuery() != null ? "?" + url.getQuery() : "");
long contentLength = -1;
- String contentLengthHeader = headers.get(HTTP.CONTENT_LEN);
+ String contentLengthHeader = null;
+
+ if(headers.get(HTTP.CONTENT_LEN) != null &&
headers.get(HTTP.CONTENT_LEN).size() > 0) {
+ contentLengthHeader = headers.get(HTTP.CONTENT_LEN).first();
+ }
+
if (contentLengthHeader != null) {
contentLength = Integer.parseInt(contentLengthHeader);
headers.remove(HTTP.CONTENT_LEN);
}
+
MessageContext requestMsgCtx =
TargetContext.get(conn).getRequestMsgCtx();
Long lengthValue = (Long) requestMsgCtx.getProperty(
@@ -152,7 +160,7 @@ public class TargetRequest {
!requestMsgCtx.isPropertyTrue(PassThroughConstants.MESSAGE_BUILDER_INVOKED)) {
// If the message is multipart/related but it hasn't been
built
// we can copy the content-type header of the request
- headers.put(HTTP.CONTENT_TYPE, trpContentType);
+ addHeader(HTTP.CONTENT_TYPE, trpContentType);
}
}
}
@@ -184,10 +192,16 @@ public class TargetRequest {
version != null ? version : HttpVersion.HTTP_1_1);
}
- Set<Map.Entry<String, String>> entries = headers.entrySet();
- for (Map.Entry<String, String> entry : entries) {
- request.setHeader(entry.getKey(), entry.getValue());
- }
+
+ Set<Map.Entry<String, TreeSet<String>>> entries = headers.entrySet();
+ for (Map.Entry<String, TreeSet<String>> entry : entries) {
+ if (entry.getKey() != null) {
+ Iterator<String> i = entry.getValue().iterator();
+ while(i.hasNext()) {
+ request.addHeader(entry.getKey(), i.next());
+ }
+ }
+ }
//setup wsa action..
if (request != null){
@@ -235,6 +249,29 @@ public class TargetRequest {
}
}
+
+ public void addHeader(String name, String value) {
+ if (headers.get(name) == null) {
+ TreeSet<String> values = new TreeSet<String>();
+ values.add(value);
+ if (HTTP.CONTENT_TYPE.equalsIgnoreCase(name)) {
+ headers.put(HTTP.CONTENT_TYPE, values);
+ } else {
+ headers.put(name, values);
+ }
+ } else {
+ if (HTTP.CONTENT_TYPE.equalsIgnoreCase(name)) {
+ headers.remove(HTTP.CONTENT_TYPE);
+ TreeSet<String> values = new TreeSet<String>();
+ values.add(value);
+ headers.put(HTTP.CONTENT_TYPE, values);
+ } else {
+ TreeSet<String> values = headers.get(name);
+ values.add(value);
+ }
+ }
+ }
+
/**
* Handles the chunking messages in PassThough context, create a
temporary buffer and
* calculate the message size before writing to the external buffer, which
is required the
@@ -312,9 +349,6 @@ public class TargetRequest {
return hasEntityBody;
}
- public void addHeader(String name, String value) {
- headers.put(name, value);
- }
public String getMethod() {
return method;
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/TargetResponse.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/TargetResponse.java?rev=1746042&r1=1746041&r2=1746042&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/TargetResponse.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/TargetResponse.java
Sun May 29 18:27:45 2016
@@ -29,6 +29,7 @@ import org.apache.synapse.transport.pass
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
+import org.apache.commons.collections.map.MultiValueMap;
/**
* This class represents a response coming from the target server.
@@ -40,6 +41,9 @@ public class TargetResponse {
/** Headers of the response */
private Map<String, String> headers = new HashMap<String, String>();
+
+ /** Excess headers of the response */
+ private Map excessHeaders = new MultiValueMap();
/** The status of the response */
private int status = HttpStatus.SC_OK;
@@ -77,9 +81,13 @@ public class TargetResponse {
Header[] headers = response.getAllHeaders();
if (headers != null) {
for (Header header : headers) {
- this.headers.put(header.getName(), header.getValue());
- }
- }
+ if(this.headers.containsKey(header.getName())) {
+ addExcessHeader(header);
+ } else {
+ this.headers.put(header.getName(), header.getValue());
+ }
+ }
+ }
this.expectResponseBody = expectResponseBody;
}
@@ -140,6 +148,14 @@ public class TargetResponse {
return headers;
}
+ public Map getExcessHeaders() {
+ return this.excessHeaders;
+ }
+
+ public void addExcessHeader(Header h) {
+ this.excessHeaders.put(h.getName(), h.getValue());
+ }
+
public Pipe getPipe() {
return pipe;
}
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/PassThroughTransportUtils.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/PassThroughTransportUtils.java?rev=1746042&r1=1746041&r2=1746042&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/PassThroughTransportUtils.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/PassThroughTransportUtils.java
Sun May 29 18:27:45 2016
@@ -33,6 +33,7 @@ import org.apache.http.protocol.HTTP;
import org.apache.http.HttpStatus;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.synapse.transport.nhttp.NhttpConstants;
import org.apache.synapse.transport.passthru.PassThroughConstants;
import org.apache.synapse.transport.passthru.ProtocolState;
import org.apache.synapse.transport.passthru.SourceContext;
@@ -117,6 +118,8 @@ public class PassThroughTransportUtils {
boolean preserveServerHeader,
boolean preserveUserAgentHeader) {
Map headers = (Map)
msgContext.getProperty(MessageContext.TRANSPORT_HEADERS);
+ Map excessHeaders = (Map)
msgContext.getProperty(NhttpConstants.EXCESS_TRANSPORT_HEADERS);
+
if (headers == null || headers.isEmpty()) {
return;
@@ -141,6 +144,7 @@ public class PassThroughTransportUtils {
iter.remove();
}
}
+
}
/**
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=1746042&r1=1746041&r2=1746042&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
Sun May 29 18:27:45 2016
@@ -26,12 +26,15 @@ import org.apache.http.protocol.HTTP;
import org.apache.synapse.transport.nhttp.NhttpConstants;
import
org.apache.synapse.transport.nhttp.util.MessageFormatterDecoratorFactory;
import org.apache.synapse.transport.nhttp.util.NhttpUtil;
+import org.apache.synapse.transport.passthru.Pipe;
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.Collection;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.Map;
public class SourceResponseFactory {
@@ -54,7 +57,6 @@ public class SourceResponseFactory {
sourceResponse.addHeader(HTTP.CONTENT_LEN,
(String)
msgContext.getProperty(PassThroughConstants.ORIGINAL_CONTENT_LENGTH));
}
-
if (transportHeaders != null) {
addResponseHeader(sourceResponse, transportHeaders);
} else {
@@ -70,8 +72,21 @@ public class SourceResponseFactory {
}
}
- return sourceResponse;
- }
+
+ // Add excess response header.
+ String excessProp = NhttpConstants.EXCESS_TRANSPORT_HEADERS;
+ Map excessHeaders = (Map) msgContext.getProperty(excessProp);
+ if (excessHeaders != null) {
+ for (Iterator iterator =
excessHeaders.keySet().iterator(); iterator.hasNext();) {
+ String key = (String) iterator.next();
+ for (String excessVal : (Collection<String>)
excessHeaders.get(key)) {
+ sourceResponse.addHeader(key, (String)
excessVal);
+ }
+ }
+ }
+
+ return sourceResponse;
+ }
private static void addResponseHeader(SourceResponse sourceResponse,
Map transportHeaders) {
for (Object entryObj : transportHeaders.entrySet()) {
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/TargetRequestFactory.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/TargetRequestFactory.java?rev=1746042&r1=1746041&r2=1746042&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/TargetRequestFactory.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/TargetRequestFactory.java
Sun May 29 18:27:45 2016
@@ -39,6 +39,8 @@ import org.apache.synapse.transport.pass
import java.net.MalformedURLException;
import java.net.URL;
+import java.util.Collection;
+import java.util.Iterator;
import java.util.Map;
public class TargetRequestFactory {
@@ -126,6 +128,18 @@ public class TargetRequestFactory {
if ("true".equals(fullUrl)) {
request.setFullUrl(true);
}
+
+ // Add excess respsonse header.
+ String excessProp = NhttpConstants.EXCESS_TRANSPORT_HEADERS;
+ Map excessHeaders = (Map) msgContext.getProperty(excessProp);
+ if (excessHeaders != null) {
+ for (Iterator iterator =
excessHeaders.keySet().iterator(); iterator.hasNext();) {
+ String key = (String) iterator.next();
+ for (String excessVal : (Collection<String>)
excessHeaders.get(key)) {
+ request.addHeader(key, (String) excessVal);
+ }
+ }
+ }
return request;
} catch (MalformedURLException e) {