reta opened a new pull request #73:
URL: https://github.com/apache/johnzon/pull/73
Since JEP-396 [1] integration into JDK16, the JDK internals become much less
accessible. `Johnzon` uses `setAccessible` in several places to relax the
visibility rules but it now throws `InaccessibleObjectException` on JDK16 and
above (for a number of JDK classes). For example, we run into following issues
with Apache CXF while running JSON-B tests on JDK16/JDK17:
```
java.lang.reflect.InaccessibleObjectException: Unable to make field private
int java.util.ArrayList.size accessible: module java.base does not "opens
java.util" to unnamed module @567d299b
at
java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:357)
at
java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at
java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:177)
at java.base/java.lang.reflect.Field.setAccessible(Field.java:171)
at
org.apache.johnzon.mapper.access.FieldAccessMode$FieldDecoratedType.<init>(FieldAccessMode.java:105)
at
org.apache.johnzon.mapper.access.FieldAccessMode$FieldReader.<init>(FieldAccessMode.java:169)
at
org.apache.johnzon.mapper.access.FieldAccessMode.doFindReaders(FieldAccessMode.java:49)
at
org.apache.johnzon.mapper.access.BaseAccessMode.findReaders(BaseAccessMode.java:82)
at
org.apache.johnzon.mapper.access.FieldAndMethodAccessMode.doFindReaders(FieldAndMethodAccessMode.java:68)
at
org.apache.johnzon.mapper.access.BaseAccessMode.findReaders(BaseAccessMode.java:82)
at
org.apache.johnzon.jsonb.JsonbAccessMode.findReaders(JsonbAccessMode.java:468)
at
org.apache.johnzon.mapper.Mappings.createClassMapping(Mappings.java:475)
at
org.apache.johnzon.mapper.Mappings.doFindOrCreateClassMapping(Mappings.java:437)
at
org.apache.johnzon.mapper.Mappings.findOrCreateClassMapping(Mappings.java:411)
at
org.apache.johnzon.mapper.Mapper.isDeduplicateObjects(Mapper.java:215)
at
org.apache.johnzon.mapper.Mapper.writeObjectWithGenerator(Mapper.java:209)
at org.apache.johnzon.mapper.Mapper.writeObject(Mapper.java:203)
at org.apache.johnzon.mapper.Mapper.writeObject(Mapper.java:230)
```
The suggested fix in this PR is to ignore the properties which are not
accessible anymore (basically when `setAccessible` ends up with
`InaccessibleObjectException` exception). Alternatively, it is still possible
to use `--add-opens java.base/java.util=ALL-UNNAMED` but arguably this not
considered acceptable.
[1] https://openjdk.java.net/jeps/396
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]