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 2015/08/21 12:46:02 UTC

cxf git commit: Adding HttpUrlConnection reflection test which is activated with Java8 or higher

Repository: cxf
Updated Branches:
  refs/heads/master ffd4296f9 -> d567e03fd


Adding HttpUrlConnection reflection test which is activated with Java8 or higher


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/d567e03f
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/d567e03f
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/d567e03f

Branch: refs/heads/master
Commit: d567e03fd0490b80f69b4cdb9e1cf8e1c88aea40
Parents: ffd4296
Author: Sergey Beryozkin <sb...@gmail.com>
Authored: Fri Aug 21 11:45:46 2015 +0100
Committer: Sergey Beryozkin <sb...@gmail.com>
Committed: Fri Aug 21 11:45:46 2015 +0100

----------------------------------------------------------------------
 .../org/apache/cxf/common/util/ClassHelper.java |   4 +
 .../http/URLConnectionHTTPConduit.java          |  11 +-
 .../apache/cxf/systest/jaxrs/BookServer.java    |  67 ++++++++++++
 .../jaxrs/JAXRSClientServerBookTest.java        | 108 ++++++-------------
 4 files changed, 112 insertions(+), 78 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/d567e03f/core/src/main/java/org/apache/cxf/common/util/ClassHelper.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/cxf/common/util/ClassHelper.java b/core/src/main/java/org/apache/cxf/common/util/ClassHelper.java
index 68ea3b3..461c84a 100644
--- a/core/src/main/java/org/apache/cxf/common/util/ClassHelper.java
+++ b/core/src/main/java/org/apache/cxf/common/util/ClassHelper.java
@@ -85,5 +85,9 @@ public class ClassHelper {
             return HELPER.getRealClassInternal(o);
         }
     }
+    public static double getJavaVersion() {
+        String version = System.getProperty("java.version");
+        return Double.parseDouble(version.substring(0, 3));    
+    }
     
 }

http://git-wip-us.apache.org/repos/asf/cxf/blob/d567e03f/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 1c55ac4..954db7a 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
@@ -49,11 +49,12 @@ import org.apache.cxf.ws.addressing.EndpointReferenceType;
  * 
  */
 public class URLConnectionHTTPConduit extends HTTPConduit {
-    public static final String HTTPURL_CONNECTION_METHOD_HACK = "httpurlconnection.method.hack";
+    public static final String HTTPURL_CONNECTION_METHOD_REFLECTION = "use.httpurlconnection.method.reflection";
 
-    private static final boolean DEFAULT_USE_HACK;
+    private static final boolean DEFAULT_USE_REFLECTION;
     static {
-        DEFAULT_USE_HACK = Boolean.valueOf(SystemPropertyAction.getProperty(HTTPURL_CONNECTION_METHOD_HACK, "false"));
+        DEFAULT_USE_REFLECTION = 
+            Boolean.valueOf(SystemPropertyAction.getProperty(HTTPURL_CONNECTION_METHOD_REFLECTION, "false"));
     }
     
     /**
@@ -137,8 +138,8 @@ public class URLConnectionHTTPConduit extends HTTPConduit {
         try {
             connection.setRequestMethod(httpRequestMethod);
         } catch (java.net.ProtocolException ex) {
-            Object o = message.getContextualProperty(HTTPURL_CONNECTION_METHOD_HACK);
-            boolean b = DEFAULT_USE_HACK;
+            Object o = message.getContextualProperty(HTTPURL_CONNECTION_METHOD_REFLECTION);
+            boolean b = DEFAULT_USE_REFLECTION;
             if (o != null) {
                 b = MessageUtils.isTrue(o);
             }

http://git-wip-us.apache.org/repos/asf/cxf/blob/d567e03f/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookServer.java
----------------------------------------------------------------------
diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookServer.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookServer.java
index f89ea95..4ef1294 100644
--- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookServer.java
+++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookServer.java
@@ -26,6 +26,9 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import javax.ws.rs.client.ClientRequestContext;
+import javax.ws.rs.client.ClientResponseContext;
+import javax.ws.rs.client.ClientResponseFilter;
 import javax.ws.rs.container.ContainerRequestContext;
 import javax.ws.rs.container.ContainerRequestFilter;
 import javax.ws.rs.container.ContainerResponseContext;
@@ -37,9 +40,12 @@ import javax.ws.rs.ext.ExceptionMapper;
 import org.apache.cxf.Bus;
 import org.apache.cxf.BusFactory;
 import org.apache.cxf.common.util.PropertyUtils;
+import org.apache.cxf.helpers.CastUtils;
+import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.interceptor.Interceptor;
 import org.apache.cxf.interceptor.LoggingInInterceptor;
 import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
+import org.apache.cxf.jaxrs.client.ResponseExceptionMapper;
 import org.apache.cxf.jaxrs.ext.search.QueryContextProvider;
 import org.apache.cxf.jaxrs.ext.search.SearchBean;
 import org.apache.cxf.jaxrs.ext.search.SearchContextProvider;
@@ -49,6 +55,9 @@ import org.apache.cxf.jaxrs.provider.BinaryDataProvider;
 import org.apache.cxf.jaxrs.provider.JAXBElementProvider;
 import org.apache.cxf.jaxrs.provider.StreamingResponseProvider;
 import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
+import org.apache.cxf.systest.jaxrs.BookStore.BookNotReturnedException;
 import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
     
 public class BookServer extends AbstractBusTestServerBase {
@@ -189,4 +198,62 @@ public class BookServer extends AbstractBusTestServerBase {
     public static class BlockedException extends RuntimeException {
         
     }
+    
+    public static class ReplaceContentTypeInterceptor extends AbstractPhaseInterceptor<Message> {
+        public ReplaceContentTypeInterceptor() {
+            super(Phase.READ);
+        }
+
+        public void handleMessage(Message message) throws Fault {
+            Map<String, List<String>> headers = 
+                CastUtils.cast((Map<?, ?>)message.get(Message.PROTOCOL_HEADERS));
+            headers.put(Message.CONTENT_TYPE, Collections.singletonList("text/plain"));
+        }
+    }
+
+    public static class ReplaceStatusInterceptor extends AbstractPhaseInterceptor<Message> {
+        public ReplaceStatusInterceptor() {
+            super(Phase.READ);
+        }
+
+        public void handleMessage(Message message) throws Fault {
+            message.getExchange().put(Message.RESPONSE_CODE, 200);
+        }
+    }
+    
+    public static class NotReturnedExceptionMapper implements ResponseExceptionMapper<BookNotReturnedException> {
+
+        public BookNotReturnedException fromResponse(Response r) {
+            String status = r.getHeaderString("Status");
+            if ("notReturned".equals(status)) { 
+                return new BookNotReturnedException(status);
+            } else {
+                return null;
+            }
+        }
+        
+    }
+    
+    public static class NotFoundExceptionMapper implements ResponseExceptionMapper<BookNotFoundFault> {
+
+        public BookNotFoundFault fromResponse(Response r) {
+            String status = r.getHeaderString("Status");
+            if ("notFound".equals(status)) { 
+                return new BookNotFoundFault(status);
+            } else {
+                return null;
+            }
+        }
+        
+    }
+    public static class TestResponseFilter implements ClientResponseFilter {
+
+        @Override
+        public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext)
+            throws IOException {
+            // TODO Auto-generated method stub
+            
+        }
+        
+    }
 }

http://git-wip-us.apache.org/repos/asf/cxf/blob/d567e03f/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 65d0a12..67cd611 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
@@ -40,9 +40,6 @@ import javax.ws.rs.NotAcceptableException;
 import javax.ws.rs.ProcessingException;
 import javax.ws.rs.ServerErrorException;
 import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.client.ClientRequestContext;
-import javax.ws.rs.client.ClientResponseContext;
-import javax.ws.rs.client.ClientResponseFilter;
 import javax.ws.rs.client.ResponseProcessingException;
 import javax.ws.rs.core.Form;
 import javax.ws.rs.core.GenericEntity;
@@ -62,22 +59,17 @@ 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.helpers.CastUtils;
+import org.apache.cxf.common.util.ClassHelper;
 import org.apache.cxf.helpers.IOUtils;
-import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.interceptor.LoggingInInterceptor;
 import org.apache.cxf.io.CachedOutputStream;
 import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
 import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean;
-import org.apache.cxf.jaxrs.client.ResponseExceptionMapper;
 import org.apache.cxf.jaxrs.client.WebClient;
 import org.apache.cxf.jaxrs.ext.xml.XMLSource;
 import org.apache.cxf.jaxrs.model.AbstractResourceInfo;
 import org.apache.cxf.jaxrs.provider.JAXBElementProvider;
 import org.apache.cxf.jaxrs.provider.XSLTJaxbProvider;
-import org.apache.cxf.message.Message;
-import org.apache.cxf.phase.AbstractPhaseInterceptor;
-import org.apache.cxf.phase.Phase;
 import org.apache.cxf.systest.jaxrs.BookStore.BookInfo;
 import org.apache.cxf.systest.jaxrs.BookStore.BookInfoInterface;
 import org.apache.cxf.systest.jaxrs.BookStore.BookNotReturnedException;
@@ -100,6 +92,32 @@ 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");
+        } catch (ProcessingException ex) {
+            // continue
+        }
+        Book book = doRetrieveBook(true);
+        assertEquals("Retrieve", book.getName());
+    }
+    
+    private Book doRetrieveBook(boolean useReflection) {
+        String address = "http://localhost:" + PORT + "/bookstore/retrieve";
+        WebClient wc = WebClient.create(address);
+        wc.type("application/xml").accept("application/xml");
+        if (useReflection) {
+            WebClient.getConfig(wc).getRequestContext().put("use.httpurlconnection.method.reflection", true);
+        }
+        return wc.invoke("RETRIEVE", new Book("Retrieve", 123L), Book.class);
+    }
+    
+    @Test
     public void testBlockAndTrowException() throws Exception {
         String address = "http://localhost:" + PORT + "/bookstore/blockAndThrowException";
         WebClient wc = WebClient.create(address);
@@ -133,7 +151,7 @@ public class JAXRSClientServerBookTest extends AbstractBusClientServerTestBase {
     public void testNonExistent() throws Exception {
         String address = "http://localhostt/bookstore";
         WebClient wc = WebClient.create(address, 
-                                        Collections.singletonList(new TestResponseFilter()));
+                                        Collections.singletonList(new BookServer.TestResponseFilter()));
         try {
             wc.get();
             fail();
@@ -773,8 +791,8 @@ public class JAXRSClientServerBookTest extends AbstractBusClientServerTestBase {
     @Test
     public void testBookWithMultipleExceptions() throws Exception {
         List<Object> providers = new LinkedList<Object>();
-        providers.add(new NotReturnedExceptionMapper());
-        providers.add(new NotFoundExceptionMapper());
+        providers.add(new BookServer.NotReturnedExceptionMapper());
+        providers.add(new BookServer.NotFoundExceptionMapper());
         BookStore store = JAXRSClientFactory.create("http://localhost:" + PORT, 
                                                     BookStore.class,
                                                     providers);
@@ -808,8 +826,8 @@ public class JAXRSClientServerBookTest extends AbstractBusClientServerTestBase {
     @Test
     public void testBookWithMultipleExceptions2() throws Exception {
         List<Object> providers = new LinkedList<Object>();
-        providers.add(new NotReturnedExceptionMapper());
-        providers.add(NotFoundExceptionMapper.class);
+        providers.add(new BookServer.NotReturnedExceptionMapper());
+        providers.add(BookServer.NotFoundExceptionMapper.class);
         BookStore store = JAXRSClientFactory.create("http://localhost:" + PORT, 
                                                     BookStore.class,
                                                     providers);
@@ -1566,7 +1584,7 @@ public class JAXRSClientServerBookTest extends AbstractBusClientServerTestBase {
         WebClient wc = 
             WebClient.create("http://localhost:" + PORT + "/bookstore/books/check/malformedmt/123");
         wc.accept(MediaType.TEXT_PLAIN);
-        WebClient.getConfig(wc).getInInterceptors().add(new ReplaceContentTypeInterceptor());
+        WebClient.getConfig(wc).getInInterceptors().add(new BookServer.ReplaceContentTypeInterceptor());
         assertTrue(wc.get(Boolean.class));
     }
     
@@ -1783,7 +1801,7 @@ public class JAXRSClientServerBookTest extends AbstractBusClientServerTestBase {
     
     private void doTestEmptyResponse(String mt) {
         WebClient wc = WebClient.create("http://localhost:" + PORT + "/bookstore/emptybook");
-        WebClient.getConfig(wc).getInInterceptors().add(new ReplaceStatusInterceptor());
+        WebClient.getConfig(wc).getInInterceptors().add(new BookServer.ReplaceStatusInterceptor());
         wc.accept(mt);
         wc.get(Book.class);
     }
@@ -1791,7 +1809,7 @@ public class JAXRSClientServerBookTest extends AbstractBusClientServerTestBase {
     @Test(expected = ResponseProcessingException.class)
     public void testEmptyResponseProxy() {
         BookStore store = JAXRSClientFactory.create("http://localhost:" + PORT, BookStore.class);
-        WebClient.getConfig(store).getInInterceptors().add(new ReplaceStatusInterceptor());
+        WebClient.getConfig(store).getInInterceptors().add(new BookServer.ReplaceStatusInterceptor());
         store.getEmptyBook();
     }
     
@@ -2727,61 +2745,5 @@ public class JAXRSClientServerBookTest extends AbstractBusClientServerTestBase {
         return str;
     }
 
-    public static class ReplaceContentTypeInterceptor extends AbstractPhaseInterceptor<Message> {
-        public ReplaceContentTypeInterceptor() {
-            super(Phase.READ);
-        }
-
-        public void handleMessage(Message message) throws Fault {
-            Map<String, List<String>> headers = 
-                CastUtils.cast((Map<?, ?>)message.get(Message.PROTOCOL_HEADERS));
-            headers.put(Message.CONTENT_TYPE, Collections.singletonList("text/plain"));
-        }
-    }
-
-    public static class ReplaceStatusInterceptor extends AbstractPhaseInterceptor<Message> {
-        public ReplaceStatusInterceptor() {
-            super(Phase.READ);
-        }
-
-        public void handleMessage(Message message) throws Fault {
-            message.getExchange().put(Message.RESPONSE_CODE, 200);
-        }
-    }
-    
-    public static class NotReturnedExceptionMapper implements ResponseExceptionMapper<BookNotReturnedException> {
-
-        public BookNotReturnedException fromResponse(Response r) {
-            String status = r.getHeaderString("Status");
-            if ("notReturned".equals(status)) { 
-                return new BookNotReturnedException(status);
-            } else {
-                return null;
-            }
-        }
-        
-    }
     
-    public static class NotFoundExceptionMapper implements ResponseExceptionMapper<BookNotFoundFault> {
-
-        public BookNotFoundFault fromResponse(Response r) {
-            String status = r.getHeaderString("Status");
-            if ("notFound".equals(status)) { 
-                return new BookNotFoundFault(status);
-            } else {
-                return null;
-            }
-        }
-        
-    }
-    public static class TestResponseFilter implements ClientResponseFilter {
-
-        @Override
-        public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext)
-            throws IOException {
-            // TODO Auto-generated method stub
-            
-        }
-        
-    }
 }