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 >> >> >>
