You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by tw...@apache.org on 2021/05/17 14:38:56 UTC
[flink] 02/02: [hotfix][table-planner-blink] Give more helpful
exception for codegen structured types
This is an automated email from the ASF dual-hosted git repository.
twalthr pushed a commit to branch release-1.13
in repository https://gitbox.apache.org/repos/asf/flink.git
commit 3f59de843063c01fa917cc94bd74cf15fbb91b7d
Author: Timo Walther <tw...@apache.org>
AuthorDate: Mon May 17 11:01:50 2021 +0200
[hotfix][table-planner-blink] Give more helpful exception for codegen structured types
---
.../table/types/extraction/ExtractionUtils.java | 2 +-
.../data/conversion/StructuredObjectConverter.java | 29 ++++++++++++++++++++--
2 files changed, 28 insertions(+), 3 deletions(-)
diff --git a/flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/extraction/ExtractionUtils.java b/flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/extraction/ExtractionUtils.java
index 32f4fa8..c4d196c 100644
--- a/flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/extraction/ExtractionUtils.java
+++ b/flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/extraction/ExtractionUtils.java
@@ -187,7 +187,7 @@ public final class ExtractionUtils {
}
}
throw extractionError(
- "Could not to find a field named '%s' in class '%s' for structured type.",
+ "Could not find a field named '%s' in class '%s' for structured type.",
fieldName, clazz.getName());
}
diff --git a/flink-table/flink-table-runtime-blink/src/main/java/org/apache/flink/table/data/conversion/StructuredObjectConverter.java b/flink-table/flink-table-runtime-blink/src/main/java/org/apache/flink/table/data/conversion/StructuredObjectConverter.java
index a1a5632..b440df0 100644
--- a/flink-table/flink-table-runtime-blink/src/main/java/org/apache/flink/table/data/conversion/StructuredObjectConverter.java
+++ b/flink-table/flink-table-runtime-blink/src/main/java/org/apache/flink/table/data/conversion/StructuredObjectConverter.java
@@ -250,7 +250,10 @@ public class StructuredObjectConverter<T> implements DataStructureConverter<RowD
// field is accessible with a getter
final Method getter =
getStructuredFieldGetter(implementationClass, field)
- .orElseThrow(IllegalStateException::new);
+ .orElseThrow(
+ () ->
+ fieldNotReadableException(
+ implementationClass, fieldName));
accessExpr = expr("external.", getter.getName(), "()");
}
accessExpr = castExpr(accessExpr, fieldClass);
@@ -264,6 +267,25 @@ public class StructuredObjectConverter<T> implements DataStructureConverter<RowD
"))");
}
+ private static IllegalStateException fieldNotReadableException(
+ Class<?> implementationClass, String fieldName) {
+ return new IllegalStateException(
+ String.format(
+ "Could not find a getter for field '%s' in class '%s'. "
+ + "Make sure that the field is readable (via public visibility or getter).",
+ fieldName, implementationClass.getName()));
+ }
+
+ private static IllegalStateException fieldNotWritableException(
+ Class<?> implementationClass, String fieldName) {
+ return new IllegalStateException(
+ String.format(
+ "Could not find a setter for field '%s' in class '%s'. "
+ + "Make sure that the field is writable (via public visibility, "
+ + "setter, or full constructor).",
+ fieldName, implementationClass.getName()));
+ }
+
private static String parameterExpr(int pos, Class<?> fieldClass) {
final String conversionExpr =
expr(
@@ -295,7 +317,10 @@ public class StructuredObjectConverter<T> implements DataStructureConverter<RowD
// field is accessible with a setter
final Method setter =
getStructuredFieldSetter(implementationClass, field)
- .orElseThrow(IllegalStateException::new);
+ .orElseThrow(
+ () ->
+ fieldNotWritableException(
+ implementationClass, fieldName));
return expr(
"structured.",
setter.getName(),