private Injector createValidationInjector(final Path configFile) {

        try {
            // We need to read the AppConfig in the same way that dropwiz will so we can get the
            // possibly substituted values for stroom.(home|temp) for use with PathCreator
            LOGGER.info("Parsing config file to establish home and temp");
            final AppConfig appConfig = StroomYamlUtil.readAppConfig(configFile);
            LOGGER.debug(() -> "pathConfig " + appConfig.getPathConfig());

            // Allow for someone having pathConfig set to null in the yaml, e.g. just
            //   pathConfig:
            final PathConfig effectivePathConfig = Objects.requireNonNullElse(
                    appConfig.getPathConfig(),
                    new StroomPathConfig());

            return Guice.createInjector(
                    new ValidationModule(),
                    new DirProvidersModule(),
                    new AbstractModule() {
                        @Override
                        protected void configure() {
                            bind(PathConfig.class).toInstance(effectivePathConfig);
                        }
                    });

        } catch (IOException e) {
            throw new RuntimeException("Error parsing config file " + configFile.toAbsolutePath().normalize());
        }
    }
Creates a separate guice injector just for doing javax validation on the config
stroom-app/src/main/java/stroom/app/App.java