Skip to content

Commit 8d99b6d

Browse files
Respond to review comments
Changed License reference (WIP) Removed cross-module dependency to jsonSchema Testing specific Modules instead of findAndRegisterModules Assert subtypes of JSONProcessingException CurrencyUnitDeserializer extends StdScalarDeserializer CurrencyUnitSerializer extends StdScalarSerializer MonetaryAmountDeserializer throws semantic exceptions using DeserializationContext MoneyModule version uses PackageVersion
1 parent abaf36d commit 8d99b6d

File tree

10 files changed

+50
-56
lines changed

10 files changed

+50
-56
lines changed

javax-money/pom.xml

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@
1414
<name>Jackson datatype: javax-money</name>
1515
<packaging>jar</packaging>
1616
<version>2.19.0-SNAPSHOT</version>
17-
<description>Support for datatypes of Javax Money library (https://javamoney.github.io/)
17+
<description>Support for datatypes of Money API spec from JSR 354 (https://javamoney.github.io/api.html)
1818
</description>
1919
<url>https://github.com/FasterXML/jackson-datatypes-misc</url>
2020
<licenses>
2121
<license>
22-
<name>The Apache Software License, Version 2.0</name>
23-
<url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
22+
<name>MIT License</name>
23+
<url>https://opensource.org/licenses/MIT</url>
2424
<distribution>repo</distribution>
2525
</license>
2626
</licenses>
@@ -82,11 +82,6 @@
8282
<version>4.5.1</version>
8383
<scope>test</scope>
8484
</dependency>
85-
<dependency>
86-
<groupId>com.fasterxml.jackson.module</groupId>
87-
<artifactId>jackson-module-jsonSchema</artifactId>
88-
<scope>test</scope>
89-
</dependency>
9085
<dependency>
9186
<groupId>com.kjetland</groupId>
9287
<artifactId>mbknor-jackson-jsonschema_2.12</artifactId>

javax-money/src/main/java/com/fasterxml/jackson/datatype/money/CurrencyUnitDeserializer.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.fasterxml.jackson.core.JsonParser;
44
import com.fasterxml.jackson.databind.DeserializationContext;
55
import com.fasterxml.jackson.databind.JsonDeserializer;
6+
import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer;
67
import com.fasterxml.jackson.databind.jsontype.TypeDeserializer;
78
import org.apiguardian.api.API;
89

@@ -13,7 +14,11 @@
1314
import static org.apiguardian.api.API.Status.MAINTAINED;
1415

1516
@API(status = MAINTAINED)
16-
public final class CurrencyUnitDeserializer extends JsonDeserializer<CurrencyUnit> {
17+
public final class CurrencyUnitDeserializer extends StdScalarDeserializer<CurrencyUnit> {
18+
19+
public CurrencyUnitDeserializer() {
20+
super(CurrencyUnit.class);
21+
}
1722

1823
@Override
1924
public Object deserializeWithType(final JsonParser parser, final DeserializationContext context,

javax-money/src/main/java/com/fasterxml/jackson/datatype/money/CurrencyUnitSerializer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.fasterxml.jackson.databind.JsonMappingException;
66
import com.fasterxml.jackson.databind.SerializerProvider;
77
import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper;
8+
import com.fasterxml.jackson.databind.ser.std.StdScalarSerializer;
89
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
910
import org.apiguardian.api.API;
1011

@@ -14,7 +15,7 @@
1415
import static org.apiguardian.api.API.Status.MAINTAINED;
1516

1617
@API(status = MAINTAINED)
17-
public final class CurrencyUnitSerializer extends StdSerializer<CurrencyUnit> {
18+
public final class CurrencyUnitSerializer extends StdScalarSerializer<CurrencyUnit> {
1819

1920
CurrencyUnitSerializer() {
2021
super(CurrencyUnit.class);

javax-money/src/main/java/com/fasterxml/jackson/datatype/money/MonetaryAmountDeserializer.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.fasterxml.jackson.core.JsonToken;
66
import com.fasterxml.jackson.databind.DeserializationContext;
77
import com.fasterxml.jackson.databind.JsonDeserializer;
8+
import com.fasterxml.jackson.databind.JsonMappingException;
89
import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException;
910
import com.fasterxml.jackson.databind.jsontype.TypeDeserializer;
1011

@@ -14,6 +15,7 @@
1415
import java.io.IOException;
1516
import java.math.BigDecimal;
1617
import java.util.Arrays;
18+
import java.util.Objects;
1719

1820
import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;
1921
import static java.lang.String.format;
@@ -61,17 +63,18 @@ public M deserialize(final JsonParser parser, final DeserializationContext conte
6163
}
6264
}
6365

64-
checkPresent(parser, amount, names.getAmount());
65-
checkPresent(parser, currency, names.getCurrency());
66+
String missingName;
6667

67-
return factory.create(amount, currency);
68-
}
69-
70-
private void checkPresent(final JsonParser parser, @Nullable final Object value, final String name)
71-
throws JsonParseException {
72-
if (value == null) {
73-
throw new JsonParseException(parser, format("Missing property: '%s'", name));
68+
if (Objects.isNull(currency)) {
69+
missingName = names.getCurrency();
70+
} else if (Objects.isNull(amount)) {
71+
missingName = names.getAmount();
72+
} else {
73+
return factory.create(amount, currency);
7474
}
75+
76+
return context.reportPropertyInputMismatch(MonetaryAmount.class, missingName, format("Missing property: '%s'", missingName));
77+
7578
}
7679

7780
}

javax-money/src/main/java/com/fasterxml/jackson/datatype/money/MoneyModule.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.fasterxml.jackson.datatype.money;
22

33
import com.fasterxml.jackson.core.Version;
4-
import com.fasterxml.jackson.core.util.VersionUtil;
54
import com.fasterxml.jackson.databind.Module;
65
import com.fasterxml.jackson.databind.module.SimpleDeserializers;
76
import com.fasterxml.jackson.databind.module.SimpleSerializers;
@@ -59,10 +58,8 @@ public String getModuleName() {
5958
}
6059

6160
@Override
62-
@SuppressWarnings("deprecation")
6361
public Version version() {
64-
final ClassLoader loader = MoneyModule.class.getClassLoader();
65-
return VersionUtil.mavenVersionFor(loader, "com.fasterxml.jackson.datatype.money", "jackson-datatype-money");
62+
return PackageVersion.VERSION;
6663
}
6764

6865
@Override

javax-money/src/main/resources/META-INF/LICENSE

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
TODO What goes here? (This original one or another?)
2-
31
The MIT License (MIT)
42

53
Copyright (c) 2015-2016 Zalando SE

javax-money/src/test/java/com/fasterxml/jackson/datatype/money/CurrencyUnitDeserializerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
public final class CurrencyUnitDeserializerTest {
1616

17-
private final ObjectMapper unit = new ObjectMapper().findAndRegisterModules();
17+
private final ObjectMapper unit = new ObjectMapper().registerModule(new MoneyModule());
1818

1919
@Test
2020
public void shouldDeserialize() throws IOException {
Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,22 @@
11
package com.fasterxml.jackson.datatype.money;
22

3+
import com.fasterxml.jackson.databind.JsonNode;
34
import com.fasterxml.jackson.databind.ObjectMapper;
4-
import com.fasterxml.jackson.module.jsonSchema.JsonSchema;
5-
import com.fasterxml.jackson.module.jsonSchema.JsonSchemaGenerator;
5+
import com.kjetland.jackson.jsonSchema.JsonSchemaGenerator;
66
import org.junit.Test;
77

88
import javax.money.CurrencyUnit;
9-
109
import static org.assertj.core.api.Assertions.assertThat;
1110

1211
public final class CurrencyUnitSchemaSerializerTest {
1312

14-
private final ObjectMapper unit = new ObjectMapper().findAndRegisterModules();
13+
private final ObjectMapper unit = new ObjectMapper().registerModule(new MoneyModule());
1514

1615
@Test
17-
public void shouldSerializeJsonSchema() throws Exception {
16+
public void shouldSerializeJsonSchema() {
1817
JsonSchemaGenerator generator = new JsonSchemaGenerator(unit);
19-
JsonSchema jsonSchema = generator.generateSchema(CurrencyUnit.class);
20-
final String actual = unit.writeValueAsString(jsonSchema);
21-
final String expected = "{\"type\":\"string\"}";
22-
23-
assertThat(actual).isEqualTo(expected);
18+
JsonNode schemaNode = generator.generateJsonSchema(CurrencyUnit.class);
19+
assertThat(schemaNode.get("type")).isNotNull();
20+
assertThat(schemaNode.get("type").asText()).isEqualTo("string");
2421
}
2522
}

javax-money/src/test/java/com/fasterxml/jackson/datatype/money/MonetaryAmountDeserializerTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.fasterxml.jackson.databind.JsonNode;
66
import com.fasterxml.jackson.databind.Module;
77
import com.fasterxml.jackson.databind.ObjectMapper;
8+
import com.fasterxml.jackson.databind.exc.MismatchedInputException;
89
import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException;
910
import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator;
1011
import junitparams.JUnitParamsRunner;
@@ -209,8 +210,8 @@ public void shouldFailToDeserializeWithoutCurrency(final Class<M> type, final Co
209210

210211
final String content = "{\"amount\":29.95}";
211212

212-
final JsonProcessingException exception = assertThrows(
213-
JsonProcessingException.class, () -> unit.readValue(content, type));
213+
final MismatchedInputException exception = assertThrows(
214+
MismatchedInputException.class, () -> unit.readValue(content, type));
214215

215216
assertThat(exception.getMessage()).contains("Missing property: 'currency'");
216217
}

javax-money/src/test/java/com/fasterxml/jackson/datatype/money/MonetaryAmountSchemaSerializerTest.java

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
import com.fasterxml.jackson.databind.JsonNode;
44
import com.fasterxml.jackson.databind.Module;
55
import com.fasterxml.jackson.databind.ObjectMapper;
6-
import com.fasterxml.jackson.module.jsonSchema.JsonSchema;
7-
import com.fasterxml.jackson.module.jsonSchema.JsonSchemaGenerator;
6+
import com.kjetland.jackson.jsonSchema.JsonSchemaGenerator;
87
import org.junit.Test;
98

109
import javax.money.MonetaryAmount;
@@ -17,12 +16,12 @@ public final class MonetaryAmountSchemaSerializerTest {
1716
public void shouldSerializeJsonSchema() throws Exception {
1817
final ObjectMapper unit = unit(module());
1918
final JsonSchemaGenerator generator = new JsonSchemaGenerator(unit);
20-
final JsonSchema jsonSchema = generator.generateSchema(MonetaryAmount.class);
19+
final JsonNode jsonSchema = generator.generateJsonSchema(MonetaryAmount.class);
2120
final String actual = unit.writeValueAsString(jsonSchema);
22-
final String expected = "{\"type\":\"object\",\"id\":\"urn:jsonschema:javax:money:MonetaryAmount\",\"properties\":" +
23-
"{\"amount\":{\"type\":\"number\",\"required\":true}," +
24-
"\"currency\":{\"type\":\"string\",\"required\":true}," +
25-
"\"formatted\":{\"type\":\"string\"}}}";
21+
final String expected = "{\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"title\":\"Monetary Amount\"" +
22+
",\"type\":\"object\",\"additionalProperties\":false,\"properties\":{\"amount\":{\"type\":\"number\"}" +
23+
",\"currency\":{\"type\":\"string\"},\"formatted\":{\"type\":\"string\"}}" +
24+
",\"required\":[\"amount\",\"currency\"]}";
2625

2726
assertThat(actual).isEqualTo(expected);
2827
}
@@ -33,12 +32,11 @@ public void shouldSerializeJsonSchemaWithCustomFieldNames() throws Exception {
3332
.withCurrencyFieldName("unit")
3433
.withFormattedFieldName("pretty"));
3534
final JsonSchemaGenerator generator = new JsonSchemaGenerator(unit);
36-
final JsonSchema jsonSchema = generator.generateSchema(MonetaryAmount.class);
35+
final JsonNode jsonSchema = generator.generateJsonSchema(MonetaryAmount.class);
3736
final String actual = unit.writeValueAsString(jsonSchema);
38-
final String expected = "{\"type\":\"object\",\"id\":\"urn:jsonschema:javax:money:MonetaryAmount\",\"properties\":" +
39-
"{\"value\":{\"type\":\"number\",\"required\":true}," +
40-
"\"unit\":{\"type\":\"string\",\"required\":true}," +
41-
"\"pretty\":{\"type\":\"string\"}}}";
37+
final String expected = "{\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"title\":\"Monetary Amount\"" +
38+
",\"type\":\"object\",\"additionalProperties\":false,\"properties\":{\"value\":{\"type\":\"number\"}" +
39+
",\"unit\":{\"type\":\"string\"},\"pretty\":{\"type\":\"string\"}},\"required\":[\"value\",\"unit\"]}";
4240

4341
assertThat(actual).isEqualTo(expected);
4442
}
@@ -47,18 +45,17 @@ public void shouldSerializeJsonSchemaWithCustomFieldNames() throws Exception {
4745
public void shouldSerializeJsonSchemaWithQuotedDecimalNumbers() throws Exception {
4846
final ObjectMapper unit = unit(module().withQuotedDecimalNumbers());
4947
final JsonSchemaGenerator generator = new JsonSchemaGenerator(unit);
50-
final JsonSchema jsonSchema = generator.generateSchema(MonetaryAmount.class);
48+
final JsonNode jsonSchema = generator.generateJsonSchema(MonetaryAmount.class);
5149
final String actual = unit.writeValueAsString(jsonSchema);
52-
final String expected = "{\"type\":\"object\",\"id\":\"urn:jsonschema:javax:money:MonetaryAmount\",\"properties\":" +
53-
"{\"amount\":{\"type\":\"string\",\"required\":true}," +
54-
"\"currency\":{\"type\":\"string\",\"required\":true}," +
55-
"\"formatted\":{\"type\":\"string\"}}}";
50+
final String expected = "{\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"title\":\"Monetary Amount\"" +
51+
",\"type\":\"object\",\"additionalProperties\":false,\"properties\":{\"amount\":{\"type\":\"string\"}" +
52+
",\"currency\":{\"type\":\"string\"},\"formatted\":{\"type\":\"string\"}},\"required\":[\"amount\",\"currency\"]}";
5653

5754
assertThat(actual).isEqualTo(expected);
5855
}
5956

6057
@Test
61-
public void shouldSerializeJsonSchemaWithMultipleMonetayAmountsAndAlternativeGenerator() throws Exception {
58+
public void shouldSerializeJsonSchemaWithMultipleMonetayAmounts() throws Exception {
6259
final ObjectMapper unit = unit(module());
6360
final com.kjetland.jackson.jsonSchema.JsonSchemaGenerator generator =
6461
new com.kjetland.jackson.jsonSchema.JsonSchemaGenerator(unit);

0 commit comments

Comments
 (0)