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());
+ }
+ }
}