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 2022/05/30 17:32:05 UTC
[hop] branch master updated: HOP-3965 RuleExecutor & RuleAccumulator: enhance error messages in case rules validation fails
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/hop.git
The following commit(s) were added to refs/heads/master by this push:
new 202ce47c30 HOP-3965 RuleExecutor & RuleAccumulator: enhance error messages in case rules validation fails
new 553ff25a53 Merge pull request #1511 from sramazzina/HOP-3965
202ce47c30 is described below
commit 202ce47c3019b5e3dd5fa4903e268320c130a3b4
Author: Sergio Ramazzina <se...@serasoft.it>
AuthorDate: Mon May 30 14:56:20 2022 +0200
HOP-3965 RuleExecutor & RuleAccumulator: enhance error messages in case rules validation fails
---
.../transforms/drools/RuleValidationException.java | 48 ++++++++++++++++++++++
.../hop/pipeline/transforms/drools/Rules.java | 8 ++--
.../transforms/drools/RulesAccumulator.java | 14 ++++++-
.../transforms/drools/RulesAccumulatorData.java | 5 +--
.../pipeline/transforms/drools/RulesExecutor.java | 16 ++++++--
.../transforms/drools/RulesExecutorData.java | 5 +--
6 files changed, 81 insertions(+), 15 deletions(-)
diff --git a/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RuleValidationException.java b/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RuleValidationException.java
new file mode 100644
index 0000000000..7f65870d74
--- /dev/null
+++ b/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RuleValidationException.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hop.pipeline.transforms.drools;
+
+import org.kie.api.builder.Message;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class RuleValidationException extends Exception {
+
+ List<String> messages;
+
+ /**
+ * Constructs a new throwable with the specified set of detail messages.
+ *
+ * @param messages the detailed messages (which is saved for later retrieval by the getMessages()
+ * method).
+ */
+ public RuleValidationException(List<Message> messages) {
+ super();
+ this.messages = new ArrayList<String>();
+ for (Message item : messages) {
+
+ this.messages.add("Severity: " + item.getLevel().toString() +
+ " - Line: " + item.getLine() + " - Message: " + item.getText());
+ }
+ }
+
+ public List<String> getMessages() {
+ return messages;
+ }
+}
diff --git a/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/Rules.java b/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/Rules.java
index bbe08fe031..a7ff3ae08e 100644
--- a/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/Rules.java
+++ b/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/Rules.java
@@ -25,7 +25,7 @@ public class Rules {
public static class Row {
private Map<String, Object> row;
- private Boolean external;
+ private boolean external;
public Row() {
this( new Hashtable<String, Object>(), false );
@@ -64,7 +64,7 @@ public class Rules {
private Object payload;
- private Boolean external;
+ private boolean external;
public Column() {
this.external = false;
@@ -112,11 +112,11 @@ public class Rules {
this.payload = payload;
}
- public void setExternalSource( Boolean external ) {
+ public void setExternalSource( boolean external ) {
this.external = external;
}
- public Boolean isExternalSource() {
+ public boolean isExternalSource() {
return external;
}
}
diff --git a/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesAccumulator.java b/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesAccumulator.java
index 702d3fe991..9014d43067 100644
--- a/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesAccumulator.java
+++ b/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesAccumulator.java
@@ -20,13 +20,14 @@ package org.apache.hop.pipeline.transforms.drools;
import org.apache.hop.core.exception.HopException;
import org.apache.hop.core.exception.HopTransformException;
+import org.apache.hop.i18n.BaseMessages;
import org.apache.hop.pipeline.Pipeline;
import org.apache.hop.pipeline.PipelineMeta;
import org.apache.hop.pipeline.transform.BaseTransform;
import org.apache.hop.pipeline.transform.TransformMeta;
public class RulesAccumulator extends BaseTransform<RulesAccumulatorMeta, RulesAccumulatorData> {
- // private static Class<?> PKG = Rules.class; // for i18n purposes
+ private static Class<?> PKG = Rules.class; // for i18n purposes
public RulesAccumulator(
TransformMeta transformMeta,
@@ -55,7 +56,16 @@ public class RulesAccumulator extends BaseTransform<RulesAccumulatorMeta, Rules
data.setRuleFilePath( meta.getRuleFile() );
data.setRuleString( meta.getRuleDefinition() );
- data.initializeRules();
+
+ try {
+ data.initializeRules();
+ } catch (RuleValidationException e) {
+
+ for (String message : e.getMessages()) {
+ log.logError(message);
+ }
+ throw new HopTransformException(BaseMessages.getString(PKG, "RulesData.Error.CompileDRL"));
+ }
data.initializeInput( getInputRowMeta() );
return true;
diff --git a/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesAccumulatorData.java b/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesAccumulatorData.java
index 12fb0c0293..5779dda843 100644
--- a/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesAccumulatorData.java
+++ b/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesAccumulatorData.java
@@ -75,7 +75,7 @@ public class RulesAccumulatorData extends BaseTransformData implements ITransfor
return outputRowMeta;
}
- public void initializeRules() {
+ public void initializeRules() throws RuleValidationException {
// To ensure the plugin classloader use for dependency resolution
ClassLoader orig = Thread.currentThread().getContextClassLoader();
@@ -95,8 +95,7 @@ public class RulesAccumulatorData extends BaseTransformData implements ITransfor
Results results1 = kieHelper.verify();
if (results1.hasMessages(Message.Level.ERROR)) {
- System.out.println(results1.getMessages());
- throw new RuntimeException(BaseMessages.getString(PKG, "RulesData.Error.CompileDRL"));
+ throw new RuleValidationException(results1.getMessages());
}
// reset classloader back to original
diff --git a/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesExecutor.java b/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesExecutor.java
index a50c38338b..e8ff29adb9 100644
--- a/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesExecutor.java
+++ b/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesExecutor.java
@@ -19,6 +19,7 @@ package org.apache.hop.pipeline.transforms.drools;
import org.apache.hop.core.exception.HopException;
import org.apache.hop.core.exception.HopTransformException;
+import org.apache.hop.i18n.BaseMessages;
import org.apache.hop.pipeline.Pipeline;
import org.apache.hop.pipeline.PipelineMeta;
import org.apache.hop.pipeline.transform.BaseTransform;
@@ -26,9 +27,8 @@ import org.apache.hop.pipeline.transform.TransformMeta;
import java.util.Arrays;
-
public class RulesExecutor extends BaseTransform<RulesExecutorMeta, RulesExecutorData> {
- // private static Class<?> PKG = Rules.class; // for i18n purposes
+ private static Class<?> PKG = Rules.class; // for i18n purposes
public RulesExecutor(
TransformMeta transformMeta,
@@ -55,7 +55,16 @@ public class RulesExecutor extends BaseTransform<RulesExecutorMeta, RulesExecuto
data.setRuleFilePath(meta.getRuleFile());
data.setRuleString(meta.getRuleDefinition());
- data.initializeRules();
+ try {
+ data.initializeRules();
+ } catch (RuleValidationException e) {
+
+ for (String message : e.getMessages()) {
+ log.logError(message);
+ }
+ throw new HopTransformException(BaseMessages.getString(PKG, "RulesData.Error.CompileDRL"));
+ }
+
data.initializeColumns(getInputRowMeta());
return true;
@@ -76,6 +85,7 @@ public class RulesExecutor extends BaseTransform<RulesExecutorMeta, RulesExecuto
}
if (first) {
+
if (!runtimeInit()) {
return false;
}
diff --git a/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesExecutorData.java b/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesExecutorData.java
index 8600b473c8..b6ae2d4961 100644
--- a/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesExecutorData.java
+++ b/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesExecutorData.java
@@ -77,7 +77,7 @@ public class RulesExecutorData extends BaseTransformData implements ITransformDa
}
- public void initializeRules() {
+ public void initializeRules() throws RuleValidationException {
// To ensure the plugin classloader use for dependency resolution
ClassLoader orig = Thread.currentThread().getContextClassLoader();
@@ -97,8 +97,7 @@ public class RulesExecutorData extends BaseTransformData implements ITransformDa
Results results1 = kieHelper.verify();
if (results1.hasMessages(Message.Level.ERROR)) {
- System.out.println(results1.getMessages());
- throw new RuntimeException(BaseMessages.getString(PKG, "RulesData.Error.CompileDRL"));
+ throw new RuleValidationException(results1.getMessages());
}
// reset classloader back to original