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