Using XStream with class hierarchy in Java 8 gives incorrect results

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Using XStream with class hierarchy in Java 8 gives incorrect results

Lesley Perkins

Hello.  I’m running into an issue with XStream starting with Java 8.  This works correctly in Java 7.  Take the following example:

 

import java.io.*;

 

import com.thoughtworks.xstream.XStream;

import com.thoughtworks.xstream.io.xml.DomDriver;

 

public class XStreamJre8

{

  

   public static void main(String[] args)

   {

      Child child = new Child(2, 3);

 

      try

      {

         String fileName = new StringBuilder()

                  .append("child_")

                  .append(System.getProperty("java.version", "unknown"))

                  .append(".xml")

                  .toString();

         FileOutputStream out = new FileOutputStream(new File(fileName));

         XStream xStream = new XStream(new DomDriver());

         xStream.toXML(child, out);

         out.close();

      }

      catch (Exception e)

      {

         e.printStackTrace();

      }

   }

  

   static class Parent

   {

      private int parentVar;

 

      public Parent ()

      {

         this(-1);

      }

 

      public Parent(int parentVar)

      {

         this.parentVar = parentVar;

      }

 

      public int getParentVar()

      {

         return parentVar;

      }

   } // end class Parent

 

   static class Child extends Parent

   {

      private int childVar;

 

      public Child()

      {

         this(-1, -1);

      }

 

      public Child(int parentVar, int childVar)

      {

         super(parentVar);

         this.childVar = childVar;

      }

 

      public int getChildVar()

      {

         return childVar;

      }

   } // end class Child

 

}

 

When I execute this with Java 7u51, my output is:

 

<XStreamJre8_-Child>

  <parentVar>2</parentVar>

  <childVar>3</childVar>

</XStreamJre8_-Child>

 

However, when I execute with Java 8u or 8u11, my output is:

 

<XStreamJre8_-Child>

  <childVar>3</childVar>

</XStreamJre8_-Child>

 

You can see that the parent class is being ignored.  I’m not sure what changed that would cause this, but it’s definitely an issue for me.  Any help/solutions would be appreciated.

 

--Andy



This message may contain confidential information and is intended for specific recipients unless explicitly noted otherwise. If you have reason to believe you are not an intended recipient of this message, please delete it and notify the sender. This message may not represent the opinion of Intercontinental Exchange, Inc. (ICE), its subsidiaries or affiliates, and does not constitute a contract or guarantee. Unencrypted electronic mail is not secure and the recipient of this message is expected to provide safeguards from viruses and pursue alternate means of communication where privacy or a binding message is desired.
Reply | Threaded
Open this post in threaded view
|

Re: Using XStream with class hierarchy in Java 8 gives incorrect results

Jörg Schaible-2
Hi Lesley,

Lesley Perkins wrote:

> Hello.  I'm running into an issue with XStream starting with Java 8.  This
> works correctly in Java 7.  Take the following example:
>
> import java.io.*;
>
> import com.thoughtworks.xstream.XStream;
> import com.thoughtworks.xstream.io.xml.DomDriver;
>
> public class XStreamJre8
> {
>
>    public static void main(String[] args)
>    {
>       Child child = new Child(2, 3);
>
>       try
>       {
>          String fileName = new StringBuilder()
>                   .append("child_")
>                   .append(System.getProperty("java.version", "unknown"))
>                   .append(".xml")
>                   .toString();
>          FileOutputStream out = new FileOutputStream(new File(fileName));
>          XStream xStream = new XStream(new DomDriver());
>          xStream.toXML(child, out);
>          out.close();
>       }
>       catch (Exception e)
>       {
>          e.printStackTrace();
>       }
>    }
>
>    static class Parent
>    {
>       private int parentVar;
>
>       public Parent ()
>       {
>          this(-1);
>       }
>
>       public Parent(int parentVar)
>       {
>          this.parentVar = parentVar;
>       }
>
>       public int getParentVar()
>       {
>          return parentVar;
>       }
>    } // end class Parent
>
>    static class Child extends Parent
>    {
>       private int childVar;
>
>       public Child()
>       {
>          this(-1, -1);
>       }
>
>       public Child(int parentVar, int childVar)
>       {
>          super(parentVar);
>          this.childVar = childVar;
>       }
>
>       public int getChildVar()
>       {
>          return childVar;
>       }
>    } // end class Child
>
> }
>
> When I execute this with Java 7u51, my output is:
>
> <XStreamJre8_-Child>
>   <parentVar>2</parentVar>
>   <childVar>3</childVar>
> </XStreamJre8_-Child>
>
> However, when I execute with Java 8u or 8u11, my output is:
>
> <XStreamJre8_-Child>
>   <childVar>3</childVar>
> </XStreamJre8_-Child>
>
> You can see that the parent class is being ignored.  I'm not sure what
> changed that would cause this, but it's definitely an issue for me.  Any
> help/solutions would be appreciated.

A lot of unit test would break in XStream if there is a general problem of
this sort with Java 8, but the test suite runs perfectly with current Java 8
versions (https://bamboo-ci.codehaus.org/browse/XSTREAM).

So, which version of XStream are you're using?

Cheers,
Jörg


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply | Threaded
Open this post in threaded view
|

Re: Using XStream with class hierarchy in Java 8 gives incorrect results

Lesley Perkins
I *thought* I was using 1.4.7, but apparently was still on 1.4.4.  When I updated to 1.4.7 the problem went away.  Apologies!


-----Original Message-----
From: Jörg Schaible [mailto:[hidden email]]
Sent: Thursday, July 17, 2014 5:30 PM
To: [hidden email]
Subject: [xstream-user] Re: Using XStream with class hierarchy in Java 8 gives incorrect results

Hi Lesley,

Lesley Perkins wrote:

> Hello.  I'm running into an issue with XStream starting with Java 8.  This
> works correctly in Java 7.  Take the following example:
>
> import java.io.*;
>
> import com.thoughtworks.xstream.XStream;
> import com.thoughtworks.xstream.io.xml.DomDriver;
>
> public class XStreamJre8
> {
>
>    public static void main(String[] args)
>    {
>       Child child = new Child(2, 3);
>
>       try
>       {
>          String fileName = new StringBuilder()
>                   .append("child_")
>                   .append(System.getProperty("java.version", "unknown"))
>                   .append(".xml")
>                   .toString();
>          FileOutputStream out = new FileOutputStream(new File(fileName));
>          XStream xStream = new XStream(new DomDriver());
>          xStream.toXML(child, out);
>          out.close();
>       }
>       catch (Exception e)
>       {
>          e.printStackTrace();
>       }
>    }
>
>    static class Parent
>    {
>       private int parentVar;
>
>       public Parent ()
>       {
>          this(-1);
>       }
>
>       public Parent(int parentVar)
>       {
>          this.parentVar = parentVar;
>       }
>
>       public int getParentVar()
>       {
>          return parentVar;
>       }
>    } // end class Parent
>
>    static class Child extends Parent
>    {
>       private int childVar;
>
>       public Child()
>       {
>          this(-1, -1);
>       }
>
>       public Child(int parentVar, int childVar)
>       {
>          super(parentVar);
>          this.childVar = childVar;
>       }
>
>       public int getChildVar()
>       {
>          return childVar;
>       }
>    } // end class Child
>
> }
>
> When I execute this with Java 7u51, my output is:
>
> <XStreamJre8_-Child>
>   <parentVar>2</parentVar>
>   <childVar>3</childVar>
> </XStreamJre8_-Child>
>
> However, when I execute with Java 8u or 8u11, my output is:
>
> <XStreamJre8_-Child>
>   <childVar>3</childVar>
> </XStreamJre8_-Child>
>
> You can see that the parent class is being ignored.  I'm not sure what
> changed that would cause this, but it's definitely an issue for me.  Any
> help/solutions would be appreciated.

A lot of unit test would break in XStream if there is a general problem of
this sort with Java 8, but the test suite runs perfectly with current Java 8
versions (https://bamboo-ci.codehaus.org/browse/XSTREAM).

So, which version of XStream are you're using?

Cheers,
Jörg


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email



This message may contain confidential information and is intended for specific recipients unless explicitly noted otherwise. If you have reason to believe you are not an intended recipient of this message, please delete it and notify the sender. This message may not represent the opinion of Intercontinental Exchange, Inc. (ICE), its subsidiaries or affiliates, and does not constitute a contract or guarantee. Unencrypted electronic mail is not secure and the recipient of this message is expected to provide safeguards from viruses and pursue alternate means of communication where privacy or a binding message is desired.