From 416e01fbe91a28da0b059cb0b940e111d6ccfe71 Mon Sep 17 00:00:00 2001 From: Nick Merlo Date: Thu, 20 Jan 2022 14:54:41 -0500 Subject: [PATCH 1/2] Don't serialize non-public fields/properties for base java classes --- .../java/com/owlike/genson/reflect/VisibilityFilter.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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 089b37f5..9926cdf1 100644 --- a/genson/src/main/java/com/owlike/genson/reflect/VisibilityFilter.java +++ b/genson/src/main/java/com/owlike/genson/reflect/VisibilityFilter.java @@ -70,7 +70,14 @@ public VisibilityFilter(int... modifier) { * @return true if this member is visible according to this filter. */ public final boolean isVisible(Member member) { - return isVisible(member.getModifiers()); + Class clazz = member.getDeclaringClass(); + String className = clazz.getName(); + if(className.startsWith("java.") || className.startsWith("javax.")){ + return Modifier.isPublic(member.getModifiers()); + } + else{ + return isVisible(member.getModifiers()); + } } public final boolean isVisible(int modifiers) { From ab84f90db5fcd6c2adc7c981c3deecf6e1c55f91 Mon Sep 17 00:00:00 2001 From: Nick Merlo Date: Thu, 20 Jan 2022 14:55:45 -0500 Subject: [PATCH 2/2] Updates to compile for java 17 --- genson-scala/pom.xml | 6 ++-- genson/pom.xml | 11 +++++-- .../ASMCreatorParameterNameResolver.java | 4 +-- .../genson/JsonSerDeserSymetricTest.java | 32 +++++++++---------- pom.xml | 2 +- 5 files changed, 31 insertions(+), 24 deletions(-) diff --git a/genson-scala/pom.xml b/genson-scala/pom.xml index 28ceec34..23ac3849 100644 --- a/genson-scala/pom.xml +++ b/genson-scala/pom.xml @@ -14,8 +14,8 @@ Genson extension for Scala language - 2.11 - 2.11.11 + 2.12 + 2.12.15 @@ -49,7 +49,7 @@ org.ow2.asm asm-commons - 5.0.3 + 9.2 test diff --git a/genson/pom.xml b/genson/pom.xml index 38a320ab..01995bcc 100644 --- a/genson/pom.xml +++ b/genson/pom.xml @@ -29,7 +29,7 @@ org.ow2.asm asm-commons - 5.0.3 + 9.2 true @@ -40,6 +40,13 @@ true + + jakarta.xml.bind + jakarta.xml.bind-api + 2.3.3 + true + + org.springframework spring-core @@ -129,7 +136,7 @@ org.eclipse.jetty jetty-servlet - 8.1.8.v20121106 + 9.4.17.v20190418 test diff --git a/genson/src/main/java/com/owlike/genson/reflect/ASMCreatorParameterNameResolver.java b/genson/src/main/java/com/owlike/genson/reflect/ASMCreatorParameterNameResolver.java index 18e76144..b3131459 100644 --- a/genson/src/main/java/com/owlike/genson/reflect/ASMCreatorParameterNameResolver.java +++ b/genson/src/main/java/com/owlike/genson/reflect/ASMCreatorParameterNameResolver.java @@ -132,7 +132,7 @@ private class ClassConstructorsVisitor extends ClassVisitor { public ClassConstructorsVisitor(Class forClass, Map, String[]> ctrParameterNames, Map methodParameterNames) { - super(Opcodes.ASM5); + super(Opcodes.ASM7); this.forClass = forClass; this.ctrParameterNames = ctrParameterNames; this.methodParameterNames = methodParameterNames; @@ -161,7 +161,7 @@ private abstract class BaseMethodVisitor extends MethodVisitor { public BaseMethodVisitor(Class forClass, boolean ztatic, String desc, Map parameterNamesMap) { - super(Opcodes.ASM5); + super(Opcodes.ASM7); this.forClass = forClass; this.ztatic = ztatic; paramTypes = Type.getArgumentTypes(desc); diff --git a/genson/src/test/java/com/owlike/genson/JsonSerDeserSymetricTest.java b/genson/src/test/java/com/owlike/genson/JsonSerDeserSymetricTest.java index e6b6feb1..cfc2cad7 100644 --- a/genson/src/test/java/com/owlike/genson/JsonSerDeserSymetricTest.java +++ b/genson/src/test/java/com/owlike/genson/JsonSerDeserSymetricTest.java @@ -149,10 +149,10 @@ public void testDeserializeSerializeTweets() throws JsonParseException, JsonMapp // we first deserialize the original data and ensure that genson deserialized it exactly as // jackson - Tweet[] jacksonTweets = mapper.readValue(ClassLoader.class - .getResourceAsStream("/TWEETS.json"), Tweet[].class); - Tweet[] gensonTweets = genson.deserialize(new InputStreamReader(ClassLoader.class - .getResourceAsStream("/TWEETS.json")), Tweet[].class); + Tweet[] jacksonTweets = mapper.readValue(ClassLoader + .getSystemResourceAsStream("TWEETS.json"), Tweet[].class); + Tweet[] gensonTweets = genson.deserialize(new InputStreamReader(ClassLoader + .getSystemResourceAsStream("TWEETS.json")), Tweet[].class); assertArrayEquals(jacksonTweets, gensonTweets); // and then we serialize it and try to deserialize again and match again what was @@ -170,10 +170,10 @@ public void testDeserializeSerializeReaderShort() throws IOException { Genson genson = getGenson(); // same test as before... - Feed jacksonShortFeed = mapper.readValue(ClassLoader.class - .getResourceAsStream("/READER_SHORT.json"), Feed.class); - Feed gensonShortFeed = genson.deserialize(new InputStreamReader(ClassLoader.class - .getResourceAsStream("/READER_SHORT.json")), Feed.class); + Feed jacksonShortFeed = mapper.readValue(ClassLoader + .getSystemResourceAsStream("READER_SHORT.json"), Feed.class); + Feed gensonShortFeed = genson.deserialize(new InputStreamReader(ClassLoader + .getSystemResourceAsStream("READER_SHORT.json")), Feed.class); assertEquals(jacksonShortFeed, gensonShortFeed); String shortFeedString = genson.serialize(gensonShortFeed); gensonShortFeed = genson.deserialize(shortFeedString, Feed.class); @@ -187,10 +187,10 @@ public void testDeserializeSerializeReaderLong() throws IOException { Genson genson = getGenson(); // and again for the long reader data... - Feed jacksonLongFeed = mapper.readValue(ClassLoader.class - .getResourceAsStream("/READER_LONG.json"), Feed.class); - Feed gensonLongFeed = genson.deserialize(new InputStreamReader(ClassLoader.class - .getResourceAsStream("/READER_LONG.json")), Feed.class); + Feed jacksonLongFeed = mapper.readValue(ClassLoader + .getSystemResourceAsStream("READER_LONG.json"), Feed.class); + Feed gensonLongFeed = genson.deserialize(new InputStreamReader(ClassLoader + .getSystemResourceAsStream("READER_LONG.json")), Feed.class); assertEquals(jacksonLongFeed, gensonLongFeed); String longFeedString = genson.serialize(gensonLongFeed); gensonLongFeed = genson.deserialize(longFeedString, Feed.class); @@ -241,10 +241,10 @@ public void testSerializeDeserializeMediaContent() throws JsonParseException, JsonMappingException, IOException { ObjectMapper mapper = new ObjectMapper(); Genson genson = new Genson(); - MediaContent jacksonContent = mapper.readValue(ClassLoader.class - .getResourceAsStream("/MEDIA_CONTENT.json"), MediaContent.class); - MediaContent gensonContent = genson.deserialize(new InputStreamReader(ClassLoader.class - .getResourceAsStream("/MEDIA_CONTENT.json")), MediaContent.class); + MediaContent jacksonContent = mapper.readValue(ClassLoader + .getSystemResourceAsStream("MEDIA_CONTENT.json"), MediaContent.class); + MediaContent gensonContent = genson.deserialize(new InputStreamReader(ClassLoader + .getSystemResourceAsStream("MEDIA_CONTENT.json")), MediaContent.class); assertEquals(jacksonContent, gensonContent); String json = genson.serialize(gensonContent); gensonContent = genson.deserialize(json, MediaContent.class); diff --git a/pom.xml b/pom.xml index 89525720..8f83278e 100644 --- a/pom.xml +++ b/pom.xml @@ -58,7 +58,7 @@ -Xdoclint:none - 1.8 + 17