Hi Alvaro,

there's unfortunately a bug in XStream, that requires the ConverterLookup 
and ConverterRegistry to be the same instance currently. You will therefore 
have to implement also ConverterRegistry and may simply ignore anything 
provided with the registerConverter method.

Sorry for the inconvenience, it will be fixed with next version.

- Jörg

Alvaro wrote:

> 
> ----------  Forwarded Mail  ----------
> 
> Subject: ConverterLookup
> Date: 24th December 2013, 13:02:09
> From: Alvaro <[email protected]>
> To: [email protected]
> 
> Hi Joerg,
> 
> Im trying to write to the xstream dev list but get bounced by the mailing
> daemon even though Im subscribed. Maybe you can help me with this problem
> since you are one of the developers of the ConverterLookup class.
> 
> Im trying to register the folloging ConverterLookup:
> 
> import com.thoughtworks.xstream.converters.ConversionException;
> import com.thoughtworks.xstream.converters.Converter;
> import com.thoughtworks.xstream.converters.ConverterLookup;
> import com.thoughtworks.xstream.converters.basic.NullConverter;
> 
> public class MyConverterLookup implements ConverterLookup {
> 
>     private final Converter nullConverter = new NullConverter();
> 
>     public Converter lookupConverterForType(Class type) throws
> ConversionException {
>         if (type == null) {
>             return nullConverter;
>         }
>         if (type.equals(Contact.class)) {
>             return new ContactConverter();
>         } else {
>             throw new ConversionException("No converter specified for " +
> type);
>         }
> 
>     }
> }
> 
> 
> But Im getting the following exception:
> 
> 
> Exception in thread "main"
> org.springframework.oxm.UncategorizedMappingException: Unknown XStream
> exception; nested exception is
> com.thoughtworks.xstream.InitializationException: Could not instantiate
> mapper : com.thoughtworks.xstream.mapper.AnnotationMapper : argument type
> mismatch
>     at
> 
org.springframework.oxm.xstream.XStreamMarshaller.convertXStreamException(XStreamMarshaller.java:807)
>     at
> 
org.springframework.oxm.xstream.XStreamMarshaller.doMarshal(XStreamMarshaller.java:689)
>     at
> 
org.springframework.oxm.xstream.XStreamMarshaller.marshalWriter(XStreamMarshaller.java:676)
>     at
> 
org.springframework.oxm.xstream.XStreamMarshaller.marshalWriter(XStreamMarshaller.java:666)
>     at
> 
org.springframework.oxm.support.AbstractMarshaller.marshalStreamResult(AbstractMarshaller.java:272)
>     at
> 
org.springframework.oxm.support.AbstractMarshaller.marshal(AbstractMarshaller.java:103)
>     at org.pwntester.xstreamoxm.Main.main(Main.java:23)
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>     at
> 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>     at
> 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>     at java.lang.reflect.Method.invoke(Method.java:601)
>     at
>     com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
> Caused by: com.thoughtworks.xstream.InitializationException: Could not
> instantiate mapper : com.thoughtworks.xstream.mapper.AnnotationMapper :
> argument type mismatch
>     at
> com.thoughtworks.xstream.XStream.buildMapperDynamically(XStream.java:604)
>     at com.thoughtworks.xstream.XStream.buildMapper(XStream.java:586)
>     at com.thoughtworks.xstream.XStream.<init>(XStream.java:552)
>     at com.thoughtworks.xstream.XStream.<init>(XStream.java:514)
>     at
> 
org.springframework.oxm.xstream.XStreamMarshaller$1.<init>(XStreamMarshaller.java:388)
>     at
> 
org.springframework.oxm.xstream.XStreamMarshaller.constructXStream(XStreamMarshaller.java:387)
>     at
> 
org.springframework.oxm.xstream.XStreamMarshaller.buildXStream(XStreamMarshaller.java:372)
>     at
> 
org.springframework.oxm.xstream.XStreamMarshaller.getXStream(XStreamMarshaller.java:584)
>     at
> 
org.springframework.oxm.xstream.XStreamMarshaller.doMarshal(XStreamMarshaller.java:686)
>     ... 10 more
> Caused by: java.lang.IllegalArgumentException: argument type mismatch
>     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
>     Method) at
> 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
>     at
> 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
>     at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
>     at
> com.thoughtworks.xstream.XStream.buildMapperDynamically(XStream.java:602)
>     ... 18 more
> 
> 
> Im using the following code to set up the converterlookup
> 
> XStreamMarshaller xstream = new XStreamMarshaller();
> xstream.setConverterLookup(new MyConverterLookup());
> 
> 
> Any idea why is failing? Im trying to use the lookup class as an elegant
> solution for the remote code execution problem when using the reflection
> converters. So I just want to use the Contact converter or fail.
> 
> I already implemented the other solution you proposed:
> - register a ContactConverter
> - register a CatchAllConverter with low priority
> 
> That approach works but I found the lookup class and it seems a more
> elegant solution
> 
> Thanks,
> A
> -------------------------------------------------------------
> 
> ---------------------------------------------------------------------
> 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