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]


Reply via email to