-
Notifications
You must be signed in to change notification settings - Fork 20
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Move jackson-datatype-money module from zalando #48
base: 2.19
Are you sure you want to change the base?
Conversation
@@ -0,0 +1,13 @@ | |||
//TODO how is this generated |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am not sure how this file is generated.
Is there some documentation for this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it would be running
../mvnw moditect:generate-module-info
from new modules project dir. Let me try this on PR.
This provides the base, but must be modified; looking at other modules's module-info.java
for inspiration.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmmh. Alas, that command throws NPE.
1166e8e
to
f29f0e3
Compare
on-behalf-of: Zalando OSS Community Co-authored-by: Willi Schönborn <[email protected]> Co-authored-by: Philipp Hirch <[email protected]> Co-authored-by: Jörn Horstmann <[email protected]> Co-authored-by: Lauri at Zalando <[email protected]> Co-authored-by: msparer <[email protected]> Co-authored-by: Alexander Yastrebov <[email protected]> Co-authored-by: Alexey Venderov <[email protected]> Co-authored-by: Alexander Yastrebov <[email protected]> Co-authored-by: Arnaud BOIVIN <[email protected]> Co-authored-by: Bartosz Ocytko <[email protected]> Co-authored-by: Carlos Freund <[email protected]> Co-authored-by: Dario Seidl <[email protected]> Co-authored-by: Georgios Andrianakis <[email protected]> Co-authored-by: Lauri at Zalando <[email protected]> Co-authored-by: Martin Prebio <[email protected]> Co-authored-by: Sean Sullivan <[email protected]> Co-authored-by: Touko Vainio-Kaila <[email protected]> Co-authored-by: lukasniemeier-zalando <[email protected]>
f29f0e3
to
abaf36d
Compare
@cowtowncoder Please review when you have time. |
...x-money/src/test/java/com/fasterxml/jackson/datatype/money/CurrencyUnitDeserializerTest.java
Outdated
Show resolved
Hide resolved
...ney/src/test/java/com/fasterxml/jackson/datatype/money/CurrencyUnitSchemaSerializerTest.java
Show resolved
Hide resolved
...money/src/test/java/com/fasterxml/jackson/datatype/money/MonetaryAmountDeserializerTest.java
Outdated
Show resolved
Hide resolved
|
||
<dependency> | ||
<groupId>org.javamoney.moneta</groupId> | ||
<artifactId>moneta-core</artifactId> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this test-only dependency? Or does module require specific Money API implementation?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The module supports Money API implementations like moneta's FastMoney, Money and RoundedMoney.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Right: I was wondering if inclusion of specific implementation was problematic wrt using something else -- but I guess one would just use Maven dependency exclude, or some other mechanism.
Or put another way: I can see such dependency necessary for testing but wasn't sure it was really needed as regular ("compile") dependency. If you think it is needed that's fine: just double-checking.
import static org.apiguardian.api.API.Status.MAINTAINED; | ||
|
||
@API(status = MAINTAINED) | ||
public final class CurrencyUnitDeserializer extends JsonDeserializer<CurrencyUnit> { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Usually should extend either StdDeserializer
or (if applicable) StdScalarDeserializer
.
import static org.apiguardian.api.API.Status.MAINTAINED; | ||
|
||
@API(status = MAINTAINED) | ||
public final class CurrencyUnitSerializer extends StdSerializer<CurrencyUnit> { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Possibly should use StdScalarSerializer
.
} | ||
|
||
@Override | ||
public Object deserializeWithType(final JsonParser parser, final DeserializationContext context, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If extending StdDeserializer
(or, StdScaralDeserializer
), wouldn't need to implement this method, I think.
private void checkPresent(final JsonParser parser, @Nullable final Object value, final String name) | ||
throws JsonParseException { | ||
if (value == null) { | ||
throw new JsonParseException(parser, format("Missing property: '%s'", name)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sub-optimal exception as it does not indicate value type that has the issue.
Should usually be passed DeserializationContext
and call one of methods it provides for throwing more specific (semantic) exceptions.
public void serializeWithType(final MonetaryAmount value, final JsonGenerator generator, | ||
final SerializerProvider provider, final TypeSerializer serializer) throws IOException { | ||
|
||
// effectively assuming no type information at all |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
... which is basically wrong :-(
(meaning, won't work with @JsonTypeInfo
)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the review comment.
Do you see this as a blocker to merge this PR?
As this is not strictly related to moving the module from Zalando repo, I would prefer to treat this as a future improvement.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No, I don't think it is blocker: good point on "let's move it first, then improve".
javax-money/src/main/java/com/fasterxml/jackson/datatype/money/MoneyModule.java
Show resolved
Hide resolved
@sri-adarsh-kumar Ok, so technically I think this looks ok (although I have suggestions and concerns wrt code actually). I think we need one or more CLAs (from https://github.com/FasterXML/jackson/ either individual or Corporate CLA):
It might be simplest to get CCLA from Zalando, although that is not a requirement if authors can give individual CLAs. |
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
d44c71e
to
487cbf9
Compare
|
||
|
||
@API(status = STABLE) | ||
public final class MoneyModule extends Module { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we actually rename this as JavaxMoneyModule
?
... also, as a side-note, is there need for "Jakarta Money module"? (wrt javax licensing resulting in "forking" of javax APIs)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let me check on this.
...x-money/src/test/java/com/fasterxml/jackson/datatype/money/CurrencyUnitDeserializerTest.java
Outdated
Show resolved
Hide resolved
@sri-adarsh-kumar Thank you for updates, good job so far! The other thing then has to do with CLAs, permissions -- see my earlier note. |
Thanks for all the support. |
|
||
```java | ||
ObjectMapper mapper = new ObjectMapper() | ||
.registerModule(new MoneyModule()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's change to use new-er "addModule":
ObjectMapper mapper = JsonMapper.builder()
.addModule(...)
.build();
|
||
```java | ||
ObjectMapper mapper = new ObjectMapper() | ||
.registerModule(new MoneyModule().withQuotedDecimalNumbers()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same here (addModule())
I think code is looking almost ready for merge, so just need to deal with CLA question and it could be merged! |
Moves jackson-datatype-money module from zalando
Context
Related to #5 and zalando/jackson-datatype-money#224
From the above conversations, there is a consensus to move the zalando/jackson-datatype-money library as a sub-module of this repository.
In order to achieve this, I have moved the files almost 1:1 from the source repository.
Only major changes were related to tests. The source repo had Junit Jupiter tests with
@ParameterizedTest
. The destination library already had other tests usingjunitParams.Parameters
, so this was adopted.Review Suggestions
Please focus on