You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2013/09/10 11:55:39 UTC

svn commit: r1521413 - in /cxf/trunk/rt: frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/dom4j/ rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/dom4j/

Author: sergeyb
Date: Tue Sep 10 09:55:39 2013
New Revision: 1521413

URL: http://svn.apache.org/r1521413
Log:
[CXF-4381] Updating DOM4JProvider to better support custom media types

Modified:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
    cxf/trunk/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/dom4j/DOM4JProvider.java
    cxf/trunk/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/dom4j/DOM4JProviderTest.java

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java?rev=1521413&r1=1521412&r2=1521413&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java Tue Sep 10 09:55:39 2013
@@ -214,26 +214,25 @@ public final class JAXRSUtils {
         return theList;
     }
 
-    @SuppressWarnings("unchecked")
-    private static String[] getUserMediaTypes(Object provider, String methodName) {
+    private static String[] getUserMediaTypes(Object provider, boolean consumes) {
         String[] values = null;
         if (AbstractConfigurableProvider.class.isAssignableFrom(provider.getClass())) {
-            try {
-                Method m = provider.getClass().getMethod(methodName, new Class[]{});
-                List<String> types = (List<String>)m.invoke(provider, new Object[]{});
-                if (types != null) {
-                    values = types.size() > 0 ? types.toArray(new String[types.size()])
-                                               : new String[]{"*/*"};
-                }
-            } catch (Exception ex) {
-                // ignore
+            List<String> types = null;
+            if (consumes) {
+                types = ((AbstractConfigurableProvider)provider).getConsumeMediaTypes();
+            } else {
+                types = ((AbstractConfigurableProvider)provider).getProduceMediaTypes();
+            }
+            if (types != null) {
+                values = types.size() > 0 ? types.toArray(new String[types.size()])
+                                           : new String[]{"*/*"};
             }
         }
         return values;
     }
     
     public static List<MediaType> getProviderConsumeTypes(MessageBodyReader<?> provider) {
-        String[] values = getUserMediaTypes(provider, "getConsumeMediaTypes");
+        String[] values = getUserMediaTypes(provider, true);
         
         if (values == null) {
             return getConsumeTypes(provider.getClass().getAnnotation(Consumes.class));
@@ -243,7 +242,7 @@ public final class JAXRSUtils {
     }
     
     public static List<MediaType> getProviderProduceTypes(MessageBodyWriter<?> provider) {
-        String[] values = getUserMediaTypes(provider, "getProduceMediaTypes");
+        String[] values = getUserMediaTypes(provider, false);
         if (values == null) {
             return getProduceTypes(provider.getClass().getAnnotation(Produces.class));
         } else {

Modified: cxf/trunk/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/dom4j/DOM4JProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/dom4j/DOM4JProvider.java?rev=1521413&r1=1521412&r2=1521413&view=diff
==============================================================================
--- cxf/trunk/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/dom4j/DOM4JProvider.java (original)
+++ cxf/trunk/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/dom4j/DOM4JProvider.java Tue Sep 10 09:55:39 2013
@@ -35,12 +35,13 @@ import javax.ws.rs.ext.MessageBodyReader
 import javax.ws.rs.ext.MessageBodyWriter;
 import javax.ws.rs.ext.Providers;
 
+import org.apache.cxf.jaxrs.provider.AbstractConfigurableProvider;
 import org.apache.cxf.staxutils.StaxUtils;
 
-@javax.ws.rs.Produces({"application/xml", "text/xml", "application/json" })
-@javax.ws.rs.Consumes({"application/xml", "text/xml", "application/json" })
-public class DOM4JProvider implements MessageBodyReader<org.dom4j.Document>,
-                MessageBodyWriter<org.dom4j.Document> {
+@javax.ws.rs.Produces({"application/xml", "application/*+xml", "text/xml", "application/json" })
+@javax.ws.rs.Consumes({"application/xml", "application/*+xml", "text/xml", "application/json" })
+public class DOM4JProvider extends AbstractConfigurableProvider 
+    implements MessageBodyReader<org.dom4j.Document>, MessageBodyWriter<org.dom4j.Document> {
 
     private static final Class<org.w3c.dom.Document> DOM_DOC_CLS = 
         org.w3c.dom.Document.class;

Modified: cxf/trunk/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/dom4j/DOM4JProviderTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/dom4j/DOM4JProviderTest.java?rev=1521413&r1=1521412&r2=1521413&view=diff
==============================================================================
--- cxf/trunk/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/dom4j/DOM4JProviderTest.java (original)
+++ cxf/trunk/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/dom4j/DOM4JProviderTest.java Tue Sep 10 09:55:39 2013
@@ -50,13 +50,13 @@ public class DOM4JProviderTest extends A
         assertTrue(str.contains("<a/>") || str.contains("<a></a>"));
     }
     private org.dom4j.Document readXML() throws Exception {
-        return readXML("<a/>");
+        return readXML(MediaType.APPLICATION_XML_TYPE, "<a/>");
     }
-    private org.dom4j.Document readXML(final String xml) throws Exception {
+    private org.dom4j.Document readXML(MediaType ct, final String xml) throws Exception {
         DOM4JProvider p = new DOM4JProvider();
         p.setProviders(new ProvidersImpl(createMessage()));
         org.dom4j.Document dom = p.readFrom(org.dom4j.Document.class, org.dom4j.Document.class, 
-            new Annotation[] {}, MediaType.APPLICATION_XML_TYPE, new MetadataMap<String, String>(),
+            new Annotation[] {}, ct, new MetadataMap<String, String>(),
             new ByteArrayInputStream(xml.getBytes("UTF-8")));
         return dom;
     }
@@ -76,14 +76,22 @@ public class DOM4JProviderTest extends A
 
     @Test
     public void testWriteXML() throws Exception {
-        org.dom4j.Document dom = readXML();
+        doTestWriteXML(MediaType.APPLICATION_XML_TYPE);
+    }
+    
+    @Test
+    public void testWriteXMLCustomCt() throws Exception {
+        doTestWriteXML(MediaType.valueOf("application/custom+xml"));
+    }
+    
+    private void doTestWriteXML(MediaType ct) throws Exception {
+        org.dom4j.Document dom = readXML(ct, "<a/>");
         DOM4JProvider p = new DOM4JProvider();
         p.setProviders(new ProvidersImpl(createMessage()));
         
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         p.writeTo(dom, org.dom4j.Document.class, org.dom4j.Document.class, 
-            new Annotation[]{}, MediaType.APPLICATION_XML_TYPE, new MetadataMap<String, Object>(),
-            bos);
+            new Annotation[]{}, ct, new MetadataMap<String, Object>(), bos);
         String str = bos.toString();
         // starts with the xml PI
         assertTrue(str.contains("<a/>") || str.contains("<a></a>"));
@@ -106,7 +114,7 @@ public class DOM4JProviderTest extends A
     
     @Test
     public void testWriteJSONDropRoot() throws Exception {
-        org.dom4j.Document dom = readXML("<root><a/></root>");
+        org.dom4j.Document dom = readXML(MediaType.APPLICATION_XML_TYPE, "<root><a/></root>");
         DOM4JProvider p = new DOM4JProvider();
         p.setProviders(new ProvidersImpl(createMessageWithJSONProvider()));