Author: dkulp
Date: Fri Apr 17 15:41:33 2009
New Revision: 766058

URL: http://svn.apache.org/viewvc?rev=766058&view=rev
Log:
[CXF-2178] Fix issues with not being able to set http headers with 2.2

Modified:
    
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WrappedMessageContext.java
    
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPConduit.java
    
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/http/ClientServerSessionTest.java
    
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/http/GreeterSessionImpl.java

Modified: 
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WrappedMessageContext.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WrappedMessageContext.java?rev=766058&r1=766057&r2=766058&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WrappedMessageContext.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WrappedMessageContext.java
 Fri Apr 17 15:41:33 2009
@@ -343,6 +343,7 @@
         if (!MessageContext.MESSAGE_OUTBOUND_PROPERTY.equals(mappedKey)) {
             scopes.put(mappedKey, scope);
         }
+        Object ret = null;
         if ((MessageContext.HTTP_RESPONSE_HEADERS.equals(key)
             || MessageContext.HTTP_RESPONSE_CODE.equals(key)
             || MessageContext.OUTBOUND_MESSAGE_ATTACHMENTS.equals(key)
@@ -356,7 +357,6 @@
                     return tmp.put(mappedKey, value);
                 }
             }
-            return null;
         } else if (BindingProvider.USERNAME_PROPERTY.equals(key)) {
             AuthorizationPolicy authPolicy =
                 
(AuthorizationPolicy)message.get(AuthorizationPolicy.class.getName());
@@ -364,9 +364,8 @@
                 authPolicy = new AuthorizationPolicy();
                 message.put(AuthorizationPolicy.class.getName(), authPolicy);
             }
-            String ret = authPolicy.getUserName();
+            ret = authPolicy.getUserName();
             authPolicy.setUserName((String)value);
-            return ret;
         } else if (BindingProvider.PASSWORD_PROPERTY.equals(key)) {
             AuthorizationPolicy authPolicy =
                 
(AuthorizationPolicy)message.get(AuthorizationPolicy.class.getName());
@@ -374,12 +373,14 @@
                 authPolicy = new AuthorizationPolicy();
                 message.put(AuthorizationPolicy.class.getName(), authPolicy);
             }
-            String ret = authPolicy.getPassword();
+            ret = authPolicy.getPassword();
             authPolicy.setPassword((String)value);
-            return ret;
+        } else if (MessageContext.HTTP_REQUEST_HEADERS.equals(key)) {
+            ret = message.put(Message.PROTOCOL_HEADERS, value);
         } else {
-            return message.put(mappedKey, value);
+            ret = message.put(mappedKey, value);
         }
+        return ret;
     }
 
     public final void putAll(Map<? extends String, ? extends Object> t) {

Modified: 
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPConduit.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPConduit.java?rev=766058&r1=766057&r2=766058&view=diff
==============================================================================
--- 
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPConduit.java
 (original)
+++ 
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPConduit.java
 Fri Apr 17 15:41:33 2009
@@ -564,11 +564,23 @@
         //Do we need to maintain a session?
         maintainSession = 
Boolean.TRUE.equals((Boolean)message.get(Message.MAINTAIN_SESSION));
         
-        //If we have any cookies and we are maintaining sessions, then use them
+        //If we have any cookies and we are maintaining sessions, then use 
them        
         if (maintainSession && sessionCookies.size() > 0) {
+            List<String> cookies = null;
+            for (String s : headers.keySet()) {
+                if (HttpHeaderHelper.COOKIE.equalsIgnoreCase(s)) {
+                    cookies = headers.remove(s);
+                    break;
+                }
+            }
+            if (cookies == null) {
+                cookies = new ArrayList<String>();
+            } else {
+                cookies = new ArrayList<String>(cookies);
+            }
+            headers.put(HttpHeaderHelper.COOKIE, cookies);
             for (Cookie c : sessionCookies.values()) {
-                connection.addRequestProperty(HttpHeaderHelper.COOKIE, 
-                                              c.requestCookieHeader());
+                cookies.add(c.requestCookieHeader());
             }
         }
 
@@ -808,8 +820,10 @@
             CastUtils.cast((Map<?, ?>)message.get(Message.PROTOCOL_HEADERS));  
      
         if (null == headers) {
             headers = new LinkedHashMap<String, List<String>>();
-            message.put(Message.PROTOCOL_HEADERS, headers);
+        } else {
+            headers = new LinkedHashMap<String, List<String>>(headers);
         }
+        message.put(Message.PROTOCOL_HEADERS, headers);
         return headers;
     }
     
@@ -825,14 +839,20 @@
         Map<String, List<String>> headers = getSetProtocolHeaders(message);
         for (String header : headers.keySet()) {
             List<String> headerList = headers.get(header);
-            StringBuilder b = new StringBuilder();
-            for (int i = 0; i < headerList.size(); i++) {
-                b.append(headerList.get(i));
-                if (i + 1 < headerList.size()) {
-                    b.append(',');
+            if (HttpHeaderHelper.COOKIE.equalsIgnoreCase(header)) {
+                for (String s : headerList) {
+                    connection.addRequestProperty(HttpHeaderHelper.COOKIE, s);
+                }
+            } else {
+                StringBuilder b = new StringBuilder();
+                for (int i = 0; i < headerList.size(); i++) {
+                    b.append(headerList.get(i));
+                    if (i + 1 < headerList.size()) {
+                        b.append(',');
+                    }
                 }
+                connection.setRequestProperty(header, b.toString());
             }
-            connection.setRequestProperty(header, b.toString());
         }
         if (!connection.getRequestProperties().containsKey("User-Agent")) {
             connection.addRequestProperty("User-Agent", 
Version.getCompleteVersionString());

Modified: 
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/http/ClientServerSessionTest.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/http/ClientServerSessionTest.java?rev=766058&r1=766057&r2=766058&view=diff
==============================================================================
--- 
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/http/ClientServerSessionTest.java
 (original)
+++ 
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/http/ClientServerSessionTest.java
 Fri Apr 17 15:41:33 2009
@@ -20,6 +20,10 @@
 package org.apache.cxf.systest.http;
 
 import java.lang.reflect.UndeclaredThrowableException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import javax.xml.ws.BindingProvider;
 import javax.xml.ws.Endpoint;
@@ -27,6 +31,7 @@
 
 import org.apache.cxf.greeter_control.Greeter;
 import org.apache.cxf.greeter_control.GreeterService;
+import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -49,22 +54,56 @@
 
         try {
             Greeter greeter = service.getGreeterPort();
-            
((BindingProvider)greeter).getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY,
-                                                                   true);
-            String greeting = greeter.greetMe("Bonjour");
             
+            BindingProvider bp = (BindingProvider)greeter;
+            
bp.getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);
+            
+            
+            Map<String, List<String>> headers 
+                = 
CastUtils.cast((Map)bp.getRequestContext().get("javax.xml.ws.http.request.headers"));
+
+            if (headers == null) {
+                headers = new HashMap<String, List<String>>();
+                
bp.getRequestContext().put("javax.xml.ws.http.request.headers", headers);
+            }
+
+            List<String> cookies = Arrays.asList(new String[] {"a=a", "b=b"});
+            headers.put("Cookie", cookies);
+            
+            String greeting = greeter.greetMe("Bonjour");
+            String cookie = "";
+            if (greeting.indexOf(';') != -1) {
+                cookie = greeting.substring(greeting.indexOf(';'));
+                greeting = greeting.substring(0, greeting.indexOf(';'));
+            }
             assertNotNull("no response received from service", greeting);
             assertEquals("Hello Bonjour", greeting);
-            
+            assertTrue(cookie.contains("a=a"));
+            assertTrue(cookie.contains("b=b"));
+
             greeting = greeter.greetMe("Hello");
+            cookie = "";
+            if (greeting.indexOf(';') != -1) {
+                cookie = greeting.substring(greeting.indexOf(';'));
+                greeting = greeting.substring(0, greeting.indexOf(';'));
+            }
+
             assertNotNull("no response received from service", greeting);
             assertEquals("Hello Bonjour", greeting);
+            assertTrue(cookie.contains("a=a"));
+            assertTrue(cookie.contains("b=b"));
             
             
             greeting = greeter.greetMe("NiHao");
+            cookie = "";
+            if (greeting.indexOf(';') != -1) {
+                cookie = greeting.substring(greeting.indexOf(';'));
+                greeting = greeting.substring(0, greeting.indexOf(';'));
+            }
             assertNotNull("no response received from service", greeting);
             assertEquals("Hello Hello", greeting);
-
+            assertTrue(cookie.contains("a=a"));
+            assertTrue(cookie.contains("b=b"));
         } catch (UndeclaredThrowableException ex) {
             throw (Exception)ex.getCause();
         }

Modified: 
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/http/GreeterSessionImpl.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/http/GreeterSessionImpl.java?rev=766058&r1=766057&r2=766058&view=diff
==============================================================================
--- 
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/http/GreeterSessionImpl.java
 (original)
+++ 
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/http/GreeterSessionImpl.java
 Fri Apr 17 15:41:33 2009
@@ -24,6 +24,8 @@
 
 import javax.annotation.Resource;
 import javax.jws.WebService;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 import javax.xml.ws.AsyncHandler;
 import javax.xml.ws.Response;
@@ -31,6 +33,7 @@
 import javax.xml.ws.WebServiceException;
 import javax.xml.ws.handler.MessageContext;
 
+
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.greeter_control.Greeter;
 import org.apache.cxf.greeter_control.types.GreetMeResponse;
@@ -55,8 +58,16 @@
         LOG.info("Executing operation greetMe");        
         LOG.info("Message received: " + me);
         MessageContext mc = context.getMessageContext();
-        HttpSession session = 
((javax.servlet.http.HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST))
-            .getSession();
+        HttpServletRequest req = 
(HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST);
+        Cookie cookies[] = req.getCookies();
+        String val = "";
+        if (cookies != null) {
+            for (Cookie cookie : cookies) {
+                val += ";" + cookie.getName() + "=" + cookie.getValue();
+            }
+        }
+        
+        HttpSession session = req.getSession();
         // Get a session property "counter" from context
         if (session == null) {
             throw new WebServiceException("No session in WebServiceContext");
@@ -69,7 +80,7 @@
         
         session.setAttribute("name", me);
         
-        return "Hello " + name;
+        return "Hello " + name + val;
     }
     
 


Reply via email to