Author: rmannibucau
Date: Mon Jul  7 21:07:09 2014
New Revision: 1608612

URL: http://svn.apache.org/r1608612
Log:
ensuring jsonp jsr @Provider and wadl one are always registered

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

Modified: 
tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java?rev=1608612&r1=1608611&r2=1608612&view=diff
==============================================================================
--- 
tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
 (original)
+++ 
tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
 Mon Jul  7 21:07:09 2014
@@ -333,9 +333,16 @@ public class CxfRsHttpListener implement
                 instances.add(o);
             }
         }
+
         return instances;
     }
 
+    private static void addMandatoryProviders(final Collection<Object> 
instances) {
+        instances.add(new JsrProvider()); // is this one really mandatory?
+        instances.add(new WadlDocumentMessageBodyWriter());
+        instances.add(EJBAccessExceptionMapper.INSTANCE);
+    }
+
     private Object newProvider(final Class<?> clazz) throws 
IllegalAccessException, InstantiationException {
         return clazz.newInstance();
     }
@@ -558,7 +565,7 @@ public class CxfRsHttpListener implement
         return factory;
     }
 
-    private void configureFactory(final Collection<Object> 
additionalProviders, final ServiceConfiguration serviceConfiguration, final 
JAXRSServerFactoryBean factory) {
+    private void configureFactory(final Collection<Object> 
givenAdditionalProviders, final ServiceConfiguration serviceConfiguration, 
final JAXRSServerFactoryBean factory) {
         CxfUtil.configureEndpoint(factory, serviceConfiguration, 
CXF_JAXRS_PREFIX);
 
         final Collection<ServiceInfo> services = 
serviceConfiguration.getAvailableServices();
@@ -617,6 +624,10 @@ public class CxfRsHttpListener implement
             }
         }
 
+        // another property to configure the scanning of providers but this 
one is consistent with current cxf config
+        // the other one is more generic but need another file
+        final boolean ignoreAutoProviders = 
"false".equalsIgnoreCase(serviceConfiguration.getProperties().getProperty(CXF_JAXRS_PREFIX
 + "skip-provider-scanning"));
+        final Collection<Object> additionalProviders = ignoreAutoProviders ? 
Collections.emptyList() : givenAdditionalProviders;
         List<Object> providers = null;
         if (providersConfig != null) {
             providers = ServiceInfos.resolve(services, 
providersConfig.toArray(new String[providersConfig.size()]), 
ProviderFactory.INSTANCE);
@@ -625,7 +636,7 @@ public class CxfRsHttpListener implement
             }
         }
         if (providers == null) {
-            providers = new ArrayList<Object>();
+            providers = new ArrayList<Object>(4);
             if (additionalProviders != null && !additionalProviders.isEmpty()) 
{
                 providers.addAll(providers(services, additionalProviders));
             } else {
@@ -633,12 +644,13 @@ public class CxfRsHttpListener implement
             }
         }
 
-        // add the EJB access exception mapper
-        providers.add(EJBAccessExceptionMapper.INSTANCE);
+        if (!ignoreAutoProviders) {
+            addMandatoryProviders(providers);
+        }
 
         LOGGER.info("Using providers:");
         for (final Object provider : providers) {
-            LOGGER.info("  " + provider);
+            LOGGER.info("     " + provider);
         }
         factory.setProviders(providers);
     }
@@ -649,7 +661,10 @@ public class CxfRsHttpListener implement
         jaxbProperties.put(Marshaller.JAXB_FRAGMENT, true);
         jaxb.setMarshallerProperties(jaxbProperties);
 
-        return Arrays.asList((Object) new WadlDocumentMessageBodyWriter(), new 
FleeceProvider<>(), new JsrProvider(), jaxb);
+        final List<Object> providers = new ArrayList<>(4);
+        providers.add(jaxb);
+        providers.add(new FleeceProvider<>());
+        return providers;
     }
 
     private static class ProviderFactory implements ServiceInfos.Factory {


Reply via email to