This is an automated email from the ASF dual-hosted git repository. vernedeng pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/inlong.git
The following commit(s) were added to refs/heads/master by this push: new 786e5702d2 [INLONG-11087][SDK] Fix potential null pointer exception of transform SDK (#11088) 786e5702d2 is described below commit 786e5702d2d0c50837b49b99586caf166cea67b4 Author: vernedeng <verned...@apache.org> AuthorDate: Thu Sep 12 20:37:35 2024 +0800 [INLONG-11087][SDK] Fix potential null pointer exception of transform SDK (#11088) * [INLONG-11087][SDK] Fix potential null pointer exception of transform SDK * [INLONG-11087][SDK] Fix potential null pointer exception of transform SDK --- .../sdk/transform/process/TransformProcessor.java | 2 +- .../process/function/TranslateFunction.java | 31 +++++++++++++++------- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/TransformProcessor.java b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/TransformProcessor.java index 62e8ebf96a..05dc2437f1 100644 --- a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/TransformProcessor.java +++ b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/TransformProcessor.java @@ -167,7 +167,7 @@ public class TransformProcessor<I, O> { for (ValueParserNode node : this.selectItems) { String fieldName = node.getFieldName(); ValueParser parser = node.getParser(); - if (parser == null && StringUtils.equals(fieldName, SinkEncoder.ALL_SOURCE_FIELD_SIGN)) { + if (parser == null || StringUtils.equals(fieldName, SinkEncoder.ALL_SOURCE_FIELD_SIGN)) { if (input instanceof String) { sinkData.addField(fieldName, (String) input); } else { diff --git a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TranslateFunction.java b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TranslateFunction.java index 87920b8619..a51cbad7e4 100644 --- a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TranslateFunction.java +++ b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/TranslateFunction.java @@ -22,8 +22,10 @@ import org.apache.inlong.sdk.transform.process.Context; import org.apache.inlong.sdk.transform.process.operator.OperatorTools; import org.apache.inlong.sdk.transform.process.parser.ValueParser; +import com.google.common.collect.ImmutableMap; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.Function; +import org.apache.commons.lang3.StringUtils; import java.util.HashMap; import java.util.List; @@ -78,16 +80,9 @@ public class TranslateFunction implements ValueParser { return ""; } StringBuilder builder = null; - final int findSize = findChars == null ? 0 : findChars.length(); - final int replaceSize = replaceChars == null ? 0 : replaceChars.length(); - final int commonSize = Math.min(findSize, replaceSize); // Create a map to store character replacements - Map<Character, Character> replacementMap = new HashMap<>(); - for (int i = 0; i < commonSize; i++) { - char findChar = findChars.charAt(i); - char replaceChar = replaceChars.charAt(i); - replacementMap.put(findChar, replaceChar); - } + Map<Character, Character> replacementMap = parseReplacementMap(findChars, replaceChars); + for (int i = 0, size = originalStr.length(); i < size; i++) { char ch = originalStr.charAt(i); if (replacementMap.containsKey(ch)) { @@ -107,4 +102,22 @@ public class TranslateFunction implements ValueParser { } return builder == null ? originalStr : builder.toString(); } + + private Map<Character, Character> parseReplacementMap(String findChars, String replaceChars) { + if (StringUtils.isAnyBlank(findChars, replaceChars)) { + return ImmutableMap.of(); + } + + final int findSize = findChars == null ? 0 : findChars.length(); + final int replaceSize = replaceChars == null ? 0 : replaceChars.length(); + final int commonSize = Math.min(findSize, replaceSize); + // Create a map to store character replacements + Map<Character, Character> replacementMap = new HashMap<>(); + for (int i = 0; i < commonSize; i++) { + char findChar = findChars.charAt(i); + char replaceChar = replaceChars.charAt(i); + replacementMap.put(findChar, replaceChar); + } + return replacementMap; + } }