From 4a6c699acaf09712256d61cf71fbc86466d2dd4e Mon Sep 17 00:00:00 2001 From: Eric Bottard Date: Mon, 11 Sep 2017 17:16:43 +0200 Subject: [PATCH] Inject the ValidatorFactory instead of Validator. This prevents the Spring Validator Factory from being injected (it does not support the 1.1 methods) --- .../main/java/org/springframework/shell/Shell.java | 7 ++++++- .../jcommander/JCommanderParameterResolver.java | 7 ++++++- .../shell/legacy/LegacyParameterResolver.java | 8 +++++++- .../shell/standard/commands/Help.java | 9 ++++++++- .../shell/standard/StandardParameterResolver.java | 12 +++++++----- 5 files changed, 34 insertions(+), 9 deletions(-) diff --git a/spring-shell-core/src/main/java/org/springframework/shell/Shell.java b/spring-shell-core/src/main/java/org/springframework/shell/Shell.java index d4b32c5f..cff76b12 100644 --- a/spring-shell-core/src/main/java/org/springframework/shell/Shell.java +++ b/spring-shell-core/src/main/java/org/springframework/shell/Shell.java @@ -30,6 +30,7 @@ import javax.annotation.PostConstruct; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; +import javax.validation.ValidatorFactory; import javax.validation.executable.ExecutableValidator; import org.springframework.beans.factory.annotation.Autowired; @@ -64,7 +65,6 @@ public class Shell implements CommandRegistry { @Autowired protected ApplicationContext applicationContext; - @Autowired(required = false) private Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); protected Map methodTargets = new HashMap<>(); @@ -81,6 +81,11 @@ public class Shell implements CommandRegistry { this.resultHandler = resultHandler; } + @Autowired(required = false) + public void setValidatorFactory(ValidatorFactory validatorFactory) { + this.validator = validatorFactory.getValidator(); + } + @Override public Map listCommands() { return methodTargets; diff --git a/spring-shell-jcommander-adapter/src/main/java/org/springframework/shell/jcommander/JCommanderParameterResolver.java b/spring-shell-jcommander-adapter/src/main/java/org/springframework/shell/jcommander/JCommanderParameterResolver.java index 916489c7..a03d3ff4 100644 --- a/spring-shell-jcommander-adapter/src/main/java/org/springframework/shell/jcommander/JCommanderParameterResolver.java +++ b/spring-shell-jcommander-adapter/src/main/java/org/springframework/shell/jcommander/JCommanderParameterResolver.java @@ -45,6 +45,7 @@ import com.beust.jcommander.ParametersDelegate; import javax.validation.Validation; import javax.validation.Validator; +import javax.validation.ValidatorFactory; import javax.validation.metadata.BeanDescriptor; import javax.validation.metadata.MethodDescriptor; import javax.validation.metadata.ParameterDescriptor; @@ -59,9 +60,13 @@ public class JCommanderParameterResolver implements ParameterResolver { private static final Collection> JCOMMANDER_ANNOTATIONS = Arrays.asList(Parameter.class, DynamicParameter.class, ParametersDelegate.class); - @Autowired(required = false) private Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); + @Autowired(required = false) + public void setValidatorFactory(ValidatorFactory validatorFactory) { + this.validator = validatorFactory.getValidator(); + } + @Override public boolean supports(MethodParameter parameter) { AtomicBoolean isSupported = new AtomicBoolean(false); diff --git a/spring-shell-shell1-adapter/src/main/java/org/springframework/shell/legacy/LegacyParameterResolver.java b/spring-shell-shell1-adapter/src/main/java/org/springframework/shell/legacy/LegacyParameterResolver.java index 88bf5314..e3a8fc15 100644 --- a/spring-shell-shell1-adapter/src/main/java/org/springframework/shell/legacy/LegacyParameterResolver.java +++ b/spring-shell-shell1-adapter/src/main/java/org/springframework/shell/legacy/LegacyParameterResolver.java @@ -39,6 +39,7 @@ import org.springframework.util.ReflectionUtils; import javax.validation.Validation; import javax.validation.Validator; +import javax.validation.ValidatorFactory; import javax.validation.metadata.MethodDescriptor; import javax.validation.metadata.ParameterDescriptor; @@ -63,9 +64,14 @@ public class LegacyParameterResolver implements ParameterResolver { @Autowired(required = false) private Collection> converters = new ArrayList<>(); - @Autowired(required = false) private Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); + @Autowired(required = false) + public void setValidatorFactory(ValidatorFactory validatorFactory) { + this.validator = validatorFactory.getValidator(); + } + + @Override public boolean supports(MethodParameter parameter) { return parameter.hasParameterAnnotation(CliOption.class); diff --git a/spring-shell-standard-commands/src/main/java/org/springframework/shell/standard/commands/Help.java b/spring-shell-standard-commands/src/main/java/org/springframework/shell/standard/commands/Help.java index 774da0f1..336c16a1 100644 --- a/spring-shell-standard-commands/src/main/java/org/springframework/shell/standard/commands/Help.java +++ b/spring-shell-standard-commands/src/main/java/org/springframework/shell/standard/commands/Help.java @@ -40,6 +40,7 @@ import org.springframework.shell.standard.ShellOption; import javax.validation.MessageInterpolator; import javax.validation.Validation; +import javax.validation.ValidatorFactory; import javax.validation.metadata.ConstraintDescriptor; /** @@ -72,7 +73,6 @@ public class Help { private CommandRegistry commandRegistry; - @Autowired(required = false) private MessageInterpolator messageInterpolator = Validation.buildDefaultValidatorFactory() .getMessageInterpolator(); @@ -86,6 +86,13 @@ public class Help { this.commandRegistry = commandRegistry; } + + @Autowired(required = false) + public void setValidatorFactory(ValidatorFactory validatorFactory) { + this.messageInterpolator = validatorFactory.getMessageInterpolator(); + } + + @ShellMethod(value = "Display help about available commands.", prefix = "-") public CharSequence help( @ShellOption(defaultValue = ShellOption.NULL, valueProvider = CommandValueProvider.class, value = { "-C", diff --git a/spring-shell-standard/src/main/java/org/springframework/shell/standard/StandardParameterResolver.java b/spring-shell-standard/src/main/java/org/springframework/shell/standard/StandardParameterResolver.java index 1535c916..1ba4a10b 100644 --- a/spring-shell-standard/src/main/java/org/springframework/shell/standard/StandardParameterResolver.java +++ b/spring-shell-standard/src/main/java/org/springframework/shell/standard/StandardParameterResolver.java @@ -54,10 +54,7 @@ import org.springframework.util.Assert; import org.springframework.util.ConcurrentReferenceHashMap; import org.springframework.util.ObjectUtils; -import javax.validation.MessageInterpolator; -import javax.validation.Valid; -import javax.validation.Validation; -import javax.validation.Validator; +import javax.validation.*; import javax.validation.metadata.MethodDescriptor; import javax.validation.metadata.ParameterDescriptor; @@ -115,9 +112,14 @@ public class StandardParameterResolver implements ParameterResolver { this.valueProviders = valueProviders; } - @Autowired(required = false) private Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); + @Autowired(required = false) + public void setValidatorFactory(ValidatorFactory validatorFactory) { + this.validator = validatorFactory.getValidator(); + } + + @Override public boolean supports(MethodParameter parameter) { boolean optOut = parameter.hasParameterAnnotation(ShellOption.class)