Hi Cristiano, I fixed FELIX-6006. It would be great if you could validate it.
Best regards, David On Thu, 20 Dec 2018 at 13:56, David Bosschaert <[email protected]> wrote: > I have created https://issues.apache.org/jira/browse/FELIX-6006 for it. > > Best regards, > > David > > On Thu, 20 Dec 2018 at 13:10, David Bosschaert <[email protected]> > wrote: > >> Hi Cristiano, >> >> Yes, you have identified a bug - please open an issue for it. I'll work >> on a fix. >> >> Best regards, >> >> David >> >> On Thu, 20 Dec 2018 at 12:55, Cristiano <[email protected]> wrote: >> >>> Hi David, many thanks for the insight. It is a very interesting >>> approach, ideed. >>> >>> I just tried with errorHandler() now. I've took the tests from Felix >>> Converter and use my own converter instance and it worked for DTO, >>> javabeans and other common cases. >>> >>> But unfortunately, the current implementation of Felix Converter is not >>> calling this method when dealing with the Interface's created Proxy. >>> >>> The code bellow was taken from the invoke(Object proxy, Method method, >>> Object[] args) method: >>> >>> > // If no value is available take the default if >>> specified >>> > if (val == null) { >>> > if (cls.isAnnotation()) { >>> > val = method.getDefaultValue(); >>> > } >>> > >>> > if (val == null) { >>> > if (args != null && args.length == 1) { >>> > val = args[0]; >>> > } else { >>> > throw new ConversionException( >>> > "No value for property: " + >>> propName); >>> > } >>> > } >>> > } >>> >>> As you can see, the ConversionException is being thrown and it is not >>> captured by the CustomConverterImpl class as it does in other situations. >>> >>> >>> Should I open an issue for that ? >>> >>> best regards >>> >>> >>> On 20/12/2018 08:35, David Bosschaert wrote: >>> > Hi Cristiano, >>> > >>> > You should be able to do this with a custom errorHandler() [1]. >>> > For that you'd create a custom converter and supply it with an >>> errorHandler >>> > function. See also [2] and [3]. >>> > >>> > Hope this helps, >>> > >>> > David >>> > >>> > [1] >>> > >>> https://osgi.org/javadoc/osgi.cmpn/7.0.0/org/osgi/util/converter/ConverterBuilder.html#errorHandler-org.osgi.util.converter.ConverterFunction- >>> > [2] >>> > >>> https://osgi.org/specification/osgi.cmpn/7.0.0/util.converter.html#util.converter-customizing.converters >>> > [3] >>> > >>> https://osgi.org/specification/osgi.cmpn/7.0.0/util.converter.html#d0e147674 >>> > >>> > On Wed, 19 Dec 2018 at 20:51, Cristiano <[email protected]> wrote: >>> > >>> >> Hello all, >>> >> >>> >> I'm using Converter to convert a JsonObject (a Map) to an Interface. >>> >> >>> >> I've created this test for a scenario where any bundle is informed: >>> >> >>> >>> IProvisioningConfiguration config = CONVERTER.convert(json) >>> >>> .to(IProvisioningConfiguration.class); >>> >>> >>> >>> assertThat(config).isNotNull(); >>> >>> assertThat(config.delay()).isEqualTo(5); >>> >>> assertThat(config.bundles()).isEmpty(); >>> >> My problem is that I'm receiving a ConversionException when trying to >>> >> access a method from the interface which value was not supplied by the >>> >> source object map. >>> >> >>> >>> org.osgi.util.converter.ConversionException: No value for property: >>> >>> bundles >>> >>> at >>> >>> >>> org.osgi.util.converter.ConvertingImpl$4.invoke(ConvertingImpl.java:802) >>> >>> at com.sun.proxy.$Proxy8.bundles(Unknown Source) >>> >>> at >>> >>> >>> >> >>> br.com.c8tech.vxosgi.config.JsonConvertionUnitTest.testProvisioningConfigurationJsonConvertionToInterface(JsonConvertionUnitTest.java:102) >>> >> >>> >> Is there any way to work with optional values in the target interface >>> >> without get this exception ? >>> >> >>> >> >>> >> many thanks, >>> >> >>> >> Cristiano >>> >> >>> >> >>> >>
