You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2008/12/15 16:50:12 UTC

svn commit: r726720 - /servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-http/src/main/java/org/apache/servicemix/http/endpoints/HttpSoapProviderMarshaler.java

Author: gnodet
Date: Mon Dec 15 07:50:11 2008
New Revision: 726720

URL: http://svn.apache.org/viewvc?rev=726720&view=rev
Log:
SM-1733: servicemix-http provider endpoint may convey incorrect http headers, leading to problems

Modified:
    servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-http/src/main/java/org/apache/servicemix/http/endpoints/HttpSoapProviderMarshaler.java

Modified: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-http/src/main/java/org/apache/servicemix/http/endpoints/HttpSoapProviderMarshaler.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-http/src/main/java/org/apache/servicemix/http/endpoints/HttpSoapProviderMarshaler.java?rev=726720&r1=726719&r2=726720&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-http/src/main/java/org/apache/servicemix/http/endpoints/HttpSoapProviderMarshaler.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-http/src/main/java/org/apache/servicemix/http/endpoints/HttpSoapProviderMarshaler.java Mon Dec 15 07:50:11 2008
@@ -20,6 +20,9 @@
 import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
 
 import javax.jbi.messaging.MessageExchange;
 import javax.jbi.messaging.NormalizedMessage;
@@ -34,6 +37,7 @@
 import org.apache.servicemix.soap.interceptors.jbi.JbiConstants;
 import org.apache.servicemix.soap.interceptors.xml.StaxInInterceptor;
 import org.mortbay.io.ByteArrayBuffer;
+import org.mortbay.jetty.HttpHeaders;
 import org.mortbay.jetty.HttpMethods;
 
 /**
@@ -43,11 +47,22 @@
  */
 public class HttpSoapProviderMarshaler implements HttpProviderMarshaler {
 
+    private static final Set<String> DEFAULT_HEADER_BLACKLIST =
+            new HashSet<String>(
+                Arrays.asList(HttpHeaders.AUTHORIZATION,
+                              HttpHeaders.EXPECT,
+                              HttpHeaders.FORWARDED,
+                              HttpHeaders.FROM,
+                              HttpHeaders.HOST,
+                              HttpHeaders.CONTENT_ENCODING,
+                              HttpHeaders.CONTENT_TYPE));
+
     private Binding<?> binding;
     private boolean useJbiWrapper = true;
     private Policy[] policies;
     private String baseUrl;
     private String soapAction;
+    private Set<String> headerBlackList = DEFAULT_HEADER_BLACKLIST;
 
     public Binding<?> getBinding() {
         return binding;
@@ -89,6 +104,19 @@
         return soapAction;
     }
     
+    public Set<String> getHeaderBlackList() {
+        return headerBlackList;
+    }
+
+    /**
+     * Specifies a list of headers to not include in the HTTP request.
+     * 
+     * @param headerBlackList list of headers to not include in the HTTP request
+     */
+    public void setHeaderBlackList(Set<String> headerBlackList) {
+        this.headerBlackList = headerBlackList;
+    }
+
     public void createRequest(final MessageExchange exchange, 
                               final NormalizedMessage inMsg, 
                               final SmxHttpExchange httpExchange) throws Exception {
@@ -107,7 +135,9 @@
         httpExchange.setRequestContent(new ByteArrayBuffer(baos.toByteArray()));
         
         for (String header : msg.getTransportHeaders().keySet()) {
-            httpExchange.setRequestHeader(header, msg.getTransportHeaders().get(header));
+            if (!isBlackListed(header)) {
+                httpExchange.setRequestHeader(header, msg.getTransportHeaders().get(header));
+            }
         }
         if (soapAction != null) {
             httpExchange.setRequestHeader(SoapConstants.SOAP_ACTION_HEADER, soapAction);
@@ -145,4 +175,14 @@
         return chain;
     }
 
+    /**
+     * checks if a property is on black list
+     *
+     * @param name the property
+     * @return true if on black list
+     */
+    protected boolean isBlackListed(String name) {
+        return this.headerBlackList != null && this.headerBlackList.contains(name);
+    }
+
 }