From a65e4772f4557a109917532b2d9c49680ce3bb15 Mon Sep 17 00:00:00 2001 From: liamfallon Date: Fri, 14 Sep 2018 16:45:06 +0100 Subject: Fix exception not logged or rethrown Eclipse sonarlint does not check for exception dropping by default, it must be configured. This commit addresses exception dropping in apex. Change-Id: I406838990b3424c2912124b25d7326502cacc96c Issue-ID: POLICY-1034 Signed-off-by: liamfallon --- .../apex/model/contextmodel/concepts/AxContextAlbum.java | 7 +++---- .../apex/model/contextmodel/concepts/AxContextSchema.java | 8 ++++---- .../apex/model/enginemodel/concepts/TestEngineStats.java | 13 +++++++++---- .../policy/apex/model/policymodel/concepts/AxLogic.java | 8 ++++---- .../policy/apex/model/policymodel/concepts/AxPolicy.java | 13 ++++++++++--- .../org/onap/policy/apex/model/utilities/Assertions.java | 15 +++++++++++++-- .../apex/model/utilities/typeutils/ClassBuilder.java | 9 ++++++++- 7 files changed, 51 insertions(+), 22 deletions(-) (limited to 'model') diff --git a/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextAlbum.java b/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextAlbum.java index 564e2d48c..3d008e992 100644 --- a/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextAlbum.java +++ b/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextAlbum.java @@ -274,11 +274,10 @@ public class AxContextAlbum extends AxConcept { "scope is not defined")); } - try { - Assertions.validateStringParameter(SCOPE_STRING, scope, SCOPE_REGEXP); - } catch (final IllegalArgumentException e) { + String stringCheckResult = Assertions.getStringParameterValidationMessage(SCOPE_STRING, scope, SCOPE_REGEXP); + if (stringCheckResult != null) { result.addValidationMessage(new AxValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "scope invalid-" + e.getMessage())); + "scope invalid-" + stringCheckResult)); } if (itemSchema.equals(AxArtifactKey.getNullKey())) { diff --git a/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextSchema.java b/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextSchema.java index 5dad2e9e8..767b1d02e 100644 --- a/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextSchema.java +++ b/model/context-model/src/main/java/org/onap/policy/apex/model/contextmodel/concepts/AxContextSchema.java @@ -234,11 +234,11 @@ public class AxContextSchema extends AxConcept { "schema flavour is not defined")); } - try { - Assertions.validateStringParameter(SCHEMA_FLAVOUR, schemaFlavour, SCHEMA_FLAVOUR_REGEXP); - } catch (final IllegalArgumentException e) { + String flavourValidationResult = Assertions.getStringParameterValidationMessage(SCHEMA_FLAVOUR, schemaFlavour, + SCHEMA_FLAVOUR_REGEXP); + if (flavourValidationResult != null) { result.addValidationMessage(new AxValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "schema flavour invalid-" + e.getMessage())); + "schema flavour invalid-" + flavourValidationResult)); } if (schemaDefinition.replaceAll(WHITESPACE_REGEXP, "").length() == 0) { diff --git a/model/engine-model/src/test/java/org/onap/policy/apex/model/enginemodel/concepts/TestEngineStats.java b/model/engine-model/src/test/java/org/onap/policy/apex/model/enginemodel/concepts/TestEngineStats.java index fb99e265b..8bd5756ab 100644 --- a/model/engine-model/src/test/java/org/onap/policy/apex/model/enginemodel/concepts/TestEngineStats.java +++ b/model/engine-model/src/test/java/org/onap/policy/apex/model/enginemodel/concepts/TestEngineStats.java @@ -38,6 +38,7 @@ import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult.Validat * @author Liam Fallon (liam.fallon@ericsson.com) */ public class TestEngineStats { + private static final Object WAIT_LOCK = new Object(); @Test public void testEngineStats() { @@ -98,11 +99,15 @@ public class TestEngineStats { stats.engineStart(); stats.setEventCount(4); stats.executionEnter(new AxArtifactKey()); - try { - Thread.sleep(10); - } catch (final Exception e) { - fail("test should not throw an exeption"); + + synchronized (WAIT_LOCK) { + try { + WAIT_LOCK.wait(10); + } catch (InterruptedException e) { + fail("test should not throw an exception"); + } } + stats.executionExit(); final double avExecutionTime = stats.getAverageExecutionTime(); assertTrue(avExecutionTime >= 2.0 && avExecutionTime < 10.0); diff --git a/model/policy-model/src/main/java/org/onap/policy/apex/model/policymodel/concepts/AxLogic.java b/model/policy-model/src/main/java/org/onap/policy/apex/model/policymodel/concepts/AxLogic.java index 99642d1ae..ad86fb42c 100644 --- a/model/policy-model/src/main/java/org/onap/policy/apex/model/policymodel/concepts/AxLogic.java +++ b/model/policy-model/src/main/java/org/onap/policy/apex/model/policymodel/concepts/AxLogic.java @@ -271,11 +271,11 @@ public class AxLogic extends AxConcept { "logic flavour is not defined")); } - try { - Assertions.validateStringParameter(LOGIC_FLAVOUR_TOKEN, logicFlavour, LOGIC_FLAVOUR_REGEXP); - } catch (final IllegalArgumentException e) { + String flavourValidationString = Assertions.getStringParameterValidationMessage(LOGIC_FLAVOUR_TOKEN, + logicFlavour, LOGIC_FLAVOUR_REGEXP); + if (flavourValidationString != null) { result.addValidationMessage(new AxValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "logic flavour invalid-" + e.getMessage())); + "logic flavour invalid-" + flavourValidationString)); } if (logic.replaceAll(WHITESPACE_REGEXP, "").length() == 0) { diff --git a/model/policy-model/src/main/java/org/onap/policy/apex/model/policymodel/concepts/AxPolicy.java b/model/policy-model/src/main/java/org/onap/policy/apex/model/policymodel/concepts/AxPolicy.java index a03b49f13..3c43c6edd 100644 --- a/model/policy-model/src/main/java/org/onap/policy/apex/model/policymodel/concepts/AxPolicy.java +++ b/model/policy-model/src/main/java/org/onap/policy/apex/model/policymodel/concepts/AxPolicy.java @@ -49,6 +49,8 @@ import org.onap.policy.apex.model.basicmodel.concepts.AxValidationMessage; import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult; import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult.ValidationResult; import org.onap.policy.apex.model.utilities.Assertions; +import org.slf4j.ext.XLogger; +import org.slf4j.ext.XLoggerFactory; /** * This class holds the definition of an Apex policy. A policy is made up of a tree of states, each represented by an @@ -88,6 +90,9 @@ import org.onap.policy.apex.model.utilities.Assertions; public class AxPolicy extends AxConcept { private static final long serialVersionUID = -1775614096390365941L; + // Logger for this class + private static final XLogger LOGGER = XLoggerFactory.getXLogger(AxPolicy.class); + @EmbeddedId @XmlElement(name = "policyKey", required = true) private AxArtifactKey key; @@ -364,7 +369,7 @@ public class AxPolicy extends AxConcept { */ private AxValidationResult validateStateTree(AxValidationResult result) { try { - // Cpnstructor validates policy state tree + // Constructor validates policy state tree AxStateTree policyStateTree = getStateTree(); // Check for unused states @@ -378,8 +383,10 @@ public class AxPolicy extends AxConcept { + " is not referenced in the policy execution tree")); } } catch (PolicyRuntimeException pre) { - result.addValidationMessage(new AxValidationMessage(key, this.getClass(), ValidationResult.WARNING, - "state tree in policy is invalid")); + AxValidationMessage validationMessage = new AxValidationMessage(key, this.getClass(), + ValidationResult.WARNING, "state tree in policy is invalid"); + LOGGER.trace(validationMessage.getMessage(), pre); + result.addValidationMessage(validationMessage); } return result; diff --git a/model/utilities/src/main/java/org/onap/policy/apex/model/utilities/Assertions.java b/model/utilities/src/main/java/org/onap/policy/apex/model/utilities/Assertions.java index a3ecccebe..02a91a72c 100644 --- a/model/utilities/src/main/java/org/onap/policy/apex/model/utilities/Assertions.java +++ b/model/utilities/src/main/java/org/onap/policy/apex/model/utilities/Assertions.java @@ -20,6 +20,9 @@ package org.onap.policy.apex.model.utilities; +import org.slf4j.ext.XLogger; +import org.slf4j.ext.XLoggerFactory; + /** * The Class Assertions is a template class that is used as a shorthand for assertions in the source code. * @@ -27,6 +30,9 @@ package org.onap.policy.apex.model.utilities; * @author Liam Fallon (liam.fallon@ericsson.com) */ public final class Assertions { + // Logger for this class + private static final XLogger LOGGER = XLoggerFactory.getXLogger(Assertions.class); + /** * Private constructor used to prevent sub class instantiation. */ @@ -46,8 +52,13 @@ public final class Assertions { try { validateStringParameter(parameterName, parameterValue, pattern); } catch (IllegalArgumentException e) { - // This will cause a SONAR error but eliminates all SONAR messages in callers - return e.getMessage(); + String message = "parameter " + parameterName + " with value " + parameterValue + + " does not match regular expression " + pattern; + if (LOGGER.isTraceEnabled()) { + LOGGER.trace(message, e); + } + + return message; } return null; diff --git a/model/utilities/src/main/java/org/onap/policy/apex/model/utilities/typeutils/ClassBuilder.java b/model/utilities/src/main/java/org/onap/policy/apex/model/utilities/typeutils/ClassBuilder.java index ffebc405f..2e6e96d0b 100644 --- a/model/utilities/src/main/java/org/onap/policy/apex/model/utilities/typeutils/ClassBuilder.java +++ b/model/utilities/src/main/java/org/onap/policy/apex/model/utilities/typeutils/ClassBuilder.java @@ -24,6 +24,9 @@ import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; +import org.slf4j.ext.XLogger; +import org.slf4j.ext.XLoggerFactory; + //CHECKSTYLE:OFF: checkstyle:IllegalImport import sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl; //CHECKSTYLE:ON: checkstyle:IllegalImport @@ -38,6 +41,9 @@ import sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl; */ @SuppressWarnings("restriction") public class ClassBuilder { + // Logger for this class + private static final XLogger LOGGER = XLoggerFactory.getXLogger(ClassBuilder.class); + private final Class clazz; private final List parameters = new ArrayList<>(); @@ -62,7 +68,8 @@ public class ClassBuilder { } catch (ClassNotFoundException e) { try { return new ClassBuilder(Class.forName("java.lang." + className)); - } catch (Exception ignore) { + } catch (Exception classFindException) { + LOGGER.warn("class nout found", classFindException); throw new IllegalArgumentException("Class '" + className + "' not found. Also looked for a class called 'java.lang." + className + "'", e); } -- cgit 1.2.3-korg