-
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,23 @@ | |||
TODO What goes here? (This original one or another?) |
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.
Need some support with the License information
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 this code happened to be licensed under Apache License 2, we could just use modified version of other modules' LICENSE
, like:
This copy of Jackson Jakarta JSONP extension module is licensed under the
Apache (Software) License, version 2.0 ("the License").
See the License for details about distribution rights, and the
specific rights regarding derivative works.
You may obtain a copy of the License at:
http://www.apache.org/licenses/LICENSE-2.0```
But as long as we know what the license used is (we can't change it), should modify above to refer to whatever license there is.
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.
That is: we have to use the original license -- unless we have original author(s) permission to use some other license.
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.
Ok so its MIT License instead. So... I guess we could just include full license like so, given it's copyright by Zalando. No changes needed.
But we do need to make sure <license>
tag in pom.xml
has MIT license (we might have parent pom defaulting to Apache 2)
@@ -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. |
</description> | ||
<url>https://github.com/FasterXML/jackson-datatypes-misc</url> | ||
<licenses> | ||
<license> |
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.
Assuming MIT License as per notes further down, this needs to be changed.
<name>Jackson datatype: javax-money</name> | ||
<packaging>jar</packaging> | ||
<version>2.19.0-SNAPSHOT</version> | ||
<description>Support for datatypes of Javax Money library (https://javamoney.github.io/) |
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.
Maybe also mention Money API spec is from JSR 354 (can link to https://javamoney.github.io/api.html I suppose)
|
||
public final class CurrencyUnitDeserializerTest { | ||
|
||
private final ObjectMapper unit = new ObjectMapper().findAndRegisterModules(); |
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.
This is wrong: should specifically add just Money module and not whatever might happen to be in classpath. Ideally would use helper method in test base class or utility/helper class
|
||
import static org.assertj.core.api.Assertions.assertThat; | ||
|
||
public final class CurrencyUnitSchemaSerializerTest { |
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.
We need to remove or rewrite this test: it must NOT include cross-module dependency for tests because this now introduces a build/release dependency between modules.
There are ways to test schema-generation aspects (to ensure that correct schema traversal methods are called), I'd need to find examples.
Well, jackson-databind
has couple of tests under src/test/java/com/fasterxml/jackson/databind/jsonschema/
which might be helpful.
|
||
final String content = "{\"amount\":29.95}"; | ||
|
||
final JsonProcessingException exception = assertThrows( |
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.
While technically correct, use of JsonProcessingException
is not optimal as we should check specific subtype that is being thrown, JPE is the most generic Jackson exception base class.
|
||
<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?
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
.
<scope>test</scope> | ||
</dependency> | ||
<dependency> | ||
<groupId>com.fasterxml.jackson.module</groupId> |
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.
As per my earlier note, cannot have this dependency -- adds unwanted cross-module dependency for builds, release process.
<scope>test</scope> | ||
</dependency> | ||
<dependency> | ||
<groupId>com.kjetland</groupId> |
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.
This dependency OTOH is fine (as it's not part of Jackson module set -- and even if it had transitive dependencies to some Jackson components that'd be ok as it wouldn't complicate build/release process)
} | ||
|
||
@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
)
|
||
@Override | ||
@SuppressWarnings("deprecation") | ||
public Version version() { |
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.
This is unnecessarily using VersionUtil
instead of referencing generated PackageVersion
and doing
public Version version() {
return PackageVersion.VERSION;
}
@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. |
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