[ https://issues.apache.org/jira/browse/FLINK-2437?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14693133#comment-14693133 ]
ASF GitHub Bot commented on FLINK-2437: --------------------------------------- Github user mxm commented on a diff in the pull request: https://github.com/apache/flink/pull/960#discussion_r36837638 --- Diff: flink-java/src/main/java/org/apache/flink/api/java/typeutils/TypeExtractor.java --- @@ -1328,24 +1329,29 @@ else if(typeHierarchy.size() <= 1) { List<Method> methods = getAllDeclaredMethods(clazz); for (Method method : methods) { if (method.getName().equals("readObject") || method.getName().equals("writeObject")) { - LOG.info("Class "+clazz+" contains custom serialization methods we do not call."); + LOG.info(clazz+" contains custom serialization methods we do not call."); return null; } } // Try retrieving the default constructor, if it does not have one // we cannot use this because the serializer uses it. + Constructor defaultConstructor = null; try { - clazz.getDeclaredConstructor(); + defaultConstructor = clazz.getDeclaredConstructor(); } catch (NoSuchMethodException e) { if (clazz.isInterface() || Modifier.isAbstract(clazz.getModifiers())) { - LOG.info("Class " + clazz + " is abstract or an interface, having a concrete " + + LOG.info(clazz + " is abstract or an interface, having a concrete " + "type can increase performance."); } else { - LOG.info("Class " + clazz + " must have a default constructor to be used as a POJO."); + LOG.info(clazz + " must have a default constructor to be used as a POJO."); return null; } } + if(defaultConstructor != null && (defaultConstructor.getModifiers() & Modifier.PUBLIC) == 0) { --- End diff -- `if(defaultConstructor != null && Modifier.isPublic(defaultConstructor.getModifiers())` seems to be more readable to me but your approach is fine too. > TypeExtractor.analyzePojo has some problems around the default constructor > detection > ------------------------------------------------------------------------------------ > > Key: FLINK-2437 > URL: https://issues.apache.org/jira/browse/FLINK-2437 > Project: Flink > Issue Type: Bug > Components: Type Serialization System > Reporter: Gabor Gevay > Assignee: Gabor Gevay > Priority: Minor > > If a class does have a default constructor, but the user forgot to make it > public, then TypeExtractor.analyzePojo still thinks everything is OK, so it > creates a PojoTypeInfo. Then PojoSerializer.createInstance blows up. > Furthermore, a "return null" seems to be missing from the then case of the if > after catching the NoSuchMethodException which would also cause a headache > for PojoSerializer. > An additional minor issue is that the word "class" is printed twice in > several places, because class.toString also prepends it to the class name. -- This message was sent by Atlassian JIRA (v6.3.4#6332)