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 {