Hey Jörg,

thanks for the quick answer. I wrote a unit test and it worked for me as
well. Now, I digged into it and found the reason for this strange
behavior. I had another class that was used prior to the array container
for primitives annotated with @XStreamAlias("short").

So, I assume that this changed the way, how short primitives were
handled in general. I changed it to @XStreamAlias("shortprimitive") and
it worked.

Thanks again,
Dirk

On Wed, 2013-10-23 at 20:05 +0200, Jörg Schaible wrote:
> Hi Dirk,
> 
> Dirk Schnelle-Walka wrote:
> 
> > Hey there,
> > 
> > currently, I am evaluating XStream and ran into some problems with it. I
> > serialized the following data container:
> > 
> > package data;
> > 
> > @XStreamAlias("shortarray")
> > public class ShortArrayContainer {
> > @XStreamAsAttribute
> > public short[] values;
> > }
> > 
> > This serializes into something like (using stream.toXML(container,
> > out)):
> > 
> > <shortarray>
> >   <values>
> >     <short>16383</short>
> >     <short>16384</short>
> >     <short>16385</short>
> >     <short>16386</short>
> >     <short>16387</short>
> >   </values>
> > </shortarray>
> > 
> > stream is initialized with
> > stream = new XStream(new DomDriver("UTF-8"));
> > stream.autodetectAnnotations(true);
> > 
> > Unfortunately, I get a ConversionException, when I try to deserialize
> > with stream.fromXML(in):
> > 
> > com.thoughtworks.xstream.converters.ConversionException: array element
> > type mismatch : array element type mismatch
> > ---- Debugging information ----
> > message             : array element type mismatch
> > cause-exception     : java.lang.IllegalArgumentException
> > cause-message       : array element type mismatch
> > class               : [Ljava.lang.Short;
> > required-type       : [Ljava.lang.Short;
> > converter-type      :
> > com.thoughtworks.xstream.converters.collections.ArrayConverter
> > path                : /shortobjectarray/values
> > class[1]            : data.ShortObjectArrayContainer
> > converter-type[1]   :
> > com.thoughtworks.xstream.converters.reflection.ReflectionConverter
> > version             : 1.4.5
> > -------------------------------
> > 
> > Interestingly, I observed no problems when I am doing this with byte or
> > boolean arrays.
> > 
> > I already tried playing around with Short vs short and List instead of
> > arrays without much success.
> 
> ================== %< =======================
>     @XStreamAlias("shortarray")
>     public static class ShortArrayContainer {
>         public short[] values;
> 
>         @Override
>         public int hashCode() {
>             return Arrays.hashCode(values);
>         }
> 
>         @Override
>         public boolean equals(Object obj) {
>             return Arrays.equals(values, ((ShortArrayContainer)obj).values);
>         }
>     }
> 
>     public void testShortArray() {
>         XStream xstream = new XStream();
>         xstream.processAnnotations(ShortArrayContainer.class);
>         ShortArrayContainer container = new ShortArrayContainer();
>         container.values = new short[]{ 42, 4711, 16383, 16384, 16385 };
>         String xml = "" 
>             + "<shortarray>\n" 
>             + "  <values>\n" 
>             + "    <short>42</short>\n" 
>             + "    <short>4711</short>\n" 
>             + "    <short>16383</short>\n" 
>             + "    <short>16384</short>\n" 
>             + "    <short>16385</short>\n" 
>             + "  </values>\n"
>             + "</shortarray>";
>         assertEquals(container, xstream.fromXML(xml));
>     }
> ================== %< =======================
> 
> Works for me. You will have to provide an actually failing unit test.
> 
> Two comments (both are also in the FAQ):
> 
> 1/ Auto-detection cannot work for the root object at deserialization:
> http://xstream.codehaus.org/annotations-tutorial.html#AutoDetect
> 
> 2/ @XStreamAsAttribute is simple ignored if the converter implementation is 
> not a SingleValueConverter, i.e. the object to convert (here a short array) 
> cannot be represented by the converter as a single string - a precondition 
> for an XML attribute.
> 
> Cheers,
> Jörg
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe from this list, please visit:
> 
>     http://xircles.codehaus.org/manage_email
> 
> 



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

    http://xircles.codehaus.org/manage_email


Reply via email to