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 2014/07/05 21:12:16 UTC

svn commit: r1608110 - in /tomee/tomee/trunk: container/openejb-core/pom.xml server/openejb-cxf-rs/pom.xml server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java

Author: rmannibucau
Date: Sat Jul  5 19:12:16 2014
New Revision: 1608110

URL: http://svn.apache.org/r1608110
Log:
adding fleece to support JSON Processing spec + using it by default in JAXRS modules (for json mapping + JsonStructure provider)

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

Modified: tomee/tomee/trunk/container/openejb-core/pom.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/pom.xml?rev=1608110&r1=1608109&r2=1608110&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/pom.xml (original)
+++ tomee/tomee/trunk/container/openejb-core/pom.xml Sat Jul  5 19:12:16 2014
@@ -417,11 +417,25 @@
       <groupId>org.apache.openejb</groupId>
       <artifactId>javaee-api</artifactId>
     </dependency>
-    <dependency> <!-- TODO: remove it when javaee-api 7 will be done -->
+
+    <!-- to put in javaee-api 7 and remove from here -->
+    <dependency>
       <groupId>org.apache.geronimo.specs</groupId>
       <artifactId>geronimo-concurrent_1.0_spec</artifactId>
       <version>1.0-SNAPSHOT</version>
     </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-json_1.0_spec</artifactId>
+      <version>1.0-SNAPSHOT</version>
+    </dependency>
+    <!-- end javaee-api update to do -->
+    <dependency>
+      <groupId>org.apache.fleece</groupId>
+      <artifactId>fleece-core</artifactId>
+      <version>1.0-SNAPSHOT</version>
+    </dependency>
+
     <!-- required for endorsed dir support -->
     <dependency>
       <groupId>org.apache.geronimo.specs</groupId>

Modified: tomee/tomee/trunk/server/openejb-cxf-rs/pom.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf-rs/pom.xml?rev=1608110&r1=1608109&r2=1608110&view=diff
==============================================================================
--- tomee/tomee/trunk/server/openejb-cxf-rs/pom.xml (original)
+++ tomee/tomee/trunk/server/openejb-cxf-rs/pom.xml Sat Jul  5 19:12:16 2014
@@ -27,6 +27,15 @@
   <name>OpenEJB :: Server :: CXF RS</name>
 
   <dependencies>
+    <!-- TODO: remove when using javaee-api 7 -->
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-json_1.0_spec</artifactId>
+      <version>1.0-SNAPSHOT</version>
+      <scope>provided</scope>
+    </dependency>
+
+
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
@@ -75,11 +84,6 @@
     </dependency>
     <dependency>
       <groupId>org.apache.cxf</groupId>
-      <artifactId>cxf-rt-rs-extension-providers</artifactId>
-      <version>${cxf.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cxf</groupId>
       <artifactId>cxf-rt-rs-extension-search</artifactId>
       <version>${cxf.version}</version>
     </dependency>
@@ -99,6 +103,16 @@
         </exclusion>
       </exclusions>
     </dependency>
+    <dependency> <!-- JAXBElementProvider -->
+      <groupId>org.apache.cxf</groupId>
+      <artifactId>cxf-rt-rs-extension-providers</artifactId>
+      <version>${cxf.version}</version>
+    </dependency>
+    <dependency> <!-- FleeceProvider and JsrProvider -->
+      <groupId>org.apache.fleece</groupId>
+      <artifactId>fleece-jaxrs</artifactId>
+      <version>1.0-SNAPSHOT</version>
+    </dependency>
     <!--
     <dependency>
       <groupId>xalan</groupId>
@@ -113,7 +127,7 @@
       <artifactId>xml-resolver</artifactId>
     </dependency>
     -->
-    <dependency>
+    <dependency> <!-- TODO: when upgrading cxf check we still need it -> org.apache.cxf.jaxrs.model.wadl.WadlGenerator.handleRequest -->
       <groupId>org.codehaus.jettison</groupId>
       <artifactId>jettison</artifactId>
       <version>1.3.4</version>

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=1608110&r1=1608109&r2=1608110&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 Sat Jul  5 19:12:16 2014
@@ -37,6 +37,8 @@ import org.apache.cxf.service.invoker.In
 import org.apache.cxf.transport.http.AbstractHTTPDestination;
 import org.apache.cxf.transport.http.HTTPTransportFactory;
 import org.apache.cxf.transport.servlet.BaseUrlHelper;
+import org.apache.fleece.jaxrs.FleeceProvider;
+import org.apache.fleece.jaxrs.JsrProvider;
 import org.apache.openejb.BeanContext;
 import org.apache.openejb.Injection;
 import org.apache.openejb.api.internal.Internal;
@@ -63,6 +65,7 @@ import org.apache.openejb.util.LogCatego
 import org.apache.openejb.util.Logger;
 import org.apache.openejb.util.proxy.ProxyEJB;
 import org.apache.webbeans.config.WebBeansContext;
+import org.w3c.dom.Document;
 
 import javax.management.ObjectName;
 import javax.management.openmbean.TabularData;
@@ -71,12 +74,21 @@ import javax.servlet.ServletException;
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.Produces;
 import javax.ws.rs.core.Application;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.ext.MessageBodyReader;
+import javax.ws.rs.ext.MessageBodyWriter;
+import javax.ws.rs.ext.Provider;
 import javax.xml.bind.Marshaller;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.OutputStream;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Constructor;
+import java.lang.reflect.Type;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.util.ArrayList;
@@ -623,7 +635,10 @@ public class CxfRsHttpListener implement
         // add the EJB access exception mapper
         providers.add(EJBAccessExceptionMapper.INSTANCE);
 
-        LOGGER.info("Using providers " + providers);
+        LOGGER.info("Using providers:");
+        for (final Object provider : providers) {
+            LOGGER.info("  " + provider);
+        }
         factory.setProviders(providers);
     }
 
@@ -633,11 +648,7 @@ public class CxfRsHttpListener implement
         jaxbProperties.put(Marshaller.JAXB_FRAGMENT, true);
         jaxb.setMarshallerProperties(jaxbProperties);
 
-        final JSONProvider json = new JSONProvider();
-        // TOMEE-514
-        // json.setSerializeAsArray(true);
-
-        return Arrays.asList((Object) jaxb, json);
+        return Arrays.asList((Object) jaxb, new OpenEJBJsonProvider(), new JsrProvider());
     }
 
     private static class ProviderFactory implements ServiceInfos.Factory {
@@ -680,6 +691,52 @@ public class CxfRsHttpListener implement
         }
     }
 
+    @Provider
+    @Produces("*/*")
+    @Consumes("*/*") // Use fleece but allows _wadl query (cxf returns a Document in this case :()
+    public static class OpenEJBJsonProvider implements MessageBodyReader<Object>, MessageBodyWriter<Object> {
+        private final FleeceProvider fleece = new FleeceProvider<>();
+        private final JSONProvider<Object> wadlProvider = new JSONProvider<>();
+
+        @Override
+        public boolean isReadable(final Class<?> rawType, final Type genericType,
+                                  final Annotation[] annotations, final MediaType mediaType) {
+            return fleece.isReadable(rawType, genericType, annotations, mediaType);
+        }
+
+        @Override
+        public Object readFrom(final Class<Object> rawType, final Type genericType,
+                               final Annotation[] annotations, final MediaType mediaType,
+                               final MultivaluedMap<String, String> httpHeaders,
+                               final InputStream entityStream) throws IOException {
+            return fleece.readFrom(rawType, genericType, annotations, mediaType, httpHeaders, entityStream);
+        }
+
+        @Override
+        public long getSize(final Object o, final Class<?> rawType,
+                            final Type genericType, final Annotation[] annotations, final MediaType mediaType) {
+            return fleece.getSize(o, rawType, genericType, annotations, mediaType);
+        }
+
+        @Override
+        public boolean isWriteable(final Class<?> rawType, final Type genericType,
+                                   final Annotation[] annotations, final MediaType mediaType) {
+            return fleece.isWriteable(rawType, genericType, annotations, mediaType)
+                    || Document.class.isAssignableFrom(rawType); // avoid wadlProvider.isWriteable(rawType, genericType, annotations, mediaType) which can be long
+        }
+
+        @Override
+        public void writeTo(final Object o, final Class<?> rawType, final Type genericType,
+                            final Annotation[] annotations, final MediaType mediaType,
+                            final MultivaluedMap<String, Object> httpHeaders, final OutputStream entityStream) throws IOException {
+            if (!Document.class.isAssignableFrom(rawType)) {
+                fleece.writeTo(o, rawType, genericType, annotations, mediaType, httpHeaders, entityStream);
+            } else {
+                wadlProvider.writeTo(o, rawType, genericType, annotations, mediaType, httpHeaders, entityStream);
+            }
+        }
+    }
+
     @SuppressWarnings("UnusedDeclaration")
     @MBean
     @Internal