Author: bimargulies
Date: Fri Aug 21 19:24:18 2009
New Revision: 806687

URL: http://svn.apache.org/viewvc?rev=806687&view=rev
Log:
More changes to cope with collections and their aftermath with Aegis+JAX-RS.

Modified:
    
cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisXMLStreamDataWriter.java
    
cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/AbstractTypeCreator.java
    
cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/xml/AbstractMessageWriter.java
    
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractAegisProvider.java
    
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisJSONProviderTest.java
    
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisProviderTest.java

Modified: 
cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisXMLStreamDataWriter.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisXMLStreamDataWriter.java?rev=806687&r1=806686&r2=806687&view=diff
==============================================================================
--- 
cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisXMLStreamDataWriter.java
 (original)
+++ 
cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/AegisXMLStreamDataWriter.java
 Fri Aug 21 19:24:18 2009
@@ -33,7 +33,7 @@
 public class AegisXMLStreamDataWriter extends AbstractAegisIoImpl implements 
AegisWriter<XMLStreamWriter> {
 
     private static final Logger LOG = 
LogUtils.getL7dLogger(AegisXMLStreamDataWriter.class);
-
+    
     AegisXMLStreamDataWriter(AegisContext globalContext) {
         super(globalContext);
     }
@@ -77,7 +77,9 @@
         
         ElementWriter writer = new ElementWriter(output);
         MessageWriter w2 = writer.getElementWriter(elementName);
-        if (aegisType != null && aegisType.getSchemaType() != null) {
+        if (getContext().isWriteXsiTypes()
+            && aegisType != null 
+            && aegisType.getSchemaType() != null) {
             // if we know the type, write it. We are standalone, and the 
reader needs it.
             w2.writeXsiType(aegisType.getSchemaType());
         }

Modified: 
cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/AbstractTypeCreator.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/AbstractTypeCreator.java?rev=806687&r1=806686&r2=806687&view=diff
==============================================================================
--- 
cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/AbstractTypeCreator.java
 (original)
+++ 
cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/AbstractTypeCreator.java
 Fri Aug 21 19:24:18 2009
@@ -410,7 +410,9 @@
             java.lang.reflect.Type rawType = pt.getRawType();
             if (rawType instanceof Class) {
                 info.setTypeClass((Class)rawType);
-            }
+            } 
+        } else if (t instanceof Class) {
+            info.setTypeClass((Class)t);
         }
         
         info.setDescription("reflected type " + t.toString());

Modified: 
cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/xml/AbstractMessageWriter.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/xml/AbstractMessageWriter.java?rev=806687&r1=806686&r2=806687&view=diff
==============================================================================
--- 
cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/xml/AbstractMessageWriter.java
 (original)
+++ 
cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/xml/AbstractMessageWriter.java
 Fri Aug 21 19:24:18 2009
@@ -28,6 +28,9 @@
  * @author <a href="mailto:[email protected]";>Dan Diephouse</a>
  */
 public abstract class AbstractMessageWriter implements MessageWriter {
+    
+    private boolean xsiTypeWritten;
+    
     /**
      * Create a LiteralWriter but without writing an element name.
      * 
@@ -37,6 +40,10 @@
     }
 
     public void writeXsiType(QName type) {
+        if (xsiTypeWritten) {
+            return;
+        }
+        xsiTypeWritten = true;
 
         /*
          * Do not assume that the prefix supplied with the QName should be used

Modified: 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractAegisProvider.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractAegisProvider.java?rev=806687&r1=806686&r2=806687&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractAegisProvider.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractAegisProvider.java
 Fri Aug 21 19:24:18 2009
@@ -100,7 +100,7 @@
             rootClasses.add(ct);
         }
     }
-    private AegisContext getClassContext(Class<?> type, Type genericType) {
+    private AegisContext getClassContext(Class<?> type, Type reflectionType) {
         synchronized (classContexts) {
             AegisContext context = classContexts.get(type);
             if (context == null) {
@@ -108,17 +108,24 @@
                 context.setWriteXsiTypes(writeXsiType); 
                 context.setReadXsiTypes(readXsiType);
                 Set<Class<?>> rootClasses = new HashSet<Class<?>>();
-                rootClasses.add(type);
-                if (!(genericType instanceof Class)) {
-                    addType(rootClasses, genericType, true);
+                /* we do not want raw collection types in here.
+                 * so we only add the 'type' to the root classes if the 
+                 * un-erased (reflection) type is non-generic.
+                 * Now, perhaps we should tolerate non-collection
+                 * generic types.  
+                 */
+                if (reflectionType == null || reflectionType instanceof Class) 
{
+                    rootClasses.add(type);
+                } else {
+                    addType(rootClasses, reflectionType, true);
                 }
                 context.setRootClasses(rootClasses);
                 context.initialize();
                 /* It's not enough, in the presence of generic types, to just 
add it as a root.
                     a mapping is also needed */
-                if (genericType != null) {
+                if (reflectionType != null) {
                     org.apache.cxf.aegis.type.Type aegisType;
-                    aegisType = 
context.getTypeMapping().getTypeCreator().createType(genericType);
+                    aegisType = 
context.getTypeMapping().getTypeCreator().createType(reflectionType);
                     context.getTypeMapping().register(aegisType);
                 }
                 classContexts.put(type, context);

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=806687&r1=806686&r2=806687&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 Aug 21 19:24:18 2009
@@ -39,7 +39,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 {
@@ -133,10 +132,11 @@
         
     }
     
+    @org.junit.Ignore
     @Test
-    @Ignore
     public void testWriteCollection() throws Exception {
         AegisJSONProvider p = new AegisJSONProvider();
+        p.setWriteXsiType(false);
         AbstractAegisProvider.clearContexts();
         ByteArrayOutputStream os = new ByteArrayOutputStream();
         AegisTestBean bean = new AegisTestBean();
@@ -157,8 +157,8 @@
     @Test
     public void testManyTags() throws Exception {
         AegisJSONProvider p = new AegisJSONProvider();
-        AbstractAegisProvider.clearContexts();
         p.setWriteXsiType(false);
+        AbstractAegisProvider.clearContexts();
         p.setSerializeAsArray(true);
         
         Tags tags = new Tags();

Modified: 
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisProviderTest.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisProviderTest.java?rev=806687&r1=806686&r2=806687&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisProviderTest.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisProviderTest.java
 Fri Aug 21 19:24:18 2009
@@ -38,11 +38,11 @@
 public class AegisProviderTest extends Assert {
     
     private static final String SIMPLE_BEAN_XML 
-        = "<?xml version='1.0' encoding='UTF-8'?><ns1:AegisTestBean "
-            + "xmlns:ns1=\"http://fortest.jaxrs.cxf.apache.org\"; "
-            + "xmlns:ns2=\"http://www.w3.org/2001/XMLSchema-instance\"; 
ns2:type=\"ns1:AegisTestBean\">"
-            + 
"<ns1:boolValue>true</ns1:boolValue><ns1:strValue>hovercraft</ns1:strValue>"
-            + "</ns1:AegisTestBean>";
+        = "<?xml version='1.0' encoding='UTF-8'?>" 
+           + "<ns1:AegisTestBean 
xmlns:ns1=\"http://fortest.jaxrs.cxf.apache.org\"";
+           + " xmlns:ns2=\"http://www.w3.org/2001/XMLSchema-instance\"";
+           + " ns2:type=\"ns1:AegisTestBean\">"
+           + 
"<ns1:boolValue>true</ns1:boolValue><ns1:strValue>hovercraft</ns1:strValue></ns1:AegisTestBean>";
 
     @After
     public void clearCache() {


Reply via email to