Hi Tobias, Tobias Gierke wrote:
> Hi Jörg, > > I created a JIRA issue: http://jira.codehaus.org/browse/XSTR-767 thanks. Can you also provide the generated XML for the relevant structure? > Thanks for looking into this! Cheers, Jörg > > Cheers, > Tobias > > >> Hi Tobias, >> >> it seems you're the first one who tries to serialize something like that. >> Please open a JIRA issue and I try to look into it in the next two weeks. >> >> Cheers, >> Jörg >> >> Tobias Gierke wrote: >> >>> Hi, >>> >>> It seems we're not able to deserialize Lambda expressions with XStream >>> 1.4.7 >>> >>> The code in question looks roughly like this: >>> >>> @FunctionalInterface >>> public interface Visible extends Serializable { >>> public boolean isVisible(); >>> } >>> >>> public interface IMenuItem extends Serializable { >>> // ... stuff omitted ... >>> } >>> >>> public abstract class AbstractMenuItem implements IMenuItem { >>> private final Visible visibilityFunction; >>> // ... stuff omitted ... >>> } >>> >>> The method that is invoked with lambda expressions (that later get >>> stored in the 'visibilityFunction' field of an AbstractMenuItem subclass >>> instance) looks like this: >>> >>> public <T extends Page> void addEntry(String resourceLabel , Class<T> >>> pageClazz,Visible visibilityFunction); >>> >>> Since the Visible interface extends Serializable , the compiler >>> generates code for a serializable Lambda (and in fact it does, I checked >>> the generated .class file with javap). >>> >>> The code used to setup XStream looks like this: >>> >>> private XStream createXStream() >>> { >>> final XStream xstream = new XStream( new StaxDriver() ) { >>> @Override >>> protected MapperWrapper wrapMapper(MapperWrapper next) { >>> return new WicketProxyMapper( new CGLIBMapper( new >>> HibernateMapper(next) ) ); // >>> } >>> }; >>> >>> // override the built-in DynamicProxyConverter that chokes on >>> Apache Wicket proxies >>> xstream.registerConverter( new WicketProxyConverter() , >>> XStream.PRIORITY_VERY_HIGH ); >>> >>> // register Hibernate-specific converters >>> xstream.registerConverter(new HibernateProxyConverter()); >>> xstream.registerConverter(new >>> HibernatePersistentCollectionConverter(xstream.getMapper())); >>> xstream.registerConverter(new >>> HibernatePersistentMapConverter(xstream.getMapper())); >>> xstream.registerConverter(new >>> HibernatePersistentSortedMapConverter(xstream.getMapper())); >>> xstream.registerConverter(new >>> HibernatePersistentSortedSetConverter(xstream.getMapper())); >>> >>> // register CGLLib converters >>> xstream.registerConverter(new >>> CGLIBEnhancedConverter(xstream.getMapper(), >>> xstream.getReflectionProvider() , getClass().getClassLoader() ) ); >>> >>> return xstream; >>> } >>> >>> >>> Before I start diving into the world of invokedynamic and method handles >>> , did anybody else encounter this issue and knows how to solve it ? >>> >>> Cheers, >>> Tobias >>> >>> >>> com.thoughtworks.xstream.converters.ConversionException: >>> >> com.vodecc.voipmng.boundary.wicket.general.PageWithMenu$$Lambda$124/1803727536 >>> : >>> >> com.vodecc.voipmng.boundary.wicket.general.PageWithMenu$$Lambda$124/1803727536 >>> ---- Debugging information ---- >>> message : >>> >> com.vodecc.voipmng.boundary.wicket.general.PageWithMenu$$Lambda$124/1803727536 >>> cause-exception : >>> com.thoughtworks.xstream.mapper.CannotResolveClassException >>> cause-message : >>> >> com.vodecc.voipmng.boundary.wicket.general.PageWithMenu$$Lambda$124/1803727536 >>> class : >>> com.vodecc.voipmng.boundary.wicket.general.PageWithHeaderAndFooter$11 >>> required-type : >>> com.vodecc.voipmng.boundary.wicket.general.PageWithHeaderAndFooter$11 >>> converter-type : >>> com.thoughtworks.xstream.converters.reflection.ReflectionConverter >>> path : >>> >> /com.vodecc.voipmng.boundary.wicket.trunkmonitor.TrunkMonitorPage/children/com.vodecc.voipmng.boundary.wicket.general.PageWithMenu$1/children/com.vodecc.voipmng.boundary.wicket.general.PageWithMenu$1$1[2]/children/com.vodecc.voipmng.boundary.wicket.general.PageWithMenu$SubMenuList/children/children/org.apache.wicket.markup.html.list.ListItem/children/children/com.vodecc.voipmng.boundary.wicket.general.PageWithMenu$NestedListEntry$1/children/org.apache.wicket.markup.html.list.ListItem[3]/children/children/val$visibilityFunction >>> line number : 1 >>> class[1] : >>> com.vodecc.voipmng.boundary.wicket.general.PageWithMenu$SimpleListEntry >>> class[2] : org.apache.wicket.markup.html.list.ListItem >>> class[3] : [Ljava.lang.Object; >>> converter-type[1] : >>> com.thoughtworks.xstream.converters.collections.ArrayConverter >>> class[4] : >>> com.vodecc.voipmng.boundary.wicket.general.PageWithMenu$NestedListEntry$1 >>> class[5] : >>> com.vodecc.voipmng.boundary.wicket.general.PageWithMenu$NestedListEntry >>> class[6] : >>> com.vodecc.voipmng.boundary.wicket.general.PageWithMenu$SubMenuList$1 >>> class[7] : >>> com.vodecc.voipmng.boundary.wicket.general.PageWithMenu$SubMenuList >>> class[8] : >>> com.vodecc.voipmng.boundary.wicket.general.PageWithMenu$1$1 >>> class[9] : >>> com.vodecc.voipmng.boundary.wicket.general.PageWithMenu$1 >>> class[10] : >>> com.vodecc.voipmng.boundary.wicket.trunkmonitor.TrunkMonitorPage >>> version : not available >>> ------------------------------- >>> >>> >>> --------------------------------------------------------------------- >>> 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 >> >> > > --------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email