Upgrade Notes for Dropwizard 0.8.x
First
Check out Migration discussion 0.7.1 to 0.8.0
at the dropwizard-dev
mailing list.
Migration of Apache Commons Lang
The classes were moved to a new package. You have to update the corresponding imports:
org.apache.commons.lang.
org.apache.commons.lang3.
Use assertions from AssertJ
Instead of the FEST assertions you should use the AssertJ assertions:
org.fest.assertions.api.Assertions.
org.assertj.core.api.Assertions.
Migration of custom URL pattern
If you set a custom URL pattern in your application run
method you should move the definition to your configuration file:
Remove from Java code (example):
environment.jersey().setUrlPattern("/api/*");
Add to configuration file (example):
server:
rootPath: '/api/*'
Migration of Jersey
This is not a simple search and replace migration, so I show you a few examples of often used code snippets for integration testing:
Dropwizard Class Rule
The class rule was not modified. It is shown here because it is used in the examples below.
@ClassRule
public static final DropwizardAppRule<SportChefConfiguration> RULE =
new DropwizardAppRule<>(App.class, "config.yaml");
Executing a GET request
final WebTarget target = ClientBuilder.newClient().target(
String.format("http://localhost:%d/api/user/1", RULE.getLocalPort()));
final Response response = target
.request(MediaType.APPLICATION_JSON_TYPE)
.accept(MediaType.APPLICATION_JSON_TYPE)
.get();
assertThat(response.getStatus()).isEqualTo(Response.Status.OK.getStatusCode());
final User user = response.readEntity(User.class);
assertThat(user.getId()).isEqualTo(1L);
assertThat(user.getFirstName()).isEqualTo("John");
assertThat(user.getLastName()).isEqualTo("Doe");
Executing a POST request
final WebTarget target = ClientBuilder.newClient().target(
String.format("http://localhost:%d/api/user", RULE.getLocalPort()));
final User user = new User(0L, "John", "Doe");
final Response response = target
.request(MediaType.APPLICATION_JSON_TYPE)
.accept(MediaType.APPLICATION_JSON_TYPE)
.post(Entity.json(user));
assertThat(response.getStatus()).isEqualTo(Response.Status.CREATED.getStatusCode());
final URI location = response.getLocation();
assertThat(location).isNotNull();
final String path = location.getPath();
final long newId = Long.parseLong(path.substring(path.lastIndexOf("/") + 1));
assertThat(newId).isGreaterThan(0);
Executing a empty PUT request
Jersey 2 does not by default allow empty PUT or DELETE requests. If you want to enable this, you have to add a configuration parameter
Client client = ClientBuilder.newClient();
client.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true);
WebTarget target = client.target(
String.format("http://localhost:%d/api/user", RULE.getLocalPort()));
Response response = target
.request()
.put(null);
assertThat(response.getStatus()).isEqualTo(Response.Status.OK.getStatusCode());
Request/response filters
If you previously used jersey container filters in your Dropwizard app,
getContainerRequestFilters()
will now fail to resolve:
env.jersey()
.getResourceConfig()
.getContainerRequestFilters()
.add(new AuthorizedFilter());
You might need to rewrite the filter to JAX-RS 2.0 and then you may use
the one and only .register()
instead.
My filters used imports from jersey.spi.container
and needed to be rewritten for Jersey 2.x.
See also: Jersey 1.x to 2.x migration guide.
env.jersey().register(new AuthorizationFilter());