Hi Tobias,

Tobias Gierke wrote:

[snip]
 
> Thanks for your quick response ! We changed too many things
> unfortunately :/ We upgraded from XStream 1.4.3 to 1.4.8 because of the
> JDK8 fixes and at the same time also did a lot of changes to our
> application.
> 
> I just managed to "fix" the issue by changing the priorities and set of
> converters I registered like so:
> 
> ========== 1.4.3 =========
> 
>          final XStream xstream = new XStream( new StaxDriver() ) {
>              @Override
>              protected MapperWrapper wrapMapper(MapperWrapper next) {
>                  return new WicketProxyMapper( new CGLIBMapper( new
> HibernateMapper(next) ) );
>              }
>          };
> 
>           xstream.registerConverter( new WicketProxyConverter() ,
> XStream.PRIORITY_VERY_HIGH );
>           xstream.registerConverter( new EnumConverter() ,
> XStream.PRIORITY_VERY_HIGH );
>          xstream.registerConverter(new
> HibernatePersistentCollectionConverter(xstream.getMapper()) ,
> XStream.PRIORITY_VERY_HIGH );
>          xstream.registerConverter(new
> HibernatePersistentMapConverter(xstream.getMapper()) ,
> XStream.PRIORITY_VERY_HIGH );
>          xstream.registerConverter(new
> HibernatePersistentSortedMapConverter(xstream.getMapper()) ,
> XStream.PRIORITY_VERY_HIGH );
>          xstream.registerConverter(new
> HibernatePersistentSortedSetConverter(xstream.getMapper()) ,
> XStream.PRIORITY_VERY_HIGH );
>          xstream.registerConverter(new HibernateProxyConverter() ,
> XStream.PRIORITY_VERY_HIGH );
>          xstream.registerConverter(new
> CGLIBEnhancedConverter(xstream.getMapper(),
> xstream.getReflectionProvider() , getClass().getClassLoader() ) );
>          xstream.registerConverter( new
> SerializableConverter(xstream.getMapper(),
> xstream.getReflectionProvider() , getClass().getClassLoader() ) );
> 
> 
> ========== 1.4.8 =========
> 
>          final XStream xstream = new XStream( new StaxDriver() ) {
>              @Override
>              protected MapperWrapper wrapMapper(MapperWrapper next) {
>                  return new WicketProxyMapper( new CGLIBMapper( new
> HibernateMapper(next) ) );
>              }
>          };
> 
>          xstream.registerConverter( new WicketProxyConverter() ,
> XStream.PRIORITY_VERY_HIGH );
>          xstream.registerConverter(new
> HibernatePersistentCollectionConverter(xstream.getMapper()) );
>          xstream.registerConverter(new
> HibernatePersistentMapConverter(xstream.getMapper()) );
>          xstream.registerConverter(new
> HibernatePersistentSortedMapConverter(xstream.getMapper()) );
>          xstream.registerConverter(new
> HibernatePersistentSortedSetConverter(xstream.getMapper()) );
>          xstream.registerConverter(new HibernateProxyConverter() );
>          xstream.registerConverter(new
> CGLIBEnhancedConverter(xstream.getMapper(),
> xstream.getReflectionProvider() , getClass().getClassLoader() ) );
> 
> It *seems* like the issue was caused by an interesting interaction
> between the converters but I admit I know far too much about XStreams
> inner workings to make sense of this.


The most problematic action was/is the registration of the 
SerializationConverter with normal priority. That will prefer it over any 
other converter with same priority (see default priority in  
http://xstream.codehaus.org/converters.html) i.e. any Serializable with a 
readObject/writeObject method will now be handled by the generic 
SerializationConverter instead of the more specialized one (e.g. the 
CollectionConverter for a HashSet).

Try yourself:

 HashSet<String> hs = new HashSet<>();
 hs.add("test");

 XStream xstream = new XStream();
 xstream.registerConverter(
   new SerializableConverter(xstream.getMapper(),
   xstream.getReflectionProvider(), xstream.getClassLoaderReference()));
 System.out.Println(xstream.toXML(hs));
 System.out.Println(new XStream().toXML(hs)); // vanilla instance

That should make a difference.

Cheers,
Jörg


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

    http://xircles.codehaus.org/manage_email


Reply via email to