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 2011/02/20 22:33:18 UTC

svn commit: r1072739 - in /cxf/branches/2.3.x-fixes: ./ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/fortest/jaxb/packageinfo/ rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/p...

Author: sergeyb
Date: Sun Feb 20 21:33:17 2011
New Revision: 1072739

URL: http://svn.apache.org/viewvc?rev=1072739&view=rev
Log:
Merged revisions 1072736 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/trunk

........
  r1072736 | sergeyb | 2011-02-20 21:30:36 +0000 (Sun, 20 Feb 2011) | 1 line
  
  [CXF-3351] Getting the readers from the message and checking the package namespace
........

Added:
    cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/fortest/jaxb/packageinfo/Book2NoRootElement.java
      - copied unchanged from r1072736, cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/fortest/jaxb/packageinfo/Book2NoRootElement.java
    cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/resources/BookNoRootElement.java
      - copied unchanged from r1072736, cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/resources/BookNoRootElement.java
Modified:
    cxf/branches/2.3.x-fixes/   (props changed)
    cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
    cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
    cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java

Propchange: cxf/branches/2.3.x-fixes/
------------------------------------------------------------------------------
    svn:mergeinfo = /cxf/trunk:1072736

Propchange: cxf/branches/2.3.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java?rev=1072739&r1=1072738&r2=1072739&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java Sun Feb 20 21:33:17 2011
@@ -207,7 +207,8 @@ public abstract class AbstractJAXBProvid
             }
         }
         if (name == null && marshalAsJaxbElement) {
-            name = JAXRSUtils.convertStringToQName(cls.getSimpleName());
+            name = new QName(getPackageNamespace(cls),
+                             cls.getSimpleName());
         }
         if (name != null) {
             return new JAXBElement(name, cls, null, obj);
@@ -284,10 +285,7 @@ public abstract class AbstractJAXBProvid
         if (root != null) {
             String namespace = getNamespace(root.namespace());
             if ("".equals(namespace)) {
-                String packageNs = JAXBUtils.getPackageNamespace(cls);
-                if (packageNs != null) {
-                    namespace = getNamespace(packageNs);
-                }
+                namespace = getPackageNamespace(cls);
             }
             String name = getLocalName(root.name(), cls.getSimpleName(), pluralName);
             return new QName(namespace, name);
@@ -326,6 +324,11 @@ public abstract class AbstractJAXBProvid
         return name;
     }
     
+    private String getPackageNamespace(Class<?> cls) {
+        String packageNs = JAXBUtils.getPackageNamespace(cls);
+        return packageNs != null ? getNamespace(packageNs) : "";
+    }
+    
     private String getNamespace(String namespace) {
         if (JAXB_DEFAULT_NAMESPACE.equals(namespace)) {
             return "";

Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java?rev=1072739&r1=1072738&r2=1072739&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java Sun Feb 20 21:33:17 2011
@@ -152,7 +152,10 @@ public class JAXBElementProvider extends
             if (JAXBElement.class.isAssignableFrom(type) 
                 || unmarshalAsJaxbElement 
                 || jaxbElementClassMap != null && jaxbElementClassMap.containsKey(theType.getName())) {
-                response = unmarshaller.unmarshal(StaxUtils.createXMLStreamReader(is), theType);
+                XMLStreamReader reader = getStreamReader(is, type, mt);
+                response = unmarshaller.unmarshal(
+                     TransformUtils.createNewReaderIfNeeded(reader, is), 
+                     theType);
             } else {
                 response = doUnmarshal(unmarshaller, type, is, mt);
             }

Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java?rev=1072739&r1=1072738&r2=1072739&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java Sun Feb 20 21:33:17 2011
@@ -62,10 +62,12 @@ import org.w3c.dom.Node;
 
 import org.xml.sax.ContentHandler;
 
+import org.apache.cxf.jaxrs.fortest.jaxb.packageinfo.Book2NoRootElement;
 import org.apache.cxf.jaxrs.impl.MetadataMap;
 import org.apache.cxf.jaxrs.model.ClassResourceInfo;
 import org.apache.cxf.jaxrs.provider.index.TestBean;
 import org.apache.cxf.jaxrs.resources.Book;
+import org.apache.cxf.jaxrs.resources.BookNoRootElement;
 import org.apache.cxf.jaxrs.resources.BookStore;
 import org.apache.cxf.jaxrs.resources.CollectionsResource;
 import org.apache.cxf.jaxrs.resources.ManyTags;
@@ -303,6 +305,28 @@ public class JAXBElementProviderTest ext
         readSuperBook2(bos.toString(), false);
     }
     
+    @SuppressWarnings("unchecked")
+    @Test
+    public void testWriteWithoutXmlRootElementWithPackageInfo() throws Exception {
+        JAXBElementProvider provider = new JAXBElementProvider();
+        provider.setMarshallAsJaxbElement(true);
+        Book2NoRootElement book = new Book2NoRootElement(333);
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        provider.writeTo(book, Book2NoRootElement.class, 
+                         Book2NoRootElement.class,
+                         new Annotation[0], MediaType.TEXT_XML_TYPE, 
+                         new MetadataMap<String, Object>(), bos);
+        provider.setUnmarshallAsJaxbElement(true);
+        
+        ByteArrayInputStream is = new ByteArrayInputStream(bos.toByteArray());
+        Book2NoRootElement book2 = 
+            (Book2NoRootElement)provider.readFrom(
+                       (Class)Book2NoRootElement.class, 
+                       Book2NoRootElement.class,
+                       new Annotation[0], MediaType.TEXT_XML_TYPE, new MetadataMap<String, String>(), is);
+        assertEquals(book2.getId(), book.getId());
+    }
+    
     @Test
     @SuppressWarnings("unchecked")
     public void testWriteWithoutXmlRootElementObjectFactory() throws Exception {
@@ -342,6 +366,40 @@ public class JAXBElementProviderTest ext
     }
     
     @SuppressWarnings("unchecked")
+    @Test
+    public void testReadSuperBookWithJaxbElement() throws Exception {
+        final String data = "<BookNoRootElement>"
+            + "<name>superbook</name><id>111</id>" 
+            + "</BookNoRootElement>";
+        JAXBElementProvider provider = new JAXBElementProvider();
+        provider.setUnmarshallAsJaxbElement(true);
+        ByteArrayInputStream is = new ByteArrayInputStream(data.getBytes());
+        BookNoRootElement book = (BookNoRootElement)provider.readFrom(
+                       (Class)BookNoRootElement.class, BookNoRootElement.class,
+                       new Annotation[0], MediaType.TEXT_XML_TYPE, new MetadataMap<String, String>(), is);
+        assertEquals(111L, book.getId());
+        assertEquals("superbook", book.getName());
+    }
+    
+    @SuppressWarnings("unchecked")
+    @Test
+    public void testReadSuperBookWithJaxbElementAndTransform() throws Exception {
+        final String data = "<BookNoRootElement xmlns=\"http://books\">"
+            + "<name>superbook</name><id>111</id>" 
+            + "</BookNoRootElement>";
+        JAXBElementProvider provider = new JAXBElementProvider();
+        provider.setUnmarshallAsJaxbElement(true);
+        provider.setInTransformElements(Collections.singletonMap(
+             "{http://books}*", ""));
+        ByteArrayInputStream is = new ByteArrayInputStream(data.getBytes());
+        BookNoRootElement book = (BookNoRootElement)provider.readFrom(
+                       (Class)BookNoRootElement.class, BookNoRootElement.class,
+                       new Annotation[0], MediaType.TEXT_XML_TYPE, new MetadataMap<String, String>(), is);
+        assertEquals(111L, book.getId());
+        assertEquals("superbook", book.getName());
+    }
+    
+    @SuppressWarnings("unchecked")
     private void readSuperBook2(String data, boolean unmarshalAsJaxbElement) throws Exception {
         JAXBElementProvider provider = new JAXBElementProvider();
         if (!unmarshalAsJaxbElement) {