diff --git a/genson/src/main/java/com/owlike/genson/reflect/VisibilityFilter.java b/genson/src/main/java/com/owlike/genson/reflect/VisibilityFilter.java index d44df6c9..b61ff35a 100644 --- a/genson/src/main/java/com/owlike/genson/reflect/VisibilityFilter.java +++ b/genson/src/main/java/com/owlike/genson/reflect/VisibilityFilter.java @@ -70,15 +70,22 @@ public VisibilityFilter(int... modifier) { * @return true if this member is visible according to this filter. */ public final boolean isVisible(Member member) { - Class clazz = member.getDeclaringClass(); - String className = clazz.getName(); - if(className.startsWith("java.") || className.startsWith("javax.")){ - if(!Modifier.isPublic(member.getModifiers())){ - return false; + boolean visible = isVisible(member.getModifiers()); + + //Due to recent changes involving reflection access to base java classes, + //we need to perform an additional check to ensure that members belonging + //to java/javax packages are public. Non-public members will always be considered not visible + if(visible){ + Class clazz = member.getDeclaringClass(); + String className = clazz.getName(); + if(className.startsWith("java.") || className.startsWith("javax.")){ + if(!Modifier.isPublic(member.getModifiers())){ + visible = false; + } } } - return isVisible(member.getModifiers()); + return visible; } public final boolean isVisible(int modifiers) {