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