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() {