XStream
  1. XStream
  2. XSTR-592

omitField only ignores field on deserialization if field non-existent

    Details

    • Type: Improvement Improvement
    • Status: Closed Closed
    • Priority: Minor Minor
    • Resolution: Fixed
    • Affects Version/s: 1.3
    • Fix Version/s: 1.4
    • Component/s: Core
    • Labels:
      None
    • JDK version and platform:
      jdk 1.6.0_16

      Description

      omitField does work during deserialization. However, it was designed to be a way to ignore those elements in the XML that correspond to non-existent fields (so an exception is not thrown). If you attempt to omit a field, but that field does still exist in the object being deserialized, the omitField call is ignored and the field is populated.

      This isn't necessarily a bug, but a small lack of capability and at the very least unintuitive. Would be nice if omitField always omitted the fields it has been called with, regardless of whether or not they exist in the class, or at least if there was some way in the API to specify that we want this additional omission behavior.

      Quote from Jorg:

      "I had a closer look and it turns out, that the omitField declaration only helps to omit XML tags that have no equivalent in the deserialized object (otherwise XStream would throw an exception). If the field exists, the omitField declaration is not even checked. You may open a JIRA issue for this.

      The only workaround I can currently think of is a custom converter based on the ReflectionConverter that uses a filter for the ReflectionProvider..."

      Example Program:

      public class XStreamOmitTest
      public static void main(String[] args)

      { XStream xstream = new XStream(); A a = new A(); a.x = "field 1"; a.y = "field 2"; String xml = xstream.toXML(a); System.out.println(xml); xstream.omitField(A.class, "y"); A a2 = (A) xstream.fromXML(xml); System.out.println(a2.x); // prints "field 1" System.out.println(a2.y); // prints "field 2" (instead of "null") // The field 'y' should be uninitialized if it's // being skipped on deserialization, correct? }

      public static class A

      { public String x; public String y; }

      }

        Issue Links

          Activity

          Hide
          Kees de Kooter added a comment - - edited

          I suppose this is also a duplicate of http://jira.codehaus.org/browse/XSTR-579

          Show
          Kees de Kooter added a comment - - edited I suppose this is also a duplicate of http://jira.codehaus.org/browse/XSTR-579
          Hide
          Jörg Schaible added a comment -

          It's related, but not a duplicate, since different converters are used.

          Show
          Jörg Schaible added a comment - It's related, but not a duplicate, since different converters are used.
          Hide
          Jörg Schaible added a comment -

          Supported on HEAD.

          Show
          Jörg Schaible added a comment - Supported on HEAD.

            People

            • Assignee:
              Jörg Schaible
              Reporter:
              Derek Trumbo
            • Votes:
              1 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: