You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2011/11/13 23:29:44 UTC

svn commit: r1201533 - in /openejb/trunk/openejb/server/openejb-cxf-rs/src: main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java test/java/org/apache/openejb/server/cxf/rs/CustomProviderTest.java

Author: rmannibucau
Date: Sun Nov 13 22:29:44 2011
New Revision: 1201533

URL: http://svn.apache.org/viewvc?rev=1201533&view=rev
Log:
allowing to specify a custom (or not) provider for a specific jax-rs service. @see CxfRsHttpListener.*CXF_JAXRS_PROVIDERS* constants

Modified:
    openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
    openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/CustomProviderTest.java

Modified: openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java?rev=1201533&r1=1201532&r2=1201533&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java (original)
+++ openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java Sun Nov 13 22:29:44 2011
@@ -60,9 +60,10 @@ public class CxfRsHttpListener implement
     private static final Logger LOGGER = Logger.getInstance(LogCategory.CXF, CxfRsHttpListener.class);
 
     public static final String OPENEJB_CXF_JAXRS_PROVIDERS_KEY = "openejb.cxf.jax-rs.providers";
+    public static final String OPENEJB_CXF_JAXRS_PROVIDERS_SUFFIX = ".providers";
     public static final String DEFAULT_CXF_JAXRS_PROVIDERS_KEY = "default";
 
-    private static final List<?> PROVIDERS = createProviderList();
+    private static final List<?> PROVIDERS = createProviderList("");
 
     private HTTPTransportFactory transportFactory;
     private AbstractHTTPDestination destination;
@@ -106,7 +107,7 @@ public class CxfRsHttpListener implement
         factory.setDestinationFactory(transportFactory);
         factory.setBus(transportFactory.getBus());
         factory.setAddress(address);
-        factory.setProviders(PROVIDERS);
+        factory.setProviders(createProviderList(nameForProviders(clazz)));
         if (rp != null) {
             factory.setResourceProvider(rp);
         }
@@ -126,12 +127,29 @@ public class CxfRsHttpListener implement
         destination = (AbstractHTTPDestination) server.getDestination();
     }
 
+    private String nameForProviders(Class<?> clazz) {
+        if (clazz == null) {
+            return "default"; // whatever it is it will be overriden by default providers
+        }
+        return clazz.getName();
+    }
+
     public void undeploy() {
         server.stop();
     }
 
-    private static List<?> createProviderList() {
-        String providersProperty = SystemInstance.get().getProperty(OPENEJB_CXF_JAXRS_PROVIDERS_KEY);
+    private static List<?> createProviderList(String prefix) {
+        String key;
+        if (prefix == null || prefix.trim().isEmpty()) {
+            key = OPENEJB_CXF_JAXRS_PROVIDERS_KEY;
+        } else {
+            key = prefix + OPENEJB_CXF_JAXRS_PROVIDERS_SUFFIX;
+        }
+        String providersProperty = SystemInstance.get().getProperty(key);
+        // if no overriding
+        if (providersProperty == null || providersProperty.trim().isEmpty() && PROVIDERS != null) {
+            return PROVIDERS;
+        }
 
         JAXBElementProvider jaxb = new JAXBElementProvider();
         Map<String, Object> jaxbProperties = new HashMap<String, Object> ();

Modified: openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/CustomProviderTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/CustomProviderTest.java?rev=1201533&r1=1201532&r2=1201533&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/CustomProviderTest.java (original)
+++ openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/CustomProviderTest.java Sun Nov 13 22:29:44 2011
@@ -35,6 +35,7 @@ public class CustomProviderTest {
         Properties properties = new Properties();
         properties.setProperty(OpenEjbContainer.OPENEJB_EMBEDDED_REMOTABLE, "true");
         properties.setProperty(CxfRsHttpListener.OPENEJB_CXF_JAXRS_PROVIDERS_KEY, ReverseProvider.class.getName());
+        properties.setProperty(CustomSpecificService.class.getName() + CxfRsHttpListener.OPENEJB_CXF_JAXRS_PROVIDERS_SUFFIX, ConstantProvider.class.getName());
         container = EJBContainer.createEJBContainer(properties);
     }
 
@@ -51,18 +52,32 @@ public class CustomProviderTest {
 
     @Test public void customProvider() {
         String response = WebClient.create("http://localhost:4204").accept("openejb/reverse")
-            .path("/custom/provider").get(String.class);
+            .path("/custom1/reverse").get(String.class);
         assertEquals("provider", response);
     }
 
+    @Test public void customSpecificProvider() {
+        String response = WebClient.create("http://localhost:4204").accept("openejb/constant")
+            .path("/custom2/constant").get(String.class);
+        assertEquals("it works!", response);
+    }
+
     @Singleton
-    @Path("/custom")
+    @Path("/custom1")
     public static class CustomService {
-        @GET @Path("/provider") @Produces("openejb/reverse") public String go() {
+        @GET @Path("/reverse") @Produces("openejb/reverse") public String go() {
             return "redivorp";
         }
     }
 
+    @Singleton
+    @Path("/custom2")
+    public static class CustomSpecificService {
+        @GET @Path("/constant") @Produces("openejb/constant") public String go() {
+            return "will be overriden";
+        }
+    }
+
     @Provider
     @Produces("openejb/reverse")
     public static class ReverseProvider<T> implements MessageBodyWriter<T> {
@@ -93,4 +108,23 @@ public class CustomProviderTest {
             entityStream.write(reverse((String) t).getBytes());
         }
     }
+
+    @Provider
+    @Produces("openejb/constant")
+    public static class ConstantProvider<T> implements MessageBodyWriter<T> {
+        @Override
+        public long getSize(T t, Class<?> rawType, Type genericType, Annotation[] annotations, MediaType mediaType) {
+            return -1;
+        }
+
+        @Override
+        public boolean isWriteable(Class<?> rawType, Type genericType, Annotation[] annotations, MediaType mediaType) {
+            return true;
+        }
+
+        @Override
+        public void writeTo(T t, Class<?> rawType, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException {
+            entityStream.write("it works!".getBytes());
+        }
+    }
 }