ConverterLookup

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

ConverterLookup

Jörg Schaible-2

----------  Forwarded Mail  ----------

Subject: ConverterLookup
Date: 24th December 2013, 13:02:09
From: Alvaro <[hidden email]>
To: [hidden email]

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


Reply | Threaded
Open this post in threaded view
|

Re: ConverterLookup

Jörg Schaible-2
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 <[hidden email]>
> To: [hidden email]
>
> 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 | Threaded
Open this post in threaded view
|

Re: ConverterLookup

Jörg Schaible-2

Or as alternative, set the ConverterRegistry to null. Then you can stay with
your current implementation of the ConverterLookup.

Jörg Schaible wrote:

> 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 <[hidden email]>
>> To: [hidden email]
>>
>> 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



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

    http://xircles.codehaus.org/manage_email


Reply | Threaded
Open this post in threaded view
|

Re: ConverterLookup

Jörg Schaible-2
Jörg Schaible wrote:

>
> Or as alternative, set the ConverterRegistry to null. Then you can stay
> with your current implementation of the ConverterLookup.

Sorry, this information was wrong. Does not work in the current version
either ... :-/

>
> Jörg Schaible wrote:
>
>> 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 <[hidden email]>
>>> To: [hidden email]
>>>
>>> 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
>
>
>
> ---------------------------------------------------------------------
> 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