[ 
https://issues.apache.org/jira/browse/FELIX-5666?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16110361#comment-16110361
 ] 

David Leangen commented on FELIX-5666:
--------------------------------------

I found a "temporary" solution: creating a rule.

{code}
    static class MapTargetRule implements TargetRule {

        @Override
        public ConverterFunction getFunction() {
            return new MapConverterFunction();
        }

        @Override
        public Type getTargetType() {
            return Map.class;
        }        
    }

    static class MapConverterFunction implements ConverterFunction {

        @Override
        public Object apply( Object obj, Type targetType ) throws Exception {
            return Converters
                    .standardConverter()
                    .convert(obj)
                    .sourceAsDTO()
                    .to(targetType);
        }
    }
{code}

The reason I write "temporary" is because this rule seems too generic and the 
usage, I am guessing, so common, that it is a bit heavy-handed to be required 
to declare this type of rule each time.

But in any case, the serialization of a DTO-type object now works when called 
like this:

{code}
        String s = serializer
            .serialize( obj )
            .with(Converters.newConverterBuilder().rule(new 
MapTargetRule()).build())
            .toString();
{code}

What do you think we should do?

I just committed another test case so you can see. It is in 
JsonBackingObjectSerializationTest.

> Serializer goes into infinite loop
> ----------------------------------
>
>                 Key: FELIX-5666
>                 URL: https://issues.apache.org/jira/browse/FELIX-5666
>             Project: Felix
>          Issue Type: Bug
>          Components: Converter
>            Reporter: David Leangen
>
> I'm only guessing as to what the problem is, following some stepping through 
> the code. I could not find any similar existing test cases, but if the 
> following does not immediately click for [~bosschaert], I will try to add one.
> It appears that, when serializing an object to a "DTO-Type" object to a Map, 
> some kind of backing object is created.
> If the backing object contains a field that instantiates the same DTO, then 
> the loop gets created.
> Example:
> {code}
> public class MyDtoType {
>   public String id;
>   public MyDtoType( String anID ) {
>     id = anID;
>   }
>   public static MyDtoType error() {
>     return new MyDtoType( "ERROR" );
>   }
> }
> {code}
> It looks like the serializer keeps calling the error() method infinitely, but 
> I am not able to easily pinpoint where this happens.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to