took your PR and enhanced on top of it.

Plz review!

txs and LieGrue,
strub

> Am 10.04.2022 um 20:08 schrieb Romain Manni-Bucau <rmannibu...@gmail.com>:
> 
> Created https://github.com/apache/johnzon/pull/83 to try to share what I
> meant and try to solve it to enable the release (note I did it a bit in a
> hurry, the coming weeks are quite busy for me - so happy to get a second
> pair of eyes + optionally somebody running the jsonb tck)
> 
> Romain Manni-Bucau
> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> <https://rmannibucau.metawerx.net/> | Old Blog
> <http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
> <https://www.packtpub.com/application-development/java-ee-8-high-performance>
> 
> 
> Le dim. 10 avr. 2022 à 18:42, Romain Manni-Bucau <rmannibu...@gmail.com> a
> écrit :
> 
>> 
>> 
>> Le dim. 10 avr. 2022 à 17:34, Mark Struberg <strub...@yahoo.de.invalid> a
>> écrit :
>> 
>>> Oki will re-introduce that ct.
>>> Should then be backward compat, isn't?
>>> 
>> 
>> If the modifier check is there back yep
>> 
>> 
>>> LieGrue,
>>> strub
>>> 
>>> 
>>>> Am 10.04.2022 um 17:24 schrieb Romain Manni-Bucau <
>>> rmannibu...@gmail.com>:
>>>> 
>>>> Le dim. 10 avr. 2022 à 17:16, Mark Struberg <strub...@yahoo.de.invalid>
>>> a
>>>> écrit :
>>>> 
>>>>> Actually there is not much diff. There is one ct which was only used in
>>>>> JsonbAccessMode as true. Everywhere else it was feed as false.
>>>>> Now we could keep this flag and feed it as default if you really like.
>>>>> That should be rather easy to do if you think it's necessary. But
>>> still I'd
>>>>> mark that 4param ct as @Deprecated. Wdyt?
>>>>> 
>>>> 
>>>> Well it is used by users writing custom access mode quite often so we
>>> must
>>>> keep it and its associated behavior as a minimum for coming release.
>>>> No issue to make an abstract class with more children to keep it
>>> simpler in
>>>> the code but please dont break it.
>>>> 
>>>> 
>>>>> LieGrue,
>>>>> strub
>>>>> 
>>>>>> Am 10.04.2022 um 16:24 schrieb Romain Manni-Bucau <
>>> rmannibu...@gmail.com
>>>>>> :
>>>>>> 
>>>>>> Hi Mark,
>>>>>> 
>>>>>> If I read the diff correctly we still have some breaking change in
>>>>>> FieldAndMethodAccessMode
>>>>>> constructor/behavior? Can we get it fixed?
>>>>>> In terms of design, jsonb access mode was originally thought as
>>>>> delegating
>>>>>> the research of the writers/readers to a 3rd party access mode and
>>> just
>>>>>> refilter on top of it with jsonb rules.
>>>>>> Now it is kind of mixed in the code (inheritance + composition vs just
>>>>>> composition), the reason it was not done was to avoid to expose the
>>>>> default
>>>>>> delegate access mode when a 4rd party access mode was using and mix
>>> them
>>>>> in
>>>>>> the jsonbaccess mode, not 100% sure if we want to keep the original
>>>>> design
>>>>>> there or not but mentionning it since it now prevent us to change it
>>>>> later.
>>>>>> 
>>>>>> Overall except the missing constructor it looks ok to me, happy to get
>>>>>> thoughts on the access mode pattern too.
>>>>>> 
>>>>>> Romain Manni-Bucau
>>>>>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>>>>>> <https://rmannibucau.metawerx.net/> | Old Blog
>>>>>> <http://rmannibucau.wordpress.com> | Github <
>>>>> https://github.com/rmannibucau> |
>>>>>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
>>>>>> <
>>>>> 
>>> https://www.packtpub.com/application-development/java-ee-8-high-performance
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> Le sam. 9 avr. 2022 à 23:49, Mark Struberg <strub...@yahoo.de.invalid>
>>> a
>>>>>> écrit :
>>>>>> 
>>>>>>> here we go. plz take a look!
>>>>>>> 
>>>>>>> https://github.com/struberg/johnzon/tree/JOHNZON-364 <
>>>>>>> https://github.com/struberg/johnzon/tree/JOHNZON-364>
>>>>>>> 
>>>>>>> txs and LieGrue,
>>>>>>> strub
>>>>>>> 
>>>>>>> 
>>>>>>>> Am 09.04.2022 um 23:14 schrieb Mark Struberg
>>> <strub...@yahoo.de.INVALID
>>>>>>>> :
>>>>>>>> 
>>>>>>>> Looked at your proposed solution, but it might be tricky to get it
>>>>>>> working. The problem is that we have two modules: mapper and jsonb.
>>> And
>>>>> in
>>>>>>> JOHNZON-250 we added a logic to the mapper module which is ONLY
>>> defined
>>>>> and
>>>>>>> useful in Jsonb. This is the alwaysPreferMethodVisibility in
>>>>>>> org.apache.johnzon.mapper.access.FieldAndMethodAccessMode. This
>>> actually
>>>>>>> did break the mapper. Sorry that I did not catch this earlier.
>>>>>>>> 
>>>>>>>> Note that the FieldAndMethodAccessMode is only used if no other
>>>>>>> AccessMode is configured. There is also a JsonbAccessMode which
>>>>> delegates
>>>>>>> through to the accessMode of the Mapper. Normally means the
>>>>>>> FieldAndMethodAccessMode, but could be different.
>>>>>>>> We could implement the logic in JsonbAccessMode, totally ditching
>>> the
>>>>>>> accessMode coming from the Mapper. Also thought about having the
>>>>>>> JsonbAccessMode extending the FieldAndMethodAccessMode and adding the
>>>>>>> handling as parameter over there. still not really perfect imo.
>>>>>>>> 
>>>>>>>> Will try to ship a patch proposal tomorrow.
>>>>>>>> 
>>>>>>>> LieGrue,
>>>>>>>> strub
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>>> Am 28.03.2022 um 10:22 schrieb Romain Manni-Bucau <
>>>>>>> rmannibu...@gmail.com>:
>>>>>>>>> 
>>>>>>>>> Le lun. 28 mars 2022 à 10:05, Mark Struberg
>>> <strub...@yahoo.de.invalid
>>>>>>> <mailto:strub...@yahoo.de.invalid>> a
>>>>>>>>> écrit :
>>>>>>>>> 
>>>>>>>>>> +1 for getting rid of java.beans.
>>>>>>>>>> 
>>>>>>>>>> I've created a spec ticket for the open questions:
>>>>>>>>>> https://github.com/eclipse-ee4j/jsonb-api/issues/325 <
>>>>>>>>>> https://github.com/eclipse-ee4j/jsonb-api/issues/325>
>>>>>>>>>> 
>>>>>>>>>> My point is: until my fix we clearly did break 4.6. And class
>>>>>>> hierarchies
>>>>>>>>>> are totally not portable right now anyway. Introducing  It's just
>>>>> badly
>>>>>>>>>> underspecified.
>>>>>>>>>> So I do not see why the current implementation does make it worse.
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> Well this one is easy to answer: it changes the behavior and breaks
>>>>>>> users
>>>>>>>>> so it is not an option for a patch version and to be honest the
>>>>> proposed
>>>>>>>>> fix solves it for both cases so think we should tackle it this
>>> way, at
>>>>>>>>> least for now until the spec clarifies it any other way.
>>>>>>>>> Once again, the source of the issue is more that we lack an
>>>>> integration
>>>>>>>>> between mapper and jsonb modules than anything else and this
>>>>> integration
>>>>>>>>> had kind of been done but broke mapper so think we should fix it
>>> back,
>>>>>>> just
>>>>>>>>> costs us a constructor we could have avoided without this issue
>>> AFAIK
>>>>> so
>>>>>>>>> not a big deal, no?
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> LieGrue,
>>>>>>>>>> strub
>>>>>>>>>> 
>>>>>>>>>>> Am 21.03.2022 um 09:52 schrieb Romain Manni-Bucau <
>>>>>>> rmannibu...@gmail.com
>>>>>>>>>>> :
>>>>>>>>>>> 
>>>>>>>>>>> Hi,
>>>>>>>>>>> 
>>>>>>>>>>> From what we discussed on this issue, the thing is that our jsonb
>>>>>>> access
>>>>>>>>>>> mode does not enable the visibility to see all readers/writers
>>> cause
>>>>>>>>>> there
>>>>>>>>>>> is some hardcoded filtering in the delegates so I think the
>>> trick is
>>>>>>> to
>>>>>>>>>>> simply add a toggle to the delegates access modes we use to not
>>> have
>>>>>>> this
>>>>>>>>>>> filtering and 100% rely on the visibility filtering in
>>> jsonbaccess
>>>>>>> mode
>>>>>>>>>> we
>>>>>>>>>>> already have in place.
>>>>>>>>>>> 
>>>>>>>>>>> Before the release we must also ensure getters computation cache
>>> is
>>>>>>>>>> cleaned
>>>>>>>>>>> up after the ClassMapping is created - we don't want to keep
>>> that in
>>>>>>>>>> memory
>>>>>>>>>>> at runtime and not sure we can clean up at another time since we
>>>>> don't
>>>>>>>>>> want
>>>>>>>>>>> a background thread for that.
>>>>>>>>>>> I also think it is not worth to depends on java.beans
>>> (java.desktop
>>>>>>>>>> module)
>>>>>>>>>>> so we would reimpl decapitalize as we already did somewhere else
>>> (it
>>>>>>> is
>>>>>>>>>> one
>>>>>>>>>>> liner anyway ;)).
>>>>>>>>>>> Lastly, FieldAndMethodAccessMode constructor compatibility must
>>> be
>>>>>>>>>> restored
>>>>>>>>>>> (it is part of our API and used), default should stay 1-1 but as
>>>>>>>>>> mentionned
>>>>>>>>>>> I'd add a new toggle (with a constructor calling "this" to keep
>>> the
>>>>>>>>>>> backward compat) to ignore the filtering.
>>>>>>>>>>> 
>>>>>>>>>>> Sounds like this way we solve all issues and can release.
>>>>>>>>>>> 
>>>>>>>>>>> Romain Manni-Bucau
>>>>>>>>>>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>>>>>>>>>>> <https://rmannibucau.metawerx.net/> | Old Blog
>>>>>>>>>>> <http://rmannibucau.wordpress.com> | Github <
>>>>>>>>>> https://github.com/rmannibucau> |
>>>>>>>>>>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
>>>>>>>>>>> <
>>>>>>>>>> 
>>>>>>> 
>>>>> 
>>> https://www.packtpub.com/application-development/java-ee-8-high-performance
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> Le lun. 21 mars 2022 à 09:00, Mark Struberg
>>>>> <strub...@yahoo.de.invalid
>>>>>>>> 
>>>>>>>>>> a
>>>>>>>>>>> écrit :
>>>>>>>>>>> 
>>>>>>>>>>>> To sum this up:
>>>>>>>>>>>> 
>>>>>>>>>>>> The problem lies partly in the JSON-B spec. It doesn't define
>>> what
>>>>>>>>>> happens
>>>>>>>>>>>> if there are class hierarchies like class A extends B.
>>>>>>>>>>>> 
>>>>>>>>>>>> In 3.7.1 it states that
>>>>>>>>>>>> For a serialization operation, if a matching public getter
>>> method
>>>>>>>>>> exists,
>>>>>>>>>>>> the method is called to obtain the value of the property. If a
>>>>>>> matching
>>>>>>>>>>>> getter method with private, protected, or defaulted to
>>> package-only
>>>>>>>>>> access
>>>>>>>>>>>> exists, then this field is ignored. If no matching getter method
>>>>>>> exists
>>>>>>>>>> and
>>>>>>>>>>>> the field is public, then the value is obtained directly from
>>> the
>>>>>>> field.
>>>>>>>>>>>> 
>>>>>>>>>>>> This can get changed y using a @JsonbVisibility
>>>>>>>>>>>> 
>>>>>>>>>>>> 4.6 Custom visibility
>>>>>>>>>>>> To customize scope and field access strategy as specified in
>>>>> section
>>>>>>>>>>>> 3.7.1, it is possible to specify
>>>>>>>>>> javax.json.bind.annotation.JsonbVisibility
>>>>>>>>>>>> annotation or to override default behavior globally calling
>>>>>>>>>>>> JsonbConfig::withPropertyVisibilityStrategy method with given
>>>>> custom
>>>>>>>>>>>> property visibility strategy.
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> The problem is that that the PropertyVisibilityStrategy is
>>> simply
>>>>> not
>>>>>>>>>>>> ready to implement the rules of 3.7.1 in a portable way when it
>>>>>>> comes to
>>>>>>>>>>>> class hierarchies
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>> 
>>>>> 
>>> https://github.com/apache/geronimo-specs/blob/trunk/geronimo-jsonb_1.0_spec/src/main/java/javax/json/bind/config/PropertyVisibilityStrategy.java
>>>>>>>>>>>> <
>>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>> 
>>>>> 
>>> https://github.com/apache/geronimo-specs/blob/trunk/geronimo-jsonb_1.0_spec/src/main/java/javax/json/bind/config/PropertyVisibilityStrategy.java
>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> So either we say that the spec simply does not define what
>>> should
>>>>>>> happen
>>>>>>>>>>>> in case of hierarchic classes (totally valid imo) or we need to
>>>>> ditch
>>>>>>>>>> our
>>>>>>>>>>>> DefaultPropertyVisibility logic completely. It's simply not
>>>>> possible
>>>>>>> to
>>>>>>>>>>>> implement it that way.
>>>>>>>>>>>> 
>>>>>>>>>>>> The reason why I removed the logic from the Reader is the
>>>>> following:
>>>>>>>>>> Even
>>>>>>>>>>>> if the reader says 'oh there is a getter, so let's hide the
>>>>> property'
>>>>>>>>>> you
>>>>>>>>>>>> STILL are perfectly allowed - as per the spec - to have
>>> Visibility
>>>>>>>>>>>> strategies which do disable ALL methods and ONLY use field
>>> access.
>>>>>>>>>>>> That means the current impl is surely more correct than before,
>>> but
>>>>>>> not
>>>>>>>>>>>> yet perfect.
>>>>>>>>>>>> 
>>>>>>>>>>>> LieGrue,
>>>>>>>>>>>> strub
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>>> Am 28.02.2022 um 11:17 schrieb Romain Manni-Bucau <
>>>>>>>>>> rmannibu...@gmail.com
>>>>>>>>>>>>> :
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Hi JL,
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Last commit broke some stuff.
>>>>>>>>>>>>> Dicussed it quickly offline with Mark but Im AFK for a few
>>> days,
>>>>>>> can it
>>>>>>>>>>>>> wait some days? Otherwise maybe just pick this commit?
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Le lun. 28 févr. 2022 à 10:37, Jean-Louis Monteiro <
>>>>>>>>>>>> jlmonte...@tomitribe.com>
>>>>>>>>>>>>> a écrit :
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Hi all,
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Is it ok to release a 1.2.17?
>>>>>>>>>>>>>> I'm looking for a Jakarta EE fix -
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>> 
>>>>> 
>>> https://github.com/apache/johnzon/commit/a1c53d99c3280cbfc35b369ac4ce138e12f1d5ff
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Do you guys have some additional fixes to push?
>>>>>>>>>>>>>> --
>>>>>>>>>>>>>> Jean-Louis Monteiro
>>>>>>>>>>>>>> http://twitter.com/jlouismonteiro
>>>>>>>>>>>>>> http://www.tomitribe.com
>>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>> 
>>>>> 
>>> 
>>> 

Reply via email to