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;
}