Title: [1958] trunk: Cannot omit XML elements from derived fields (XSTR-688).
Revision
1958
Author
joehni
Date
2012-01-18 13:05:13 -0600 (Wed, 18 Jan 2012)

Log Message

Cannot omit XML elements from derived fields (XSTR-688).

Modified Paths


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:

http://xircles.codehaus.org/manage_email

Reply via email to