- Revision
- 130
- Author
- mward
- Date
- 2007-06-01 23:16:01 -0500 (Fri, 01 Jun 2007)
Log Message
renamed GetterXMLConverter to BeanPropertyConverter
Modified Paths
Added Paths
- trunk/core/src/main/java/org/codehaus/waffle/view/BeanPropertyConverter.java
- trunk/core/src/test/java/org/codehaus/waffle/view/BeanPropertyConverterTest.java
Removed Paths
Diff
Copied: trunk/core/src/main/java/org/codehaus/waffle/view/BeanPropertyConverter.java (from rev 129, trunk/core/src/main/java/org/codehaus/waffle/view/GetterXMLConverter.java) (0 => 130)
--- trunk/core/src/main/java/org/codehaus/waffle/view/BeanPropertyConverter.java (rev 0) +++ trunk/core/src/main/java/org/codehaus/waffle/view/BeanPropertyConverter.java 2007-06-02 04:16:01 UTC (rev 130) @@ -0,0 +1,63 @@ +package org.codehaus.waffle.view; + +import com.thoughtworks.xstream.converters.Converter; +import com.thoughtworks.xstream.converters.MarshallingContext; +import com.thoughtworks.xstream.converters.UnmarshallingContext; +import com.thoughtworks.xstream.io.HierarchicalStreamReader; +import com.thoughtworks.xstream.io.HierarchicalStreamWriter; + +import java.beans.BeanInfo; +import java.beans.IntrospectionException; +import java.beans.Introspector; +import java.beans.PropertyDescriptor; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +/** + * Used to make XStream use bean getters to serialize, no attributes + * + * @author Paulo Silveira + * @author Michael Ward + */ +public class BeanPropertyConverter implements Converter { + + public void marshal(Object object, HierarchicalStreamWriter writer, MarshallingContext context) { + try { + BeanInfo beanInfo = Introspector.getBeanInfo(object.getClass()); + PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); + + for (PropertyDescriptor propertyDescriptor : propertyDescriptors) { + Method readMethod = propertyDescriptor.getReadMethod(); + + // skip getClass() method and any get/is methods that take arguments + if (readMethod.getParameterTypes().length == 0 && !readMethod.getName().equals("getClass")) { + writer.startNode(propertyDescriptor.getName()); + Object got = readMethod.invoke(object); + + if (got != null) { + context.convertAnother(got); + } + + writer.endNode(); + } + } + } catch (IllegalArgumentException e) { + throw new IllegalStateException(e); + } catch (IllegalAccessException e) { + throw new IllegalStateException(e); + } catch (InvocationTargetException e) { + throw new IllegalStateException(e); + } catch (IntrospectionException e) { + throw new IllegalStateException(e); + } + } + + public Object unmarshal(HierarchicalStreamReader hierarchicalStreamReader, + UnmarshallingContext unmarshallingContext) { + throw new UnsupportedOperationException("Converter only available for marshaling"); + } + + public boolean canConvert(Class clazz) { + return true; + } +}
Deleted: trunk/core/src/main/java/org/codehaus/waffle/view/GetterXMLConverter.java (129 => 130)
--- trunk/core/src/main/java/org/codehaus/waffle/view/GetterXMLConverter.java 2007-06-02 04:09:52 UTC (rev 129) +++ trunk/core/src/main/java/org/codehaus/waffle/view/GetterXMLConverter.java 2007-06-02 04:16:01 UTC (rev 130) @@ -1,63 +0,0 @@ -package org.codehaus.waffle.view; - -import com.thoughtworks.xstream.converters.Converter; -import com.thoughtworks.xstream.converters.MarshallingContext; -import com.thoughtworks.xstream.converters.UnmarshallingContext; -import com.thoughtworks.xstream.io.HierarchicalStreamReader; -import com.thoughtworks.xstream.io.HierarchicalStreamWriter; - -import java.beans.BeanInfo; -import java.beans.IntrospectionException; -import java.beans.Introspector; -import java.beans.PropertyDescriptor; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -/** - * Used to make XStream use bean getters to serialize, no attributes - * - * @author Paulo Silveira - * @author Michael Ward - */ -public class GetterXMLConverter implements Converter { - - public void marshal(Object object, HierarchicalStreamWriter writer, MarshallingContext context) { - try { - BeanInfo beanInfo = Introspector.getBeanInfo(object.getClass()); - PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); - - for (PropertyDescriptor propertyDescriptor : propertyDescriptors) { - Method readMethod = propertyDescriptor.getReadMethod(); - - // skip getClass() method and any get/is methods that take arguments - if (readMethod.getParameterTypes().length == 0 && !readMethod.getName().equals("getClass")) { - writer.startNode(propertyDescriptor.getName()); - Object got = readMethod.invoke(object); - - if (got != null) { - context.convertAnother(got); - } - - writer.endNode(); - } - } - } catch (IllegalArgumentException e) { - throw new IllegalStateException(e); - } catch (IllegalAccessException e) { - throw new IllegalStateException(e); - } catch (InvocationTargetException e) { - throw new IllegalStateException(e); - } catch (IntrospectionException e) { - throw new IllegalStateException(e); - } - } - - public Object unmarshal(HierarchicalStreamReader hierarchicalStreamReader, - UnmarshallingContext unmarshallingContext) { - throw new UnsupportedOperationException("Converter only available for marshaling"); - } - - public boolean canConvert(Class clazz) { - return true; - } -}
Modified: trunk/core/src/main/java/org/codehaus/waffle/view/XMLView.java (129 => 130)
--- trunk/core/src/main/java/org/codehaus/waffle/view/XMLView.java 2007-06-02 04:09:52 UTC (rev 129) +++ trunk/core/src/main/java/org/codehaus/waffle/view/XMLView.java 2007-06-02 04:16:01 UTC (rev 130) @@ -1,71 +1,70 @@ -package org.codehaus.waffle.view; - -import com.thoughtworks.xstream.XStream; -import com.thoughtworks.xstream.converters.collections.CollectionConverter; -import com.thoughtworks.xstream.io.xml.DomDriver; -import com.thoughtworks.xstream.mapper.MapperWrapper; -import org.codehaus.waffle.Constants; - -import javax.servlet.ServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.Collection; - -/** - * A view that renders the controller as XML. - * - * @author Paulo Silveira - */ -public class XMLView extends ResponderView { - - public static final String CONTENT_TYPE = "text/plain"; - - @Override - public void respond(ServletRequest request, HttpServletResponse response) - throws IOException { - XStream xs = new WaffleXStream(); - xs.registerConverter(new GetterXMLConverter(), -19); - xs.registerConverter(new CollectionConverter(xs.getMapper()) { - public boolean canConvert(Class clazz) { - return Collection.class.isAssignableFrom(clazz); - } - }, -18); - - // TODO: should we stream.setMode(XStream.NO_REFERENCES); ? - - String data = "" - response.setContentType(CONTENT_TYPE); - - // TODO: char encoding? - response.getOutputStream().print(data); - } - -} - -// todo: public class? isolated unit test -/** - * A XStream class already configured to output user friendly XML based on - * getters. - * - */ -class WaffleXStream extends XStream { - - public WaffleXStream() { - super(new DomDriver()); - } - - @Override - protected MapperWrapper wrapMapper(MapperWrapper next) { - return new MapperWrapper(next) { - @Override - public String serializedClass(Class type) { - String value = super.serializedClass(type); - if (type.getName().replace('$', '-').equals(value)) { - return type.getSimpleName(); - } - return value; - } - }; - } - +package org.codehaus.waffle.view; + +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.converters.collections.CollectionConverter; +import com.thoughtworks.xstream.io.xml.DomDriver; +import com.thoughtworks.xstream.mapper.MapperWrapper; +import org.codehaus.waffle.Constants; + +import javax.servlet.ServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Collection; + +/** + * A view that renders the controller as XML. + * + * @author Paulo Silveira + */ +public class XMLView extends ResponderView { + public static final String CONTENT_TYPE = "text/plain"; + + @Override + public void respond(ServletRequest request, HttpServletResponse response) throws IOException { + XStream xStream = new WaffleXStream(); + xStream.registerConverter(new BeanPropertyConverter(), -19); + xStream.registerConverter(new CollectionConverter(xStream.getMapper()) { + @Override + public boolean canConvert(Class clazz) { + return Collection.class.isAssignableFrom(clazz); + } + }, -18); + + // TODO: should we stream.setMode(XStream.NO_REFERENCES); ? + + String data = "" + response.setContentType(CONTENT_TYPE); // should be set for xml content + + // TODO: char encoding? + response.getOutputStream().print(data); + } + +} + +// todo: public class? isolated unit test +/** + * A XStream class already configured to output user friendly XML based on + * getters. + * + */ +class WaffleXStream extends XStream { + + public WaffleXStream() { + super(new DomDriver()); + } + + @Override + protected MapperWrapper wrapMapper(MapperWrapper next) { + return new MapperWrapper(next) { + @Override + public String serializedClass(Class type) { + String value = super.serializedClass(type); + if (type.getName().replace('$', '-').equals(value)) { + return type.getSimpleName(); + } + return value; + } + }; + } + } \ No newline at end of file
Copied: trunk/core/src/test/java/org/codehaus/waffle/view/BeanPropertyConverterTest.java (from rev 129, trunk/core/src/test/java/org/codehaus/waffle/view/GetterXMLConverterTest.java) (0 => 130)
--- trunk/core/src/test/java/org/codehaus/waffle/view/BeanPropertyConverterTest.java (rev 0) +++ trunk/core/src/test/java/org/codehaus/waffle/view/BeanPropertyConverterTest.java 2007-06-02 04:16:01 UTC (rev 130) @@ -0,0 +1,45 @@ +package org.codehaus.waffle.view; + +import com.thoughtworks.xstream.XStream; +import org.codehaus.waffle.testmodel.FakeBean; +import org.junit.Assert; +import org.junit.Test; + +public class BeanPropertyConverterTest { + + @Test + public void unmarshalShouldThrowUnsupportedOperationException() { + BeanPropertyConverter beanPropertyConverter = new BeanPropertyConverter(); + + try { + beanPropertyConverter.unmarshal(null, null); + Assert.fail("UnsupportedOperationException expected"); + } catch (UnsupportedOperationException expected) { + // expected + } + } + + @Test + public void convertShouldAlwaysBeTrue() { + BeanPropertyConverter beanPropertyConverter = new BeanPropertyConverter(); + Assert.assertTrue(beanPropertyConverter.canConvert(this.getClass())); + } + + @Test + public void testMarshall() { + XStream xStream = new XStream(); + xStream.registerConverter(new BeanPropertyConverter(), -19); + + FakeBean fakeBean = new FakeBean(); + String xml = xStream.toXML(fakeBean); + + String expected = + "<org.codehaus.waffle.testmodel.FakeBean>\n" + + " <count>0</count>\n" + + " <list/>\n" + + "</org.codehaus.waffle.testmodel.FakeBean>"; + + Assert.assertEquals(expected, xml); + } + +}
Deleted: trunk/core/src/test/java/org/codehaus/waffle/view/GetterXMLConverterTest.java (129 => 130)
--- trunk/core/src/test/java/org/codehaus/waffle/view/GetterXMLConverterTest.java 2007-06-02 04:09:52 UTC (rev 129) +++ trunk/core/src/test/java/org/codehaus/waffle/view/GetterXMLConverterTest.java 2007-06-02 04:16:01 UTC (rev 130) @@ -1,45 +0,0 @@ -package org.codehaus.waffle.view; - -import com.thoughtworks.xstream.XStream; -import org.codehaus.waffle.testmodel.FakeBean; -import org.junit.Assert; -import org.junit.Test; - -public class GetterXMLConverterTest { - - @Test - public void unmarshalShouldThrowUnsupportedOperationException() { - GetterXMLConverter getterXMLConverter = new GetterXMLConverter(); - - try { - getterXMLConverter.unmarshal(null, null); - Assert.fail("UnsupportedOperationException expected"); - } catch (UnsupportedOperationException expected) { - // expected - } - } - - @Test - public void convertShouldAlwaysBeTrue() { - GetterXMLConverter getterXMLConverter = new GetterXMLConverter(); - Assert.assertTrue(getterXMLConverter.canConvert(this.getClass())); - } - - @Test - public void testMarshall() { - XStream xStream = new XStream(); - xStream.registerConverter(new GetterXMLConverter(), -19); - - FakeBean fakeBean = new FakeBean(); - String xml = xStream.toXML(fakeBean); - - String expected = - "<org.codehaus.waffle.testmodel.FakeBean>\n" + - " <count>0</count>\n" + - " <list/>\n" + - "</org.codehaus.waffle.testmodel.FakeBean>"; - - Assert.assertEquals(expected, xml); - } - -}
To unsubscribe from this list please visit:
