Log Message
Cannot omit XML elements from derived fields (XSTR-688).
Modified Paths
- trunk/xstream/src/java/com/thoughtworks/xstream/converters/reflection/AbstractReflectionConverter.java
- trunk/xstream/src/test/com/thoughtworks/acceptance/OmitFieldsTest.java
- trunk/xstream-distribution/src/content/changes.html
Diff
Modified: trunk/xstream/src/java/com/thoughtworks/xstream/converters/reflection/AbstractReflectionConverter.java (1957 => 1958)
--- trunk/xstream/src/java/com/thoughtworks/xstream/converters/reflection/AbstractReflectionConverter.java 2012-01-07 12:56:43 UTC (rev 1957)
+++ trunk/xstream/src/java/com/thoughtworks/xstream/converters/reflection/AbstractReflectionConverter.java 2012-01-18 19:05:13 UTC (rev 1958)
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2004, 2005, 2006 Joe Walnes.
- * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 XStream Committers.
+ * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 XStream Committers.
* All rights reserved.
*
* The software in this package is published under the terms of the BSD
@@ -299,7 +299,7 @@
if (fieldExistsInClass) {
Field field = reflectionProvider.getField(classDefiningField != null ? classDefiningField : result.getClass(), fieldName);
if ((Modifier.isTransient(field.getModifiers()) && !shouldUnmarshalTransientFields())
- || !mapper.shouldSerializeMember(classDefiningField != null ? classDefiningField : result.getClass(), fieldName)) {
+ || !mapper.shouldSerializeMember(field.getDeclaringClass(), fieldName)) {
reader.moveUp();
continue;
}
Modified: trunk/xstream/src/test/com/thoughtworks/acceptance/OmitFieldsTest.java (1957 => 1958)
--- trunk/xstream/src/test/com/thoughtworks/acceptance/OmitFieldsTest.java 2012-01-07 12:56:43 UTC (rev 1957)
+++ trunk/xstream/src/test/com/thoughtworks/acceptance/OmitFieldsTest.java 2012-01-18 19:05:13 UTC (rev 1958)
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2005 Joe Walnes.
- * Copyright (C) 2006, 2007, 2010 XStream Committers.
+ * Copyright (C) 2006, 2007, 2010, 2012 XStream Committers.
* All rights reserved.
*
* The software in this package is published under the terms of the BSD
@@ -101,6 +101,32 @@
assertEquals("d", out.derived);
}
+ public void testFieldsOfDerivedTypesCanBeExplicitlyOmittedThroughFacade() {
+ DerivedThing in = new DerivedThing();
+ in.alwaysIgnore = "a";
+ in.sometimesIgnore = "b";
+ in.neverIgnore = "c";
+ in.derived = "d";
+
+ String expectedXml = ""
+ + "<thing>\n"
+ + " <sometimesIgnore>b</sometimesIgnore>\n"
+ + " <neverIgnore>c</neverIgnore>\n"
+ + "</thing>";
+
+ xstream.alias("thing", DerivedThing.class);
+ xstream.omitField(DerivedThing.class, "derived");
+
+ String actualXml = xstream.toXML(in);
+ assertEquals(expectedXml, actualXml);
+
+ DerivedThing out = (DerivedThing)xstream.fromXML(actualXml);
+ assertEquals(null, out.alwaysIgnore);
+ assertEquals("b", out.sometimesIgnore);
+ assertEquals("c", out.neverIgnore);
+ assertEquals(null, out.derived);
+ }
+
public static class AnotherThing extends StandardObject {
String stuff;
String cheese;
@@ -246,6 +272,42 @@
assertEquals("c", out.neverIgnore);
}
+ public void testExistingFieldsInDerivedClassesCanBeExplicitlyOmittedAtDeserialization() {
+ String actualXml = ""
+ + "<thing>\n"
+ + " <sometimesIgnore>b</sometimesIgnore>\n"
+ + " <neverIgnore>c</neverIgnore>\n"
+ + " <derived>foo</derived>\n"
+ + "</thing>";
+
+ xstream.alias("thing", DerivedThing.class);
+ xstream.omitField(DerivedThing.class, "derived");
+
+ DerivedThing out = (DerivedThing)xstream.fromXML(actualXml);
+ assertEquals(null, out.alwaysIgnore);
+ assertEquals("b", out.sometimesIgnore);
+ assertEquals("c", out.neverIgnore);
+ assertEquals(null, out.derived);
+ }
+
+ public void testExistingInheritedFieldsCanBeExplicitlyOmittedAtDeserialization() {
+ String actualXml = ""
+ + "<thing>\n"
+ + " <sometimesIgnore>foo</sometimesIgnore>\n"
+ + " <neverIgnore>c</neverIgnore>\n"
+ + " <derived>d</derived>\n"
+ + "</thing>";
+
+ xstream.alias("thing", DerivedThing.class);
+ xstream.omitField(Thing.class, "sometimesIgnore");
+
+ DerivedThing out = (DerivedThing)xstream.fromXML(actualXml);
+ assertEquals(null, out.alwaysIgnore);
+ assertEquals(null, out.sometimesIgnore);
+ assertEquals("c", out.neverIgnore);
+ assertEquals("d", out.derived);
+ }
+
static class ThingAgain extends Thing {
String sometimesIgnore;
Modified: trunk/xstream-distribution/src/content/changes.html (1957 => 1958)
--- trunk/xstream-distribution/src/content/changes.html 2012-01-07 12:56:43 UTC (rev 1957)
+++ trunk/xstream-distribution/src/content/changes.html 2012-01-18 19:05:13 UTC (rev 1958)
@@ -35,6 +35,7 @@
<h2>Minor changes</h2>
<ul>
+ <li>JIRA:XSTR-688: Cannot omit XML elements from derived fields.</li>
<li>JIRA:XSTR-685: Deserialization from file or URL keeps stream open.</li>
<li>JIRA:XSTR-684: XML 1.0 character validation fails for characters from 0x10 to 0x1f.</li>
</ul>
To unsubscribe from this list please visit:
