You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2013/06/28 15:39:05 UTC
svn commit: r1497769 - in /cxf/branches/2.7.x-fixes: ./
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/
rt/transports/http/src/main/java/org/apache/cxf/transport/http/
rt/transports/http/src/test/java/org/apache/cxf/transport/http/
Author: sergeyb
Date: Fri Jun 28 13:39:05 2013
New Revision: 1497769
URL: http://svn.apache.org/r1497769
Log:
Merged revisions 1497090 via svnmerge from
https://svn.apache.org/repos/asf/cxf/trunk
........
r1497090 | sergeyb | 2013-06-26 21:50:41 +0100 (Wed, 26 Jun 2013) | 1 line
[CXF-5093] Initial try to update HTTPConduit and also RS client code to better deal with requests with no payloads
........
Modified:
cxf/branches/2.7.x-fixes/ (props changed)
cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
cxf/branches/2.7.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPConduit.java
cxf/branches/2.7.x-fixes/rt/transports/http/src/test/java/org/apache/cxf/transport/http/HTTPConduitURLEasyMockTest.java
Propchange: cxf/branches/2.7.x-fixes/
------------------------------------------------------------------------------
Merged /cxf/trunk:r1497090
Propchange: cxf/branches/2.7.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java?rev=1497769&r1=1497768&r2=1497769&view=diff
==============================================================================
--- cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java (original)
+++ cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java Fri Jun 28 13:39:05 2013
@@ -70,6 +70,7 @@ import org.apache.cxf.interceptor.Interc
import org.apache.cxf.interceptor.StaxInEndingInterceptor;
import org.apache.cxf.jaxrs.client.spec.ClientRequestFilterInterceptor;
import org.apache.cxf.jaxrs.client.spec.ClientResponseFilterInterceptor;
+import org.apache.cxf.jaxrs.ext.form.Form;
import org.apache.cxf.jaxrs.impl.MetadataMap;
import org.apache.cxf.jaxrs.impl.UriBuilderImpl;
import org.apache.cxf.jaxrs.model.ParameterType;
@@ -897,11 +898,11 @@ public abstract class AbstractClient imp
}
m.put(Message.CONTENT_TYPE, headers.getFirst(HttpHeaders.CONTENT_TYPE));
+ body = checkIfBodyEmpty(body);
+ setEmptyRequestPropertyIfNeeded(m, body);
m.setContent(List.class, getContentsList(body));
- if (body == null) {
- setEmptyRequestProperty(m, httpMethod);
- }
+
m.put(URITemplate.TEMPLATE_PARAMETERS, getState().getTemplates());
@@ -976,10 +977,20 @@ public abstract class AbstractClient imp
exchange.putAll(reqContext);
}
- protected void setEmptyRequestProperty(Message outMessage, String httpMethod) {
- if ("POST".equals(httpMethod)) {
- outMessage.put("org.apache.cxf.post.empty", true);
+ protected void setEmptyRequestPropertyIfNeeded(Message outMessage, Object body) {
+ if (body == null) {
+ outMessage.put("org.apache.cxf.empty.request", true);
+ }
+ }
+
+ protected Object checkIfBodyEmpty(Object body) {
+ if (body != null
+ && (body.getClass() == String.class && ((String)body).length() == 0
+ || body.getClass() == Form.class && ((Form)body).getData().isEmpty()
+ || Map.class.isAssignableFrom(body.getClass()) && ((Map<?, ?>)body).isEmpty())) {
+ body = null;
}
+ return body;
}
protected void setPlainOperationNameProperty(Message outMessage, String name) {
Modified: cxf/branches/2.7.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPConduit.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPConduit.java?rev=1497769&r1=1497768&r2=1497769&view=diff
==============================================================================
--- cxf/branches/2.7.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPConduit.java (original)
+++ cxf/branches/2.7.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPConduit.java Fri Jun 28 13:39:05 2013
@@ -166,7 +166,8 @@ public abstract class HTTPConduit
private static final String HTTP_POST_METHOD = "POST";
private static final String HTTP_PUT_METHOD = "PUT";
-
+ private static final Set<String> KNOWN_HTTP_VERBS_WITH_NO_CONTENT =
+ new HashSet<String>(Arrays.asList(new String[]{"GET", "DELETE", "HEAD", "OPTIONS", "TRACE"}));
/**
* This constant is the Message(Map) key for a list of visited URLs that
* is used in redirect loop protection.
@@ -1264,21 +1265,16 @@ public abstract class HTTPConduit
// Trust is okay, set up for writing the request.
- // If this is a GET method we must not touch the output
- // stream as this automatically turns the request into a POST.
- // Nor it should be done in case of DELETE/HEAD/OPTIONS
- // - strangely, empty PUTs work ok
String method = getMethod();
- if (!"POST".equals(method)
- && !"PUT".equals(method)) {
+ if (KNOWN_HTTP_VERBS_WITH_NO_CONTENT.contains(method)) {
handleNoOutput();
return;
}
- if (outMessage.get("org.apache.cxf.post.empty") != null) {
+
+ if (outMessage.get("org.apache.cxf.empty.request") != null) {
handleNoOutput();
return;
}
-
setupWrappedStream();
}
Modified: cxf/branches/2.7.x-fixes/rt/transports/http/src/test/java/org/apache/cxf/transport/http/HTTPConduitURLEasyMockTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/rt/transports/http/src/test/java/org/apache/cxf/transport/http/HTTPConduitURLEasyMockTest.java?rev=1497769&r1=1497768&r2=1497769&view=diff
==============================================================================
--- cxf/branches/2.7.x-fixes/rt/transports/http/src/test/java/org/apache/cxf/transport/http/HTTPConduitURLEasyMockTest.java (original)
+++ cxf/branches/2.7.x-fixes/rt/transports/http/src/test/java/org/apache/cxf/transport/http/HTTPConduitURLEasyMockTest.java Fri Jun 28 13:39:05 2013
@@ -42,6 +42,7 @@ import org.apache.cxf.helpers.CastUtils;
import org.apache.cxf.io.AbstractThresholdOutputStream;
import org.apache.cxf.message.Exchange;
import org.apache.cxf.message.Message;
+import org.apache.cxf.message.MessageContentsList;
import org.apache.cxf.message.MessageImpl;
import org.apache.cxf.service.model.EndpointInfo;
import org.apache.cxf.transport.MessageObserver;
@@ -138,7 +139,7 @@ public class HTTPConduitURLEasyMockTest
public void testSend() throws Exception {
control = EasyMock.createNiceControl();
HTTPConduit conduit = setUpConduit(true, false);
- Message message = new MessageImpl();
+ Message message = createMessage();
conduit.prepare(message);
verifySentMessage(conduit, message, "POST");
finalVerify();
@@ -148,14 +149,20 @@ public class HTTPConduitURLEasyMockTest
public void testSendWithHeaders() throws Exception {
control = EasyMock.createNiceControl();
HTTPConduit conduit = setUpConduit(true, false);
- Message message = new MessageImpl();
- message.put("Content-Type", "text/xml;charset=utf8");
+ Message message = createMessage();
setUpHeaders(message);
conduit.prepare(message);
verifySentMessage(conduit, message, true, "POST", false);
finalVerify();
}
+ private Message createMessage() {
+ Message message = new MessageImpl();
+ message.put("Content-Type", "text/xml;charset=utf8");
+ message.setContent(List.class, new MessageContentsList("<body/>"));
+ return message;
+ }
+
public void testSendWithHeadersCheckErrorStream() throws Exception {
control = EasyMock.createNiceControl();
HTTPConduit conduit = setUpConduit(true, false);
@@ -171,7 +178,7 @@ public class HTTPConduitURLEasyMockTest
public void testSendHttpConnection() throws Exception {
control = EasyMock.createNiceControl();
HTTPConduit conduit = setUpConduit(true, false);
- Message message = new MessageImpl();
+ Message message = createMessage();
conduit.prepare(message);
verifySentMessage(conduit, message, "POST");
finalVerify();
@@ -181,7 +188,7 @@ public class HTTPConduitURLEasyMockTest
public void testSendHttpConnectionAutoRedirect() throws Exception {
control = EasyMock.createNiceControl();
HTTPConduit conduit = setUpConduit(true, true);
- Message message = new MessageImpl();
+ Message message = createMessage();
conduit.prepare(message);
verifySentMessage(conduit, message, "POST");
finalVerify();
@@ -216,7 +223,7 @@ public class HTTPConduitURLEasyMockTest
throws Exception {
control = EasyMock.createNiceControl();
HTTPConduit conduit = setUpConduit(true, false);
- Message message = new MessageImpl();
+ Message message = createMessage();
conduit.prepare(message);
message.put(Message.PROCESS_ONEWAY_RESPONSE, Boolean.TRUE);
verifySentMessage(conduit,
@@ -233,7 +240,7 @@ public class HTTPConduitURLEasyMockTest
throws Exception {
control = EasyMock.createNiceControl();
HTTPConduit conduit = setUpConduit(true, false);
- Message message = new MessageImpl();
+ Message message = createMessage();
conduit.prepare(message);
verifySentMessage(conduit,
message,
@@ -249,7 +256,7 @@ public class HTTPConduitURLEasyMockTest
throws Exception {
control = EasyMock.createNiceControl();
HTTPConduit conduit = setUpConduit(true, false);
- Message message = new MessageImpl();
+ Message message = createMessage();
conduit.prepare(message);
verifySentMessage(conduit,
message,