This is an automated email from the ASF dual-hosted git repository.
lzljs3620320 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink-table-store.git
The following commit(s) were added to refs/heads/master by this push:
new b5c73257 [hotfix] FileFormat.fromIdentifier should search FileFormat
ClassLoader too
b5c73257 is described below
commit b5c73257e8c2ad6735dba9e475e44850de5a7397
Author: JingsongLi <[email protected]>
AuthorDate: Wed Jul 6 20:45:09 2022 +0800
[hotfix] FileFormat.fromIdentifier should search FileFormat ClassLoader too
---
.../flink/table/store/format/FileFormat.java | 28 ++++++++++++++++------
1 file changed, 21 insertions(+), 7 deletions(-)
diff --git
a/flink-table-store-common/src/main/java/org/apache/flink/table/store/format/FileFormat.java
b/flink-table-store-common/src/main/java/org/apache/flink/table/store/format/FileFormat.java
index 8bfcd2dd..98fd4103 100644
---
a/flink-table-store-common/src/main/java/org/apache/flink/table/store/format/FileFormat.java
+++
b/flink-table-store-common/src/main/java/org/apache/flink/table/store/format/FileFormat.java
@@ -91,17 +91,31 @@ public abstract class FileFormat {
}
/** Create a {@link FileFormat} from format identifier and format options.
*/
- public static FileFormat fromIdentifier(String formatIdentifier,
Configuration formatOptions) {
+ public static FileFormat fromIdentifier(String identifier, Configuration
options) {
+ Optional<FileFormat> format =
+ fromIdentifier(identifier, options,
Thread.currentThread().getContextClassLoader());
+ return format.orElseGet(
+ () ->
+ fromIdentifier(identifier, options,
FileFormat.class.getClassLoader())
+ .orElseThrow(
+ () ->
+ new ValidationException(
+ String.format(
+ "Could not
find any factories that implement '%s' in the classpath.",
+
FileFormatFactory.class
+
.getName()))));
+ }
+
+ private static Optional<FileFormat> fromIdentifier(
+ String formatIdentifier, Configuration formatOptions, ClassLoader
classLoader) {
ServiceLoader<FileFormatFactory> serviceLoader =
- ServiceLoader.load(FileFormatFactory.class);
+ ServiceLoader.load(FileFormatFactory.class,
FileFormat.class.getClassLoader());
for (FileFormatFactory factory : serviceLoader) {
if (factory.identifier().equals(formatIdentifier.toLowerCase())) {
- return factory.create(formatOptions);
+ return Optional.of(factory.create(formatOptions));
}
}
- throw new ValidationException(
- String.format(
- "Could not find any factories that implement '%s' in
the classpath.",
- FileFormatFactory.class.getName()));
+
+ return Optional.empty();
}
}