@Override
    @SuppressWarnings("nls")
    protected <T> T doInstantiate(Class<T> type, Map<String, String> mapConfig) {
        try {
            Constructor<T> constructor = type.getConstructor(Vertx.class, VertxEngineConfig.class, Map.class);
            return constructor.newInstance(vertx, vxConfig, mapConfig);
        } catch (NoSuchMethodException e) { // If doesn't have constructor, try other method.
        } catch (Exception e ) {
            throw new RuntimeException(e);
        }
        try {
            Constructor<T> constructor = type.getConstructor(Vertx.class, IEngineConfig.class, Map.class);
            return constructor.newInstance(vertx, vxConfig, mapConfig);
        } catch (NoSuchMethodException e) { // If doesn't have constructor, try other method.
        } catch (Exception e ) {
            throw new RuntimeException(e);
        }
        try {
            Constructor<T> constructor = type.getConstructor(Map.class);
            return constructor.newInstance(mapConfig);
        } catch (Exception e) {
        }
        try {
            return type.newInstance();
        } catch (InstantiationException | IllegalAccessException e) {
            throw new RuntimeException(String.format(
                    "Could not instantiate %s. Verify class has valid constructor parameters: %s", type,
                    e.getMessage()), e);
        }
    }
A configuration driven engine specifically for Vert.x

@see ConfigDrivenEngineFactory

@author Marc Savy {@literal <msavy@redhat.com>}
gateway/platforms/vertx3/vertx3/src/main/java/io/apiman/gateway/platforms/vertx3/engine/VertxConfigDrivenEngineFactory.java