diff --git a/implementation/src/main/java/io/smallrye/config/ConfigMappingLoader.java b/implementation/src/main/java/io/smallrye/config/ConfigMappingLoader.java index 7442797b8..57fc0043d 100644 --- a/implementation/src/main/java/io/smallrye/config/ConfigMappingLoader.java +++ b/implementation/src/main/java/io/smallrye/config/ConfigMappingLoader.java @@ -88,9 +88,10 @@ static Map configMappingProperties(final Class interfaceT static T configMappingObject(final Class interfaceType, final ConfigMappingContext configMappingContext) { try { - MethodHandle constructor = LOOKUP.findConstructor(CACHE.get(interfaceType).getImplementationClass(), + Class implClass = CACHE.get(interfaceType).getImplementationClass(); + MethodHandle constructor = LOOKUP.findConstructor(implClass, methodType(void.class, ConfigMappingContext.class)); - return interfaceType.cast(constructor.invoke(configMappingContext)); + return (T) constructor.asType(constructor.type().changeReturnType(Object.class)).invokeExact(configMappingContext); } catch (NoSuchMethodException e) { throw new NoSuchMethodError(e.getMessage()); } catch (IllegalAccessException e) {