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 2009/07/24 17:33:57 UTC

svn commit: r797534 - in /cxf/trunk/rt/frontend/jaxrs/src: main/java/org/apache/cxf/jaxrs/provider/AegisJSONProvider.java main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java test/java/org/apache/cxf/jaxrs/provider/AegisJSONProviderTest.java

Author: sergeyb
Date: Fri Jul 24 15:33:57 2009
New Revision: 797534

URL: http://svn.apache.org/viewvc?rev=797534&view=rev
Log:
JAXRS : fixing Aegis JSON reads

Modified:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AegisJSONProvider.java
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
    cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisJSONProviderTest.java

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AegisJSONProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AegisJSONProvider.java?rev=797534&r1=797533&r2=797534&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AegisJSONProvider.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AegisJSONProvider.java Fri Jul 24 15:33:57 2009
@@ -25,6 +25,8 @@
 import java.io.OutputStreamWriter;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
+import java.util.Collections;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -33,11 +35,13 @@
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.ext.Provider;
+import javax.xml.namespace.NamespaceContext;
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
 
-import org.apache.cxf.common.util.PackageUtils;
+import org.apache.cxf.jaxrs.utils.JAXRSUtils;
+import org.apache.cxf.staxutils.DepthXMLStreamReader;
 import org.codehaus.jettison.AbstractXMLStreamWriter;
 import org.codehaus.jettison.mapped.Configuration;
 import org.codehaus.jettison.mapped.MappedNamespaceConvention;
@@ -99,17 +103,17 @@
     
     @Override
     protected XMLStreamReader createStreamReader(Class<?> type, InputStream is) throws Exception {
+        if (readXsiType) {
+            namespaceMap.putIfAbsent("http://www.w3.org/2001/XMLSchema-instance", "xsins");
+        }
+        getQName(type);
         MappedXMLInputFactory factory = new MappedXMLInputFactory(namespaceMap);
-        return factory.createXMLStreamReader(is);
+        return new NamespaceContextReader(factory.createXMLStreamReader(is));
     }
     
     private QName getQName(Class<?> type) {
-        String nsURI = PackageUtils.getNamespace(PackageUtils.getPackageName(type));
-        if (nsURI.endsWith("/")) {
-            nsURI = nsURI.substring(0, nsURI.length() - 1);
-        }
-        QName qname = new QName(nsURI, type.getSimpleName(), "ns1"); 
-        namespaceMap.putIfAbsent(nsURI, "ns1");
+        QName qname = JAXRSUtils.getClassQName(type); 
+        namespaceMap.putIfAbsent(qname.getNamespaceURI(), "ns1");
         return qname;
     }
     
@@ -118,4 +122,36 @@
                                     qname.getNamespaceURI(),
                                     qname.getLocalPart());
     }
+    
+    private class NamespaceContextReader extends DepthXMLStreamReader {
+        public NamespaceContextReader(XMLStreamReader reader) {
+            super(reader);
+        }
+        
+        @Override
+        public NamespaceContext getNamespaceContext() {
+            return new NamespaceContext() {
+
+                public String getNamespaceURI(String prefix) {
+                    for (Map.Entry<String, String> entry : namespaceMap.entrySet()) {
+                        if (entry.getValue().equals(prefix)) {
+                            return entry.getKey();
+                        }
+                    }
+                    return null;
+                }
+
+                public String getPrefix(String ns) {
+                    return namespaceMap.get(ns);
+                }
+
+                public Iterator getPrefixes(String ns) {
+                    String prefix = getPrefix(ns);
+                    return prefix == null ? null : Collections.singletonList(prefix).iterator();
+                }
+                
+            };
+        }
+    }
+    
 }

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=797534&r1=797533&r2=797534&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 Fri Jul 24 15:33:57 2009
@@ -63,9 +63,11 @@
 import javax.ws.rs.ext.MessageBodyReader;
 import javax.ws.rs.ext.MessageBodyWriter;
 import javax.ws.rs.ext.Providers;
+import javax.xml.namespace.QName;
 
 import org.apache.cxf.common.i18n.BundleUtils;
 import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.common.util.PackageUtils;
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.jaxrs.ext.MessageContext;
 import org.apache.cxf.jaxrs.ext.MessageContextImpl;
@@ -1041,4 +1043,12 @@
         return false;
     }
     
+    public static QName getClassQName(Class<?> type) {
+        String nsURI = PackageUtils.getNamespace(PackageUtils.getPackageName(type));
+        if (nsURI.endsWith("/")) {
+            nsURI = nsURI.substring(0, nsURI.length() - 1);
+        }
+        return new QName(nsURI, type.getSimpleName(), "ns1"); 
+    }
+    
 }

Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisJSONProviderTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisJSONProviderTest.java?rev=797534&r1=797533&r2=797534&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisJSONProviderTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisJSONProviderTest.java Fri Jul 24 15:33:57 2009
@@ -35,7 +35,6 @@
 import org.apache.cxf.jaxrs.resources.Tags;
 
 import org.junit.Assert;
-import org.junit.Ignore;
 import org.junit.Test;
 
 public class AegisJSONProviderTest extends Assert {
@@ -52,14 +51,27 @@
         assertFalse(p.isReadable(AegisTestBean.class, null, null, null));
     }
     
-    @SuppressWarnings("unchecked")
+    
     @Test
-    @Ignore
     public void testReadFrom() throws Exception {
+        doTestRead(true);
+    }
+    
+    @Test
+    public void testReadFromNoMap() throws Exception {
+        doTestRead(false);
+    }
+    
+    @SuppressWarnings("unchecked")
+    private void doTestRead(boolean setNsMap) throws Exception {
         AegisJSONProvider p = new AegisJSONProvider();
-        Map<String, String> namespaceMap = new HashMap<String, String>();
-        namespaceMap.put("http://fortest.jaxrs.cxf.apache.org", "ns1");
-        namespaceMap.put("http://www.w3.org/2001/XMLSchema-instance", "ns2");
+        p.clearContexts();
+        if (setNsMap) {
+            Map<String, String> namespaceMap = new HashMap<String, String>();
+            namespaceMap.put("http://fortest.jaxrs.cxf.apache.org", "ns1");
+            namespaceMap.put("http://www.w3.org/2001/XMLSchema-instance", "xsins");
+            p.setNamespaceMap(namespaceMap);
+        }
         String data = "{\"ns1.AegisTestBean\":{\"@xsins.type\":\"ns1:AegisTestBean\","
             + "\"ns1.boolValue\":true,\"ns1.strValue\":\"hovercraft\"}}";