You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hop.apache.org by ha...@apache.org on 2021/09/29 11:23:24 UTC

[incubator-hop] branch master updated: HOP-3321 - Kafka producer unhandled ArrayIndexOutOfBoundsException

This is an automated email from the ASF dual-hosted git repository.

hansva pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-hop.git


The following commit(s) were added to refs/heads/master by this push:
     new 357346a  HOP-3321 - Kafka producer unhandled ArrayIndexOutOfBoundsException
     new d60dd00  Merge pull request #1092 from sramazzina/HOP-3321
357346a is described below

commit 357346a7e13f11d90bf8e4c58d27e588f8256a62
Author: sergio.ramazzina <se...@serasoft.it>
AuthorDate: Wed Sep 29 12:54:25 2021 +0200

    HOP-3321 - Kafka producer unhandled ArrayIndexOutOfBoundsException
---
 .../kafka/producer/KafkaProducerOutputDialog.java  | 62 ++++++++++++++++++++++
 .../producer/messages/messages_en_US.properties    |  8 +++
 .../producer/messages/messages_it_IT.properties    | 20 ++++---
 3 files changed, 84 insertions(+), 6 deletions(-)

diff --git a/plugins/transforms/kafka/src/main/java/org/apache/hop/pipeline/transforms/kafka/producer/KafkaProducerOutputDialog.java b/plugins/transforms/kafka/src/main/java/org/apache/hop/pipeline/transforms/kafka/producer/KafkaProducerOutputDialog.java
index a7f0180..f5bcd1c 100644
--- a/plugins/transforms/kafka/src/main/java/org/apache/hop/pipeline/transforms/kafka/producer/KafkaProducerOutputDialog.java
+++ b/plugins/transforms/kafka/src/main/java/org/apache/hop/pipeline/transforms/kafka/producer/KafkaProducerOutputDialog.java
@@ -20,6 +20,9 @@ package org.apache.hop.pipeline.transforms.kafka.producer;
 import com.google.common.collect.ImmutableMap;
 import org.apache.hop.core.Const;
 import org.apache.hop.core.Props;
+import org.apache.hop.core.exception.HopTransformException;
+import org.apache.hop.core.row.IRowMeta;
+import org.apache.hop.core.util.Utils;
 import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.pipeline.PipelineMeta;
@@ -28,6 +31,7 @@ import org.apache.hop.pipeline.transform.ITransformDialog;
 import org.apache.hop.pipeline.transforms.kafka.shared.KafkaDialogHelper;
 import org.apache.hop.pipeline.transforms.kafka.shared.KafkaFactory;
 import org.apache.hop.ui.core.dialog.BaseDialog;
+import org.apache.hop.ui.core.dialog.ErrorDialog;
 import org.apache.hop.ui.core.widget.ColumnInfo;
 import org.apache.hop.ui.core.widget.ComboVar;
 import org.apache.hop.ui.core.widget.TableView;
@@ -417,6 +421,27 @@ public class KafkaProducerOutputDialog extends BaseTransformDialog implements IT
     populateOptionsData();
   }
 
+  private boolean checkIfFieldExists(String fieldName) {
+    boolean fieldFound = false;
+    try {
+      IRowMeta r = pipelineMeta.getPrevTransformFields(variables, transformName);
+      String[] fieldNames = r.getFieldNames();
+      for (int count = 0; count < fieldNames.length; count++) {
+        if (fieldName.equals(fieldNames[count])) {
+          fieldFound = true;
+          break;
+        }
+      }
+    } catch (HopTransformException ke) {
+      new ErrorDialog(
+          shell,
+          BaseMessages.getString(PKG, "KafkaProducerOutputDialog.FailedToGetFields.DialogTitle"),
+          BaseMessages.getString(PKG, "KafkaProducerOutputDialog.FailedToGetFields.DialogMessage"),
+          ke);
+    }
+    return fieldFound;
+  }
+
   private void cancel() {
     meta.setChanged(false);
     dispose();
@@ -424,10 +449,47 @@ public class KafkaProducerOutputDialog extends BaseTransformDialog implements IT
 
   private void ok() {
     transformName = wTransformName.getText();
+
+    if (Utils.isEmpty(wBootstrapServers.getText())) {
+      MessageBox mb = new MessageBox(shell, SWT.OK | SWT.ICON_ERROR);
+      mb.setMessage(
+              BaseMessages.getString(PKG, "KafkaProducerOutputDialog.BootstrapServerMandatory.Message"));
+      mb.setText(BaseMessages.getString(PKG, "KafkaProducerOutputDialog.FieldNotExists.Title"));
+      mb.open();
+      return;
+    }
+
     meta.setDirectBootstrapServers(wBootstrapServers.getText());
     meta.setClientId(wClientId.getText());
     meta.setTopic(wTopic.getText());
+    if (!Utils.isEmpty(wKeyField.getText()) && !checkIfFieldExists(wKeyField.getText())) {
+      MessageBox mb = new MessageBox(shell, SWT.OK | SWT.ICON_ERROR);
+      mb.setMessage(
+              BaseMessages.getString(PKG, "KafkaProducerOutputDialog.KeyFieldNotExists.Message", wKeyField.getText()));
+      mb.setText(BaseMessages.getString(PKG, "KafkaProducerOutputDialog.FieldNotExists.Title"));
+      mb.open();
+      return;
+    }
+
     meta.setKeyField(wKeyField.getText());
+    if (Utils.isEmpty(wMessageField.getText())) {
+      MessageBox mb = new MessageBox(shell, SWT.OK | SWT.ICON_ERROR);
+      mb.setMessage(
+              BaseMessages.getString(PKG, "KafkaProducerOutputDialog.MessageFieldMandatory.Message"));
+      mb.setText(BaseMessages.getString(PKG, "KafkaProducerOutputDialog.FieldNotExists.Title"));
+      mb.open();
+      return;
+    }
+
+    if (!checkIfFieldExists(wMessageField.getText())) {
+      MessageBox mb = new MessageBox(shell, SWT.OK | SWT.ICON_ERROR);
+      mb.setMessage(
+          BaseMessages.getString(PKG, "KafkaProducerOutputDialog.MessageFieldNotExists.Message", wMessageField.getText()));
+      mb.setText(BaseMessages.getString(PKG, "KafkaProducerOutputDialog.FieldNotExists.Title"));
+      mb.open();
+      return;
+    }
+
     meta.setMessageField(wMessageField.getText());
     meta.setConfig(KafkaDialogHelper.getConfig(optionsTable));
     dispose();
diff --git a/plugins/transforms/kafka/src/main/resources/org/apache/hop/pipeline/transforms/kafka/producer/messages/messages_en_US.properties b/plugins/transforms/kafka/src/main/resources/org/apache/hop/pipeline/transforms/kafka/producer/messages/messages_en_US.properties
index 5c4d374..930b81a 100644
--- a/plugins/transforms/kafka/src/main/resources/org/apache/hop/pipeline/transforms/kafka/producer/messages/messages_en_US.properties
+++ b/plugins/transforms/kafka/src/main/resources/org/apache/hop/pipeline/transforms/kafka/producer/messages/messages_en_US.properties
@@ -38,3 +38,11 @@ KafkaProducerOutputMeta.Injection.CONFIGURATION_PROPERTIES=The Kafka producer co
 KafkaProducerOutputMeta.Injection.NAMES=The name(s) of the Kafka producer configuration properties.
 KafkaProducerOutputMeta.Injection.VALUES=The value(s) of the Kafka producer configuration properties.
 KafkaConsumerOutput.Log.LineNumber=Linenr {0}
+KafkaProducerOutputDialog.FailedToGetFields.DialogTitle=Field not present
+KafkaProducerOutputDialog.FailedToGetFields.DialogMessage=Unable to get fields from previous transforms because of an error
+
+KafkaProducerOutputDialog.FieldNotExists.Title=Error
+KafkaProducerOutputDialog.KeyFieldNotExists.Message=Field ''{0}'' containing key value is not present in input stream
+KafkaProducerOutputDialog.MessageFieldNotExists.Message=Field ''{0}'' containing message value is not present in input stream
+KafkaProducerOutputDialog.MessageFieldMandatory.Message=Field containing message value is mandatory!
+KafkaProducerOutputDialog.BootstrapServerMandatory.Message=''Bootstrap servers'' field''s value is mandatory!
diff --git a/plugins/transforms/kafka/src/main/resources/org/apache/hop/pipeline/transforms/kafka/producer/messages/messages_it_IT.properties b/plugins/transforms/kafka/src/main/resources/org/apache/hop/pipeline/transforms/kafka/producer/messages/messages_it_IT.properties
index 5c4d374..ed0c8b8 100644
--- a/plugins/transforms/kafka/src/main/resources/org/apache/hop/pipeline/transforms/kafka/producer/messages/messages_it_IT.properties
+++ b/plugins/transforms/kafka/src/main/resources/org/apache/hop/pipeline/transforms/kafka/producer/messages/messages_it_IT.properties
@@ -15,18 +15,18 @@
 # limitations under the License.
 #
 KafkaProducer.TypeLongDesc=Kafka Producer
-KafkaProducer.TypeTooltipDesc=Sends messages to a Kafka producer for a certain topic
+KafkaProducer.TypeTooltipDesc=Invia messaggi ad un producer Kafka per un topic specifico
 KafkaProducerOutputDialog.TransformName.Label=Transform name\:
 KafkaProducerOutputDialog.Shell.Title=Kafka producer
 KafkaProducerOutputDialog.ClientId=Client ID\:
 KafkaProducerOutputDialog.Topic=Topic\:
-KafkaProducerOutputDialog.KeyField=Key field\:
-KafkaProducerOutputDialog.MessageField=Message field\:
+KafkaProducerOutputDialog.KeyField=Campo con chiave\:
+KafkaProducerOutputDialog.MessageField=Campo con messaggio\:
 KafkaProducerOutputDialog.SetupTab=Setup
 KafkaProducerOutputDialog.BootstrapServers=Bootstrap servers:
-KafkaProducerOutputDialog.Options.Tab=Options
-KafkaProducerOutputDialog.Options.Column.Name=Name
-KafkaProducerOutputDialog.Options.Column.Value=Value
+KafkaProducerOutputDialog.Options.Tab=Opzioni
+KafkaProducerOutputDialog.Options.Column.Name=Nome
+KafkaProducerOutputDialog.Options.Column.Value=Valore
 KafkaProducerOutputMeta.Injection.CLUSTER_NAME=The cluster containing the Kafka connections details.
 KafkaProducerOutputMeta.Injection.CLIENT_ID=The ID used to identify and track requests made to the server.
 KafkaProducerOutputMeta.Injection.TOPIC=The name of the topic to publish to.
@@ -38,3 +38,11 @@ KafkaProducerOutputMeta.Injection.CONFIGURATION_PROPERTIES=The Kafka producer co
 KafkaProducerOutputMeta.Injection.NAMES=The name(s) of the Kafka producer configuration properties.
 KafkaProducerOutputMeta.Injection.VALUES=The value(s) of the Kafka producer configuration properties.
 KafkaConsumerOutput.Log.LineNumber=Linenr {0}
+KafkaProducerOutputDialog.FailedToGetFields.DialogTitle=Campo non presente
+KafkaProducerOutputDialog.FailedToGetFields.DialogMessage=Impossibile prelevare i campi dai transforms precedenti a causa di un errore
+
+KafkaProducerOutputDialog.FieldNotExists.Title=Errore
+KafkaProducerOutputDialog.KeyFieldNotExists.Message=Il campo ''{0}'' contenete il valore della chiave non \uE008 stato trovato leggendo dai transforms precedenti
+KafkaProducerOutputDialog.MessageFieldNotExists.Message=Il campo ''{0}'' contenete il valore del messaggio non \uE008 stato trovato leggendo dai transforms precedenti
+KafkaProducerOutputDialog.MessageFieldMandatory.Message=Il campo contenente il valore del messaggio \uE008 obbligatorio!
+KafkaProducerOutputDialog.BootstrapServerMandatory.Message=Il valore del campo ''Bootstrap servers'' \uE008 obbligatorio!