Skip to content
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

Fix handling of ObjectId-property in JsonIdentityInfo for uniform deserialization #3868

Merged
merged 17 commits into from
Jun 13, 2023

Conversation

JooHyukKim
Copy link
Member

Description

@cowtowncoder
Copy link
Member

Thank you for providing this @JooHyukKim ! I hope to find time to review it; looks straight-forward enough.

@JooHyukKim
Copy link
Member Author

JooHyukKim commented Apr 8, 2023

Thank you for providing this @JooHyukKim ! I hope to find time to review it; looks straight-forward enough.

🙏🏼🙏🏼. But regards to backward compatibility, would it be okay to throw an error for setter-based deserialization of empty JSON object?

// [databind#3838]: Uniform handling of missing objectId
if (_objectIdReader != null) {
// check if there are any properties present in the JSON object
if (!p.hasCurrentToken() || p.getCurrentToken() == JsonToken.END_OBJECT) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually... no, I don't think this is right. Where does this logic come from? Is it based on similar pattern somewhere, or just trying to see if it resolves specific failing test case?

Copy link
Member Author

@JooHyukKim JooHyukKim Apr 8, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@cowtowncoder. I did refer to AbstractDeserializer's handling(below code) of object id, but I added p.getCurrentToken() == JsonToken.END_OBJECT to check the value to read is actually empty JSON object.

    @Override
    public Object deserializeWithType(JsonParser p, DeserializationContext ctxt,
            TypeDeserializer typeDeserializer)
        throws IOException
    {
        // Hmmh. One tricky question; for scalar, is it an Object Id, or "Natural" type?
        // for now, prefer Object Id:
        if (_objectIdReader != null) {
            JsonToken t = p.currentToken();
            if (t != null) {
        ...

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually... no, I don't think this is right.

May I ask what makes you think that? 👀 I can assume maybe because current solution covers too many cases or too early in deserialization cases. 🤔

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@JooHyukKim Let me try to go back to code -- maybe I am confused.
There are 2 parts to Object Id handling basically -- inclusion of Object Id as part of JSON Object (additional property); and then Object Id Reference (either scalar id or, in very limited cases, single-propert Object). So I want to make sure I understand which parts are being processed.

I'll add another note wrt timing/

@cowtowncoder
Copy link
Member

Ok: due to timing -- I REALLY want to close out 2.15.0, and need to publish -rc3 -- I will not include this PR in 2.15.0 just to reduce risk. I will try to review & give feedback, but change itself most likely needs to go in 2.16. That gives us more time to make sure changes align with architecture & overall design.

@JooHyukKim
Copy link
Member Author

Ok: due to timing -- I REALLY want to close out 2.15.0, and need to publish -rc3 -- I will not include this PR in 2.15.0 just to reduce risk. I will try to review & give feedback, but change itself most likely needs to go in 2.16. That gives us more time to make sure changes align with architecture & overall design.

I will also try to look for references regarding architecture & overall design. Please let me know if there is any that you recommend. Thank you! 🙏🏼

commit 63a7b1d
Merge: 559cd04 3140bb7
Author: Tatu Saloranta <[email protected]>
Date:   Thu May 18 16:47:22 2023 -0700

    Merge branch '2.15' into 2.16

commit 3140bb7
Merge: 4e1c9be 9f80462
Author: Tatu Saloranta <[email protected]>
Date:   Thu May 18 16:46:48 2023 -0700

    Merge branch '2.15' of github.com:FasterXML/jackson-databind into 2.15

commit 559cd04
Merge: f083348 4e1c9be
Author: Tatu Saloranta <[email protected]>
Date:   Thu May 18 16:45:27 2023 -0700

    Merge branch '2.15' into 2.16

commit 9f80462
Author: Tatu Saloranta <[email protected]>
Date:   Thu May 18 16:44:56 2023 -0700

    Fix FasterXML#3938: do not skip Method-based setters on Records (FasterXML#3939)

commit 4e1c9be
Merge: 3168975 c524e6b
Author: Tatu Saloranta <[email protected]>
Date:   Thu May 18 15:54:01 2023 -0700

    Merge branch '2.14' into 2.15

commit c524e6b
Author: Tatu Saloranta <[email protected]>
Date:   Thu May 18 15:53:45 2023 -0700

    Fix FasterXML#3938 to repro actual issue

commit 3168975
Merge: 3291911 04d7ae4
Author: Tatu Saloranta <[email protected]>
Date:   Thu May 18 15:18:36 2023 -0700

    Merge branch '2.14' into 2.15

commit 04d7ae4
Author: Tatu Saloranta <[email protected]>
Date:   Thu May 18 15:13:41 2023 -0700

    Add passing test (in 2.14) for FasterXML#3938

commit f083348
Merge: 6091c4b 3291911
Author: Tatu Saloranta <[email protected]>
Date:   Tue May 16 14:53:20 2023 -0700

    Merge branch '2.15' into 2.16

commit 3291911
Author: Tatu Saloranta <[email protected]>
Date:   Tue May 16 14:49:51 2023 -0700

    Back to snapshot dep

commit 05472ae
Author: Tatu Saloranta <[email protected]>
Date:   Tue May 16 14:47:37 2023 -0700

    [maven-release-plugin] prepare for next development iteration

commit 6e37325
Author: Tatu Saloranta <[email protected]>
Date:   Tue May 16 14:47:34 2023 -0700

    [maven-release-plugin] prepare release jackson-databind-2.15.1

commit 3d9dd34
Author: Tatu Saloranta <[email protected]>
Date:   Tue May 16 14:34:13 2023 -0700

    2.15.1 release

commit 6091c4b
Merge: d2ae3a2 55d87cf
Author: Tatu Saloranta <[email protected]>
Date:   Tue May 16 12:38:57 2023 -0700

    Merge branch '2.15' into 2.16

commit 55d87cf
Merge: a7e17ad c7b6c64
Author: Tatu Saloranta <[email protected]>
Date:   Tue May 16 12:38:24 2023 -0700

    Merge branch '2.14' into 2.15

commit c7b6c64
Author: Tatu Saloranta <[email protected]>
Date:   Tue May 16 12:35:44 2023 -0700

    Fix FasterXML#3882 (JsonNode.withArray() fail)

commit d2ae3a2
Author: Tatu Saloranta <[email protected]>
Date:   Mon May 15 21:06:11 2023 -0700

    manual merge of pom.xml (test) change

commit 7ddce07
Merge: a3bb1b9 a7e17ad
Author: Tatu Saloranta <[email protected]>
Date:   Mon May 15 21:02:46 2023 -0700

    Merge branch '2.15' into 2.16

commit a7e17ad
Author: Tatu Saloranta <[email protected]>
Date:   Mon May 15 21:01:49 2023 -0700

    Add Junit 5 test dependency

commit a3bb1b9
Merge: a3b231c 8a8ba5a
Author: Tatu Saloranta <[email protected]>
Date:   Mon May 15 18:13:22 2023 -0700

    Merge branch '2.15' into 2.16

commit 8a8ba5a
Author: Kim, Joo Hyuk <[email protected]>
Date:   Tue May 16 10:13:07 2023 +0900

    Update JavaDoc of JsonAppend. (FasterXML#3933)

commit a3b231c
Author: Tatu Saloranta <[email protected]>
Date:   Mon May 15 15:38:40 2023 -0700

    Update release notes wrt FasterXML#3928

commit 40c9739
Author: PJ Fanning <[email protected]>
Date:   Mon May 15 23:32:27 2023 +0100

    Json property affects Record field serialization order (FasterXML#3929)

commit 8fcf9ef
Merge: e9db4b3 e5bdcfb
Author: Tatu Saloranta <[email protected]>
Date:   Sun May 14 17:08:35 2023 -0700

    Merge branch '2.15' into 2.16

commit e5bdcfb
Author: Kim, Joo Hyuk <[email protected]>
Date:   Mon May 15 09:06:35 2023 +0900

    Remove hard-coded `StreamReadConstraints` test variables to isolate change in `jackson-core` itself (FasterXML#3930)

commit e9db4b3
Author: Piotr Findeisen <[email protected]>
Date:   Mon May 15 02:04:42 2023 +0200

    Fix typo in USE_GETTERS_AS_SETTERS description (FasterXML#3931)

commit d8d4cb6
Author: Tatu Saloranta <[email protected]>
Date:   Sat May 13 20:15:45 2023 -0700

    Sync tests wrt error messages

commit c1b4aad
Merge: 67103c2 6f81a4e
Author: Tatu Saloranta <[email protected]>
Date:   Sat May 13 20:04:42 2023 -0700

    Merge branch '2.15' into 2.16

commit 6f81a4e
Author: Tatu Saloranta <[email protected]>
Date:   Sat May 13 20:02:20 2023 -0700

    Minor change to align with higher max string value length limit

commit 67103c2
Author: Tatu Saloranta <[email protected]>
Date:   Sat May 6 09:44:18 2023 -0700

    Clean up attic...

commit cfe8e97
Author: Muhammad Khalikov <[email protected]>
Date:   Sat May 6 12:43:35 2023 -0400

    Fix a few typos in documentation (FasterXML#3919)

commit df541d3
Author: Kim, Joo Hyuk <[email protected]>
Date:   Sat May 6 12:32:13 2023 +0900

    Improve and fix JavaDocs for Jackson 2.15 (FasterXML#3917)

commit d44e014
Merge: 924152d c8c7d39
Author: Tatu Saloranta <[email protected]>
Date:   Fri May 5 09:36:27 2023 -0700

    Merge branch '2.15' into 2.16

commit c8c7d39
Merge: a7a8a80 d47d1b6
Author: Tatu Saloranta <[email protected]>
Date:   Fri May 5 09:36:21 2023 -0700

    Merge branch '2.14' into 2.15

commit d47d1b6
Author: Tatu Saloranta <[email protected]>
Date:   Fri May 5 09:34:29 2023 -0700

    Back to snapshot dep

commit 6f3d20f
Author: Tatu Saloranta <[email protected]>
Date:   Fri May 5 09:31:43 2023 -0700

    [maven-release-plugin] prepare for next development iteration

commit 8cdba21
Author: Tatu Saloranta <[email protected]>
Date:   Fri May 5 09:31:40 2023 -0700

    [maven-release-plugin] prepare release jackson-databind-2.14.3

commit 2bd50de
Author: Tatu Saloranta <[email protected]>
Date:   Fri May 5 09:09:17 2023 -0700

    Prepare for 2.14.3 release

commit 924152d
Merge: 774ddb8 a7a8a80
Author: Tatu Saloranta <[email protected]>
Date:   Thu May 4 14:00:26 2023 -0700

    Merge branch '2.15' into 2.16

commit a7a8a80
Author: Tatu Saloranta <[email protected]>
Date:   Thu May 4 14:00:13 2023 -0700

    ...

commit 774ddb8
Merge: f847745 ad308b4
Author: Tatu Saloranta <[email protected]>
Date:   Thu May 4 13:57:18 2023 -0700

    Merge branch '2.15' into 2.16

commit ad308b4
Author: Tatu Saloranta <[email protected]>
Date:   Thu May 4 13:55:48 2023 -0700

    Update release notes wrt FasterXML#3897

commit 1fa2d86
Author: Sim Yih Tsern <[email protected]>
Date:   Fri May 5 04:52:30 2023 +0800

    Record constructor with single write-only parameter should result in properties-based creator, to fix FasterXML#3897. (FasterXML#3910)

commit f847745
Merge: f3c60ed ee3b89a
Author: Tatu Saloranta <[email protected]>
Date:   Thu May 4 11:13:22 2023 -0700

    Merge branch '2.16' of github.com:FasterXML/jackson-databind into 2.16

commit f3c60ed
Merge: 23603ea 7547591
Author: Tatu Saloranta <[email protected]>
Date:   Thu May 4 11:13:15 2023 -0700

    Merge branch '2.15' into 2.16

commit 7547591
Author: Tatu Saloranta <[email protected]>
Date:   Thu May 4 11:12:53 2023 -0700

    Mark FasterXML#3895 as fixed (due to another PR/issue)

commit ee3b89a
Author: ChangYong <[email protected]>
Date:   Fri May 5 02:09:33 2023 +0900

    Fix incorrect comment (FasterXML#3916)
@cowtowncoder
Copy link
Member

This PR seems to be in bit of messed up state?

@JooHyukKim
Copy link
Member Author

JooHyukKim commented May 27, 2023

This PR seems to be in bit of messed up state?

Is it? I suppose youre refering to the force push?

image

P.S. If you still think this solution seems broken 🔗 as commented here, maybe we can just keep the test cases under failing

@cowtowncoder
Copy link
Member

@JooHyukKim Actually now diffs look good. Not sure what I was seeing earlier :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Difference in the handling of ObjectId-property in JsonIdentityInfo depending on the deserialization route
2 participants