You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by du...@apache.org on 2016/05/29 18:27:46 UTC
svn commit: r1746042 - in /synapse/trunk/java/modules/transports/core/nhttp:
./ src/main/java/org/apache/synapse/transport/nhttp/
src/main/java/org/apache/synapse/transport/passthru/
src/main/java/org/apache/synapse/transport/passthru/util/
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) {
Re: svn commit: r1746042 - in /synapse/trunk/java/modules/transports/core/nhttp:
./ src/main/java/org/apache/synapse/transport/nhttp/ src/main/java/org/apache/synapse/transport/passthru/
src/main/java/org/apache/synapse/transport/passthru/util/
Posted by Andreas Veithen <an...@gmail.com>.
Please note that we use spaces, not tabs for indentation.
Andreas
On Sun, May 29, 2016 at 7:27 PM, <du...@apache.org> wrote:
> 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) {
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@synapse.apache.org
For additional commands, e-mail: dev-help@synapse.apache.org