That's great, David!

I've just added a 'Converter' component to JIRA. Hope that works :)

Cheers,

David

On 15 August 2016 at 13:20, David Leangen <[email protected]> wrote:

>
> Hey David B.,
>
> I updated the code. How should I submit the patch? I did not see a JIRA
> component for this.
>
>
> Cheers,
> =David
>
>
>
>
> > On Aug 13, 2016, at 4:19 PM, David Leangen <[email protected]> wrote:
> >
> >
> > Thanks, David B! I take it that my assumption is correct, then.
> >
> > Will look into this as soon as I can.
> >
> >
> > Cheers,
> > =David
> >
> >
> >> On Aug 12, 2016, at 6:09 PM, David Bosschaert <
> [email protected]> wrote:
> >>
> >> Hi David,
> >>
> >> The rules are applied in AdapterImpl.ConvertingWrapper.to() where they
> are
> >> looked up in a map of class rules.
> >>
> >> If you find that the current implementation does not support the case
> you
> >> have above, it would be great if you could come up with a patch :)
> >>
> >> Cheers,
> >>
> >> David
> >>
> >> On 12 August 2016 at 04:11, David Leangen <[email protected]> wrote:
> >>
> >>>
> >>> Hi!
> >>>
> >>> Am I doing something wrong, or have I stumbled across something that
> has
> >>> not yet been implemented?
> >>>
> >>> My understanding is that I should be able to register a rule for an
> >>> embedded object. Example:
> >>>
> >>>   public static class MyObject {
> >>>       enum MyEnum { ONE, TWO, THREE };
> >>>
> >>>       public MyObject(){}
> >>>
> >>>       public MyEnum getValue() {
> >>>           return MyEnum.ONE;
> >>>       }
> >>>   }
> >>>
> >>>   public static class MyDTO extends DTO {
> >>>       public String value;
> >>>   }
> >>>
> >>>       MyObject o = new MyObject();
> >>>       Adapter ad = converter.getAdapter().rule( String.class,
> >>> MyObject.MyEnum.class, v -> MyObject.MyEnum.valueOf( v ), v -> v.name()
> );
> >>>       MyDTO my = ad.convert( o ).to( MyDTO.class );
> >>>
> >>>
> >>> However, this throws an Exception:
> >>>
> >>> org.osgi.service.converter.ConversionException: Cannot create DTO
> class
> >>> MyDTO
> >>>       at org.apache.felix.converter.impl.ConvertingImpl.
> >>> convertToDTO(ConvertingImpl.java:240)
> >>>       at org.apache.felix.converter.impl.ConvertingImpl.to(
> >>> ConvertingImpl.java:136)
> >>>       at org.apache.felix.converter.impl.AdapterImpl$
> >>> ConvertingWrapper.to(AdapterImpl.java:145)
> >>>       at org.apache.felix.converter.impl.AdapterImpl$
> >>> ConvertingWrapper.to(AdapterImpl.java:145)
> >>>       at org.apache.felix.converter.impl.AdapterImpl$
> >>> ConvertingWrapper.to(AdapterImpl.java:119)
> >>>       ... plenty more
> >>> Caused by: java.lang.IllegalArgumentException: Can not set
> >>> java.lang.String field MyDTO.value to MyObject$MyEnum
> >>>       at sun.reflect.UnsafeFieldAccessorImpl.
> >>> throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
> >>>       at sun.reflect.UnsafeFieldAccessorImpl.
> >>> throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
> >>>       at sun.reflect.UnsafeObjectFieldAccessorImpl.set(
> >>> UnsafeObjectFieldAccessorImpl.java:81)
> >>>       at java.lang.reflect.Field.set(Field.java:764)
> >>>       at org.apache.felix.converter.impl.ConvertingImpl.
> >>> convertToDTO(ConvertingImpl.java:233)
> >>>       ... 39 more
> >>>
> >>> Looks like the rule is not getting applied. Indeed, when I step through
> >>> the code, I cannot see any place where the rule is taken into account.
> >>>
> >>>
> >>> Cheers,
> >>> =David
> >>>
> >>>
> >>>
> >
>
>

Reply via email to