Repository: cxf Updated Branches: refs/heads/master 047f9f291 -> a61b4b82b
CXF-7378 http conduit can return the http url connection response header if configured to do so Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/a61b4b82 Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/a61b4b82 Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/a61b4b82 Branch: refs/heads/master Commit: a61b4b82bea43ce695c4f51eb7cb3e9866dfae9d Parents: 047f9f2 Author: Jason Pell <[email protected]> Authored: Sat May 20 11:17:59 2017 +1000 Committer: Jason Pell <[email protected]> Committed: Sat May 20 11:17:59 2017 +1000 ---------------------------------------------------------------------- .../apache/cxf/transport/http/HTTPConduit.java | 14 +++++-- .../http/HTTPConduitURLEasyMockTest.java | 43 +++++++++++++------- 2 files changed, 40 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/a61b4b82/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPConduit.java ---------------------------------------------------------------------- diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPConduit.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPConduit.java index c809c2e..48c48dc 100644 --- a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPConduit.java +++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPConduit.java @@ -157,7 +157,12 @@ public abstract class HTTPConduit */ public static final String KEY_HTTP_CONNECTION = "http.connection"; public static final String KEY_HTTP_CONNECTION_ADDRESS = "http.connection.address"; - + + public static final String SET_HTTP_RESPONSE_MESSAGE = "org.apache.cxf.transport.http.set.response.message"; + public static final String HTTP_RESPONSE_MESSAGE = "http.responseMessage"; + + public static final String PROCESS_FAULT_ON_HTTP_400 = "org.apache.cxf.transport.process_fault_on_http_400"; + public static final String NO_IO_EXCEPTIONS = "org.apache.cxf.transport.no_io_exceptions"; /** * The Logger for this class. */ @@ -1601,9 +1606,9 @@ public abstract class HTTPConduit // soap fault because of a HTTP 400 should be returned back to the client (SOAP 1.2 spec) if (rc >= 400 && rc != 500 - && !MessageUtils.isTrue(outMessage.getContextualProperty("org.apache.cxf.transport.no_io_exceptions")) + && !MessageUtils.isTrue(outMessage.getContextualProperty(NO_IO_EXCEPTIONS)) && (rc > 400 || !MessageUtils.isTrue(outMessage - .getContextualProperty("org.apache.cxf.transport.process_fault_on_http_400")))) { + .getContextualProperty(PROCESS_FAULT_ON_HTTP_400)))) { throw new HTTPException(rc, getResponseMessage(), url.toURL()); } @@ -1621,6 +1626,9 @@ public abstract class HTTPConduit inMessage.setExchange(exchange); updateResponseHeaders(inMessage); inMessage.put(Message.RESPONSE_CODE, responseCode); + if (MessageUtils.getContextualBoolean(outMessage, SET_HTTP_RESPONSE_MESSAGE, false)) { + inMessage.put(HTTP_RESPONSE_MESSAGE, getResponseMessage()); + } propagateConduit(exchange, inMessage); if (!doProcessResponse(outMessage, responseCode) http://git-wip-us.apache.org/repos/asf/cxf/blob/a61b4b82/rt/transports/http/src/test/java/org/apache/cxf/transport/http/HTTPConduitURLEasyMockTest.java ---------------------------------------------------------------------- diff --git a/rt/transports/http/src/test/java/org/apache/cxf/transport/http/HTTPConduitURLEasyMockTest.java b/rt/transports/http/src/test/java/org/apache/cxf/transport/http/HTTPConduitURLEasyMockTest.java index 476c6df..dae7a58 100644 --- a/rt/transports/http/src/test/java/org/apache/cxf/transport/http/HTTPConduitURLEasyMockTest.java +++ b/rt/transports/http/src/test/java/org/apache/cxf/transport/http/HTTPConduitURLEasyMockTest.java @@ -62,6 +62,8 @@ import org.junit.Test; public class HTTPConduitURLEasyMockTest extends Assert { private static String oldHttpProxyHost; + private static final String HTTP_RESPONSE_MESSAGE = "Some Response Message I can test"; + private enum ResponseStyle { NONE, BACK_CHANNEL, BACK_CHANNEL_ERROR, DECOUPLED, ONEWAY_NONE }; private enum ResponseDelimiter { LENGTH, CHUNKED, EOF }; @@ -138,21 +140,25 @@ public class HTTPConduitURLEasyMockTest extends Assert { @Test public void testSend() throws Exception { control = EasyMock.createNiceControl(); - HTTPConduit conduit = setUpConduit(true, false); + HTTPConduit conduit = setUpConduit(true, false, "POST"); Message message = createMessage(); + message.put(HTTPConduit.SET_HTTP_RESPONSE_MESSAGE, Boolean.FALSE); conduit.prepare(message); verifySentMessage(conduit, message, "POST"); + assertNull(inMessage.get(HTTPConduit.HTTP_RESPONSE_MESSAGE)); finalVerify(); } @Test public void testSendWithHeaders() throws Exception { control = EasyMock.createNiceControl(); - HTTPConduit conduit = setUpConduit(true, false); + HTTPConduit conduit = setUpConduit(true, false, "POST"); Message message = createMessage(); + message.put(HTTPConduit.SET_HTTP_RESPONSE_MESSAGE, Boolean.TRUE); setUpHeaders(message); conduit.prepare(message); verifySentMessage(conduit, message, true, "POST", false); + assertEquals(HTTP_RESPONSE_MESSAGE, inMessage.get(HTTPConduit.HTTP_RESPONSE_MESSAGE)); finalVerify(); } @@ -165,32 +171,38 @@ public class HTTPConduitURLEasyMockTest extends Assert { public void testSendWithHeadersCheckErrorStream() throws Exception { control = EasyMock.createNiceControl(); - HTTPConduit conduit = setUpConduit(true, false); + HTTPConduit conduit = setUpConduit(true, false, "POST"); Message message = new MessageImpl(); + message.put(HTTPConduit.SET_HTTP_RESPONSE_MESSAGE, Boolean.TRUE); message.put("Content-Type", "text/xml;charset=utf8"); setUpHeaders(message); conduit.prepare(message); verifySentMessage(conduit, message, true, "POST", true); + assertEquals(HTTP_RESPONSE_MESSAGE, inMessage.get(HTTPConduit.HTTP_RESPONSE_MESSAGE)); finalVerify(); } @Test public void testSendHttpConnection() throws Exception { control = EasyMock.createNiceControl(); - HTTPConduit conduit = setUpConduit(true, false); + HTTPConduit conduit = setUpConduit(true, false, "POST"); Message message = createMessage(); + message.put(HTTPConduit.SET_HTTP_RESPONSE_MESSAGE, Boolean.TRUE); conduit.prepare(message); verifySentMessage(conduit, message, "POST"); + assertEquals(HTTP_RESPONSE_MESSAGE, inMessage.get(HTTPConduit.HTTP_RESPONSE_MESSAGE)); finalVerify(); } @Test public void testSendHttpConnectionAutoRedirect() throws Exception { control = EasyMock.createNiceControl(); - HTTPConduit conduit = setUpConduit(true, true); + HTTPConduit conduit = setUpConduit(true, true, "POST"); Message message = createMessage(); + message.put(HTTPConduit.SET_HTTP_RESPONSE_MESSAGE, Boolean.TRUE); conduit.prepare(message); verifySentMessage(conduit, message, "POST"); + assertEquals(HTTP_RESPONSE_MESSAGE, inMessage.get(HTTPConduit.HTTP_RESPONSE_MESSAGE)); finalVerify(); } @@ -199,9 +211,11 @@ public class HTTPConduitURLEasyMockTest extends Assert { control = EasyMock.createNiceControl(); HTTPConduit conduit = setUpConduit(true, true, "GET"); Message message = new MessageImpl(); + message.put(HTTPConduit.SET_HTTP_RESPONSE_MESSAGE, Boolean.TRUE); message.put(Message.HTTP_REQUEST_METHOD, "GET"); conduit.prepare(message); verifySentMessage(conduit, message, "GET"); + assertEquals(HTTP_RESPONSE_MESSAGE, inMessage.get(HTTPConduit.HTTP_RESPONSE_MESSAGE)); conduit.close(message); finalVerify(); } @@ -212,8 +226,10 @@ public class HTTPConduitURLEasyMockTest extends Assert { HTTPConduit conduit = setUpConduit(true, false, "GET"); Message message = new MessageImpl(); message.put(Message.HTTP_REQUEST_METHOD, "GET"); + message.put(HTTPConduit.SET_HTTP_RESPONSE_MESSAGE, Boolean.TRUE); conduit.prepare(message); verifySentMessage(conduit, message, "GET"); + assertEquals(HTTP_RESPONSE_MESSAGE, inMessage.get(HTTPConduit.HTTP_RESPONSE_MESSAGE)); conduit.close(message); finalVerify(); } @@ -222,7 +238,7 @@ public class HTTPConduitURLEasyMockTest extends Assert { public void testSendOnewayChunkedEmptyPartialResponseProcessResponse() throws Exception { control = EasyMock.createNiceControl(); - HTTPConduit conduit = setUpConduit(true, false); + HTTPConduit conduit = setUpConduit(true, false, "POST"); Message message = createMessage(); conduit.prepare(message); message.put(Message.PROCESS_ONEWAY_RESPONSE, Boolean.TRUE); @@ -239,7 +255,7 @@ public class HTTPConduitURLEasyMockTest extends Assert { public void testSendOnewayDoNotProcessResponse() throws Exception { control = EasyMock.createNiceControl(); - HTTPConduit conduit = setUpConduit(true, false); + HTTPConduit conduit = setUpConduit(true, false, "POST"); Message message = createMessage(); conduit.prepare(message); verifySentMessage(conduit, @@ -255,7 +271,7 @@ public class HTTPConduitURLEasyMockTest extends Assert { public void testSendTwowayDecoupledEmptyPartialResponse() throws Exception { control = EasyMock.createNiceControl(); - HTTPConduit conduit = setUpConduit(true, false); + HTTPConduit conduit = setUpConduit(true, false, "POST"); Message message = createMessage(); conduit.prepare(message); verifySentMessage(conduit, @@ -297,15 +313,10 @@ public class HTTPConduitURLEasyMockTest extends Assert { EasyMock.expectLastCall().andReturn(true).anyTimes(); } - private HTTPConduit setUpConduit(boolean send, boolean autoRedirect) throws Exception { - return setUpConduit(send, autoRedirect, "POST"); - } - private HTTPConduit setUpConduit( boolean send, boolean autoRedirect, - String method - ) throws Exception { + String method) throws Exception { endpointInfo = new EndpointInfo(); endpointInfo.setAddress(NOWHERE + "bar/foo"); connectionFactory = @@ -540,6 +551,10 @@ public class HTTPConduitURLEasyMockTest extends Assert { HTTPConduit conduit) throws IOException { connection.getHeaderFields(); EasyMock.expectLastCall().andReturn(Collections.EMPTY_MAP).anyTimes(); + + connection.getResponseMessage(); + EasyMock.expectLastCall().andReturn(HTTP_RESPONSE_MESSAGE).anyTimes(); + int responseCode = getResponseCode(style); if (conduit.getClient().isAutoRedirect()) { connection.getResponseCode();
