Repository: cxf Updated Branches: refs/heads/master ed2c83d53 -> c9129aff7
Try another "hack" that seems to allow the other verbs to work on JDK7 Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/c9129aff Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/c9129aff Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/c9129aff Branch: refs/heads/master Commit: c9129aff7c15de22b3ea1e92dc55a2c923ec1393 Parents: ed2c83d Author: Daniel Kulp <[email protected]> Authored: Fri Aug 21 15:55:34 2015 -0400 Committer: Daniel Kulp <[email protected]> Committed: Fri Aug 21 15:55:34 2015 -0400 ---------------------------------------------------------------------- .../http/URLConnectionHTTPConduit.java | 34 ++++++++++++++++++-- .../jaxrs/JAXRSClientServerBookTest.java | 5 --- 2 files changed, 31 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/c9129aff/rt/transports/http/src/main/java/org/apache/cxf/transport/http/URLConnectionHTTPConduit.java ---------------------------------------------------------------------- diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/URLConnectionHTTPConduit.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/URLConnectionHTTPConduit.java index 954db7a..b3d9a2d 100644 --- a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/URLConnectionHTTPConduit.java +++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/URLConnectionHTTPConduit.java @@ -23,6 +23,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; +import java.net.ProtocolException; import java.net.Proxy; import java.net.SocketException; import java.net.URI; @@ -147,6 +148,7 @@ public class URLConnectionHTTPConduit extends HTTPConduit { try { java.lang.reflect.Field f = ReflectionUtil.getDeclaredField(HttpURLConnection.class, "method"); ReflectionUtil.setAccessible(f).set(connection, httpRequestMethod); + message.put(HTTPURL_CONNECTION_METHOD_REFLECTION, true); } catch (Throwable t) { t.printStackTrace(); throw ex; @@ -205,16 +207,41 @@ public class URLConnectionHTTPConduit extends HTTPConduit { super(wos); this.connection = wos.connection; } + private OutputStream connectAndGetOutputStream(Boolean b) throws IOException { + OutputStream cout = null; + + if (b != null && b) { + String method = connection.getRequestMethod(); + connection.connect(); + try { + java.lang.reflect.Field f = ReflectionUtil.getDeclaredField(HttpURLConnection.class, "method"); + ReflectionUtil.setAccessible(f).set(connection, "POST"); + cout = connection.getOutputStream(); + ReflectionUtil.setAccessible(f).set(connection, method); + } catch (Throwable t) { + t.printStackTrace(); + } + + } else { + cout = connection.getOutputStream(); + } + return cout; + } protected void setupWrappedStream() throws IOException { // If we need to cache for retransmission, store data in a // CacheAndWriteOutputStream. Otherwise write directly to the output stream. OutputStream cout = null; try { - cout = connection.getOutputStream(); + try { + cout = connection.getOutputStream(); + } catch (ProtocolException pe) { + Boolean b = (Boolean)outMessage.get(HTTPURL_CONNECTION_METHOD_REFLECTION); + cout = connectAndGetOutputStream(b); + } } catch (SocketException e) { if ("Socket Closed".equals(e.getMessage())) { connection.connect(); - cout = connection.getOutputStream(); + cout = connectAndGetOutputStream((Boolean)outMessage.get(HTTPURL_CONNECTION_METHOD_REFLECTION)); } else { throw e; } @@ -341,7 +368,8 @@ public class URLConnectionHTTPConduit extends HTTPConduit { @Override protected void retransmitStream() throws IOException { - OutputStream out = connection.getOutputStream(); + Boolean b = (Boolean)outMessage.get(HTTPURL_CONNECTION_METHOD_REFLECTION); + OutputStream out = connectAndGetOutputStream(b); cachedStream.writeCacheTo(out); } } http://git-wip-us.apache.org/repos/asf/cxf/blob/c9129aff/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java ---------------------------------------------------------------------- diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java index 8a1a1a5..a9c6e96 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java @@ -59,7 +59,6 @@ import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.PutMethod; import org.apache.commons.httpclient.methods.RequestEntity; -import org.apache.cxf.common.util.ClassHelper; import org.apache.cxf.helpers.IOUtils; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.io.CachedOutputStream; @@ -93,10 +92,6 @@ public class JAXRSClientServerBookTest extends AbstractBusClientServerTestBase { @Test public void testRetrieveBookCustomMethodReflection() throws Exception { - double version = ClassHelper.getJavaVersion(); - if (version < 1.8) { - return; - } try { doRetrieveBook(false); fail("HTTPUrlConnection does not support custom verbs without the reflection");
