Skip to content

Commit 2709039

Browse files
author
Luca Di Grazia
committed
Add null-checks to AnnotationSensitivePropertyNamingStrategy (#3515)
Refs FasterXML/jackson-datatypes-collections#79 Fixes #3514
1 parent 32d3ee7 commit 2709039

File tree

3 files changed

+55
-11
lines changed

3 files changed

+55
-11
lines changed

dataset/GitHub_Java/dropwizard.dropwizard/dropwizard-core/src/main/java/io/dropwizard/server/AbstractServerFactory.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -699,7 +699,6 @@ protected Handler buildGzipHandler(Handler handler) {
699699
return gzip.isEnabled() ? gzip.build(handler) : handler;
700700
}
701701

702-
@SuppressWarnings("Slf4jFormatShouldBeConst")
703702
protected void printBanner(String name) {
704703
String msg = "Starting " + name;
705704
final URL resource = Thread.currentThread().getContextClassLoader().getResource("banner.txt");
@@ -709,7 +708,7 @@ protected void printBanner(String name) {
709708
final BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) {
710709
final String banner = bufferedReader
711710
.lines()
712-
.collect(Collectors.joining(System.lineSeparator()));
711+
.collect(Collectors.joining(String.format("%n")));
713712
msg = String.format("Starting %s%n%s", name, banner);
714713
} catch (IllegalArgumentException | IOException ignored) {
715714
}

dataset/GitHub_Java/dropwizard.dropwizard/dropwizard-jackson/src/main/java/io/dropwizard/jackson/AnnotationSensitivePropertyNamingStrategy.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.dropwizard.jackson;
22

3-
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
43
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
54
import com.fasterxml.jackson.databind.cfg.MapperConfig;
65
import com.fasterxml.jackson.databind.introspect.AnnotatedField;
@@ -10,13 +9,18 @@
109
/**
1110
* A {@link PropertyNamingStrategy} implementation which, if the declaring class of a property is
1211
* annotated with {@link JsonSnakeCase}, uses a
13-
* {@link com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy}, and uses
12+
* {@link com.fasterxml.jackson.databind.PropertyNamingStrategy.SnakeCaseStrategy}, and uses
1413
* the default {@link PropertyNamingStrategy} otherwise.
1514
*/
1615
public class AnnotationSensitivePropertyNamingStrategy extends PropertyNamingStrategy {
1716
private static final long serialVersionUID = -1372862028366311230L;
1817

19-
private final PropertyNamingStrategy snakeCase = new PropertyNamingStrategies.SnakeCaseStrategy();
18+
private final SnakeCaseStrategy snakeCase;
19+
20+
public AnnotationSensitivePropertyNamingStrategy() {
21+
super();
22+
this.snakeCase = new SnakeCaseStrategy();
23+
}
2024

2125
@Override
2226
public String nameForConstructorParameter(MapperConfig<?> config,

dataset/GitHub_Java/dropwizard.dropwizard/dropwizard-jackson/src/test/java/io/dropwizard/jackson/AnnotationSensitivePropertyNamingStrategyTest.java

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,17 @@
33
import com.fasterxml.jackson.annotation.JsonProperty;
44
import com.fasterxml.jackson.databind.ObjectMapper;
55
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
6+
import com.fasterxml.jackson.databind.cfg.MapperConfig;
7+
import com.fasterxml.jackson.datatype.guava.deser.util.RangeHelper;
68
import org.junit.jupiter.api.BeforeEach;
79
import org.junit.jupiter.api.Test;
810

911
import javax.annotation.Nullable;
1012

1113
import static org.assertj.core.api.Assertions.assertThat;
14+
import static org.mockito.Mockito.mock;
1215

13-
public class AnnotationSensitivePropertyNamingStrategyTest {
16+
class AnnotationSensitivePropertyNamingStrategyTest {
1417
public static class RegularExample {
1518
@JsonProperty
1619
@Nullable
@@ -42,31 +45,69 @@ public SnakeCaseExample(String firstName) {
4245
private final ObjectMapper mapper = new ObjectMapper();
4346

4447
@BeforeEach
45-
public void setUp() throws Exception {
48+
void setUp() {
4649
mapper.setPropertyNamingStrategy(strategy);
4750
}
4851

4952
@Test
50-
public void serializesRegularProperties() throws Exception {
53+
void serializesRegularProperties() throws Exception {
5154
assertThat(mapper.writeValueAsString(new RegularExample("woo")))
5255
.isEqualTo("{\"firstName\":\"woo\"}");
5356
}
5457

5558
@Test
56-
public void serializesSnakeCaseProperties() throws Exception {
59+
void serializesSnakeCaseProperties() throws Exception {
5760
assertThat(mapper.writeValueAsString(new SnakeCaseExample("woo")))
5861
.isEqualTo("{\"first_name\":\"woo\"}");
5962
}
6063

6164
@Test
62-
public void deserializesRegularProperties() throws Exception {
65+
void deserializesRegularProperties() throws Exception {
6366
assertThat(mapper.readValue("{\"firstName\":\"woo\"}", RegularExample.class).firstName)
6467
.isEqualTo("woo");
6568
}
6669

6770
@Test
68-
public void deserializesSnakeCaseProperties() throws Exception {
71+
void deserializesSnakeCaseProperties() throws Exception {
6972
assertThat(mapper.readValue("{\"first_name\":\"woo\"}", SnakeCaseExample.class).firstName)
7073
.isEqualTo("woo");
7174
}
75+
76+
@Test
77+
void nameForConstructorParameterWorksWithNullField() {
78+
final MapperConfig<?> mapperConfig = mock(MapperConfig.class);
79+
final String name = strategy.nameForConstructorParameter(mapperConfig, null, "defaultName");
80+
assertThat(name).isEqualTo("defaultName");
81+
}
82+
83+
@Test
84+
void nameForFieldWorksWithNullField() {
85+
final MapperConfig<?> mapperConfig = mock(MapperConfig.class);
86+
final String name = strategy.nameForField(mapperConfig, null, "defaultName");
87+
assertThat(name).isEqualTo("defaultName");
88+
}
89+
90+
@Test
91+
void nameForGetterMethodWorksWithNullField() {
92+
final MapperConfig<?> mapperConfig = mock(MapperConfig.class);
93+
final String name = strategy.nameForGetterMethod(mapperConfig, null, "defaultName");
94+
assertThat(name).isEqualTo("defaultName");
95+
}
96+
97+
@Test
98+
void nameForSetterMethodWorksWithNullField() {
99+
final MapperConfig<?> mapperConfig = mock(MapperConfig.class);
100+
final String name = strategy.nameForSetterMethod(mapperConfig, null, "defaultName");
101+
assertThat(name).isEqualTo("defaultName");
102+
}
103+
104+
@Test
105+
// https://github.com/dropwizard/dropwizard/issues/3514
106+
void usingRangeHelperDoesNotThrowNullPointerException() {
107+
final RangeHelper.RangeProperties standardNames = RangeHelper.standardNames();
108+
assertThat(standardNames.lowerBoundType).isNotBlank();
109+
assertThat(standardNames.lowerEndpoint).isNotBlank();
110+
assertThat(standardNames.upperBoundType).isNotBlank();
111+
assertThat(standardNames.upperEndpoint).isNotBlank();
112+
}
72113
}

0 commit comments

Comments
 (0)