Skip to content

Commit c0cec2c

Browse files
committed
Expose the Validator for extension.
1 parent d985f2e commit c0cec2c

File tree

12 files changed

+76
-20
lines changed

12 files changed

+76
-20
lines changed

dropwizard-client/src/main/java/com/yammer/dropwizard/client/JerseyClientBuilder.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import com.sun.jersey.client.apache4.config.DefaultApacheHttpClient4Config;
1212
import com.yammer.dropwizard.config.Environment;
1313
import com.yammer.dropwizard.jersey.JacksonMessageBodyProvider;
14+
import com.yammer.dropwizard.validation.Validator;
1415
import org.apache.http.conn.DnsResolver;
1516
import org.apache.http.conn.scheme.SchemeRegistry;
1617

@@ -46,6 +47,7 @@ public class JerseyClientBuilder {
4647
private Environment environment;
4748
private ObjectMapper objectMapper;
4849
private ExecutorService executorService;
50+
private Validator validator = new Validator();
4951

5052
/**
5153
* Adds the given object as a Jersey provider.
@@ -116,6 +118,7 @@ public JerseyClientBuilder using(JerseyClientConfiguration configuration) {
116118
*/
117119
public JerseyClientBuilder using(Environment environment) {
118120
this.environment = environment;
121+
this.validator = environment.getValidator();
119122
return this;
120123
}
121124

@@ -141,6 +144,17 @@ public JerseyClientBuilder using(SchemeRegistry registry) {
141144
return this;
142145
}
143146

147+
/**
148+
* Use the given {@link Validator} instance.
149+
*
150+
* @param validator a {@link Validator} instance
151+
* @return {@code this}
152+
*/
153+
public JerseyClientBuilder using(Validator validator) {
154+
this.validator = validator;
155+
return this;
156+
}
157+
144158
/**
145159
* Uses the given {@link ExecutorService} and {@link ObjectMapper}.
146160
*
@@ -197,7 +211,7 @@ private ApacheHttpClient4Handler buildHandler() {
197211
private ApacheHttpClient4Config buildConfig(ObjectMapper objectMapper) {
198212
final ApacheHttpClient4Config config = new DefaultApacheHttpClient4Config();
199213
config.getSingletons().addAll(singletons);
200-
config.getSingletons().add(new JacksonMessageBodyProvider(objectMapper));
214+
config.getSingletons().add(new JacksonMessageBodyProvider(objectMapper, validator));
201215
config.getClasses().addAll(providers);
202216
config.getFeatures().putAll(features);
203217
config.getProperties().putAll(properties);

dropwizard-core/src/main/java/com/yammer/dropwizard/cli/ConfiguredCommand.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,7 @@ private T parseConfiguration(String filename,
7474
Class<T> configurationClass,
7575
ObjectMapperFactory objectMapperFactory) throws IOException, ConfigurationException {
7676
final ConfigurationFactory<T> configurationFactory =
77-
ConfigurationFactory.forClass(configurationClass,
78-
new Validator(),
79-
objectMapperFactory);
77+
ConfigurationFactory.forClass(configurationClass, new Validator(), objectMapperFactory);
8078
if (filename != null) {
8179
final File file = new File(filename);
8280
if (!file.exists()) {

dropwizard-core/src/main/java/com/yammer/dropwizard/cli/EnvironmentCommand.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.yammer.dropwizard.config.Bootstrap;
55
import com.yammer.dropwizard.config.Configuration;
66
import com.yammer.dropwizard.config.Environment;
7+
import com.yammer.dropwizard.validation.Validator;
78
import net.sourceforge.argparse4j.inf.Namespace;
89

910
/**
@@ -31,7 +32,8 @@ protected EnvironmentCommand(Service<T> service, String name, String description
3132
protected final void run(Bootstrap<T> bootstrap, Namespace namespace, T configuration) throws Exception {
3233
final Environment environment = new Environment(bootstrap.getName(),
3334
configuration,
34-
bootstrap.getObjectMapperFactory().copy());
35+
bootstrap.getObjectMapperFactory().copy(),
36+
new Validator());
3537
bootstrap.runWithBundles(configuration, environment);
3638
service.run(configuration, environment);
3739
run(environment, namespace, configuration);

dropwizard-core/src/main/java/com/yammer/dropwizard/cli/ServerCommand.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.yammer.dropwizard.config.Environment;
88
import com.yammer.dropwizard.config.ServerFactory;
99
import com.yammer.dropwizard.lifecycle.ServerLifecycleListener;
10+
import com.yammer.dropwizard.validation.Validator;
1011
import net.sourceforge.argparse4j.inf.Namespace;
1112
import org.eclipse.jetty.server.Server;
1213
import org.slf4j.Logger;

dropwizard-core/src/main/java/com/yammer/dropwizard/config/Environment.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import com.yammer.dropwizard.lifecycle.ServerLifecycleListener;
1717
import com.yammer.dropwizard.tasks.GarbageCollectionTask;
1818
import com.yammer.dropwizard.tasks.Task;
19+
import com.yammer.dropwizard.validation.Validator;
1920
import com.yammer.metrics.core.HealthCheck;
2021
import org.eclipse.jetty.server.session.SessionHandler;
2122
import org.eclipse.jetty.servlet.FilterHolder;
@@ -66,6 +67,7 @@ public class Environment extends AbstractLifeCycle {
6667
private final ObjectMapperFactory objectMapperFactory;
6768
private SessionHandler sessionHandler;
6869
private ServletContainer jerseyServletContainer;
70+
private Validator validator;
6971

7072
private ServerLifecycleListener serverListener;
7173

@@ -78,10 +80,12 @@ public class Environment extends AbstractLifeCycle {
7880
*/
7981
public Environment(String name,
8082
Configuration configuration,
81-
ObjectMapperFactory objectMapperFactory) {
83+
ObjectMapperFactory objectMapperFactory,
84+
Validator validator) {
8285
this.name = name;
8386
this.configuration = configuration;
8487
this.objectMapperFactory = objectMapperFactory;
88+
this.validator = validator;
8589
this.config = new DropwizardResourceConfig(false) {
8690
@Override
8791
public void validate() {
@@ -381,9 +385,17 @@ public ScheduledExecutorService managedScheduledExecutorService(String nameForma
381385
return executor;
382386
}
383387

388+
public Validator getValidator() {
389+
return validator;
390+
}
391+
392+
public void setValidator(Validator validator) {
393+
this.validator = checkNotNull(validator);
394+
}
395+
384396
/*
385-
* Internal Accessors
386-
*/
397+
* Internal Accessors
398+
*/
387399

388400
ImmutableSet<HealthCheck> getHealthChecks() {
389401
return healthChecks.build();

dropwizard-core/src/main/java/com/yammer/dropwizard/jersey/JacksonMessageBodyProvider.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@
3030
*/
3131
@Provider
3232
public class JacksonMessageBodyProvider extends JacksonJaxbJsonProvider {
33-
private static final Validator VALIDATOR = new Validator();
34-
3533
/**
3634
* The default group array used in case any of the validate methods is called without a group.
3735
*/
3836
private static final Class<?>[] DEFAULT_GROUP_ARRAY = new Class<?>[]{ Default.class };
3937
private final ObjectMapper mapper;
38+
private final Validator validator;
4039

41-
public JacksonMessageBodyProvider(ObjectMapper mapper) {
40+
public JacksonMessageBodyProvider(ObjectMapper mapper, Validator validator) {
41+
this.validator = validator;
4242
this.mapper = mapper;
4343
setMapper(mapper);
4444
}
@@ -70,7 +70,7 @@ private Object validate(Annotation[] annotations, Object value) {
7070
final Class<?>[] classes = findValidationGroups(annotations);
7171

7272
if (classes != null) {
73-
final ImmutableList<String> errors = VALIDATOR.validate(value, classes);
73+
final ImmutableList<String> errors = validator.validate(value, classes);
7474
if (!errors.isEmpty()) {
7575
throw new InvalidEntityException("The request entity had the following errors:",
7676
errors);

dropwizard-core/src/main/java/com/yammer/dropwizard/json/JsonBundle.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public void initialize(Bootstrap<?> bootstrap) {
1616

1717
@Override
1818
public void run(Environment environment) {
19-
environment.addProvider(new JacksonMessageBodyProvider(environment.getObjectMapperFactory().build()));
19+
environment.addProvider(new JacksonMessageBodyProvider(environment.getObjectMapperFactory().build(),
20+
environment.getValidator()));
2021
}
2122
}

dropwizard-core/src/main/java/com/yammer/dropwizard/validation/Validator.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,15 @@
1818
* A simple façade for Hibernate Validator.
1919
*/
2020
public class Validator {
21-
private final ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
21+
private final ValidatorFactory factory;
22+
23+
public Validator() {
24+
this(Validation.buildDefaultValidatorFactory());
25+
}
26+
27+
public Validator(ValidatorFactory factory) {
28+
this.factory = factory;
29+
}
2230

2331
/**
2432
* Validates the given object, and returns a list of error messages, if any. If the returned

dropwizard-core/src/test/java/com/yammer/dropwizard/config/tests/EnvironmentTest.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.yammer.dropwizard.config.Configuration;
44
import com.yammer.dropwizard.config.Environment;
55
import com.yammer.dropwizard.json.ObjectMapperFactory;
6+
import com.yammer.dropwizard.validation.Validator;
67
import org.junit.Test;
78
import org.slf4j.bridge.SLF4JBridgeHandler;
89

@@ -17,13 +18,18 @@ public class EnvironmentTest {
1718
@Test
1819
@SuppressWarnings("unchecked")
1920
public void scanPackagesHandlesEmptyArgumentList() {
20-
new Environment("", mock(Configuration.class), mock(ObjectMapperFactory.class)).scanPackagesForResourcesAndProviders();
21+
new Environment("",
22+
mock(Configuration.class),
23+
mock(ObjectMapperFactory.class),
24+
new Validator()).scanPackagesForResourcesAndProviders();
2125
}
2226

2327
@Test(expected = NullPointerException.class)
2428
@SuppressWarnings("unchecked")
2529
public void scanPackagesThrowsNpeOnNullArgument() {
26-
new Environment("", mock(Configuration.class), mock(ObjectMapperFactory.class)).scanPackagesForResourcesAndProviders(
27-
(Class<?>[]) null);
30+
new Environment("",
31+
mock(Configuration.class),
32+
mock(ObjectMapperFactory.class),
33+
new Validator()).scanPackagesForResourcesAndProviders((Class<?>[]) null);
2834
}
2935
}

dropwizard-core/src/test/java/com/yammer/dropwizard/jersey/tests/JacksonMessageBodyProviderTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.yammer.dropwizard.json.ObjectMapperFactory;
1111
import com.yammer.dropwizard.validation.InvalidEntityException;
1212
import com.yammer.dropwizard.validation.Validated;
13+
import com.yammer.dropwizard.validation.Validator;
1314
import org.junit.Test;
1415

1516
import javax.validation.Valid;
@@ -59,7 +60,8 @@ public static interface NonIgnorable extends Ignorable {
5960
}
6061

6162
private final ObjectMapper mapper = spy(new ObjectMapperFactory().build());
62-
private final JacksonMessageBodyProvider provider = new JacksonMessageBodyProvider(mapper);
63+
private final JacksonMessageBodyProvider provider = new JacksonMessageBodyProvider(mapper,
64+
new Validator());
6365

6466
@Test
6567
public void readsDeserializableTypes() throws Exception {

0 commit comments

Comments
 (0)