diff options
Diffstat (limited to 'services/services-engine/src/main/java/org')
2 files changed, 126 insertions, 48 deletions
diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java index 2b15b145f..3b20d3d68 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java @@ -21,6 +21,7 @@ package org.onap.policy.apex.service.engine.main; import java.util.Arrays; +import java.util.Base64; import java.util.Map.Entry; import org.onap.policy.apex.model.basicmodel.concepts.ApexException; @@ -77,15 +78,18 @@ public class ApexMain { return; } + // Set incoming Java properties + setJavaProperties(parameters); + // Set the name of the event handler parameters for producers and consumers for (final Entry<String, EventHandlerParameters> ehParameterEntry : parameters.getEventOutputParameters() - .entrySet()) { + .entrySet()) { if (!ehParameterEntry.getValue().checkSetName()) { ehParameterEntry.getValue().setName(ehParameterEntry.getKey()); } } for (final Entry<String, EventHandlerParameters> ehParameterEntry : parameters.getEventInputParameters() - .entrySet()) { + .entrySet()) { if (!ehParameterEntry.getValue().checkSetName()) { ehParameterEntry.getValue().setName(ehParameterEntry.getKey()); } @@ -128,8 +132,8 @@ public class ApexMain { } /** - * The Class ApexMainShutdownHookClass terminates the Apex engine for the Apex service when its - * run method is called. + * The Class ApexMainShutdownHookClass terminates the Apex engine for the Apex service when its run method is + * called. */ private class ApexMainShutdownHookClass extends Thread { /* @@ -149,6 +153,31 @@ public class ApexMain { } /** + * Set the Java properties specified in the parameters. + * + * @param parameters The incoming parameters + */ + private void setJavaProperties(final ApexParameters parameters) { + if (!parameters.checkJavaPropertiesSet()) { + return; + } + + // Set each Java property + for (String[] javaProperty : parameters.getJavaProperties()) { + String javaPropertyName = javaProperty[0]; + String javaPropertyValue = javaProperty[1]; + + // Passwords are encoded using base64, better than sending passwords in the clear + if (javaPropertyName.toLowerCase().contains("password")) { + javaPropertyValue = new String(Base64.getDecoder().decode(javaPropertyValue.getBytes())); + } + + // Set the Java property + System.setProperty(javaPropertyName, javaPropertyValue); + } + } + + /** * The main method. * * @param args the arguments diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/ApexParameters.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/ApexParameters.java index 4bbc5fc85..07cf7811e 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/ApexParameters.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/ApexParameters.java @@ -20,6 +20,7 @@ package org.onap.policy.apex.service.parameters; +import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; @@ -33,6 +34,7 @@ import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerPeeredMo import org.onap.policy.common.parameters.GroupValidationResult; import org.onap.policy.common.parameters.ParameterGroup; import org.onap.policy.common.parameters.ValidationStatus; +import org.onap.policy.common.utils.validation.ParameterValidationUtils; /** * The main container parameter class for an Apex service. @@ -50,11 +52,15 @@ public class ApexParameters implements ParameterGroup { private String name; // Constants for recurring strings + private static final String JAVA_PROPERTIES = "javaProperties"; private static final String PEER_STRING = "peer "; private static final String EVENT_INPUT_PARAMETERS_STRING = "eventInputParameters"; private static final String EVENT_OUTPUT_PARAMETERS_STRING = "eventOutputParameters"; private static final String FOR_PEERED_MODE_STRING = " for peered mode "; + // Properties for the Java JVM + private String[][] javaProperties = null; + // Parameters for the engine service and the engine threads in the engine service private EngineServiceParameters engineServiceParameters; @@ -138,13 +144,33 @@ public class ApexParameters implements ParameterGroup { this.name = name; } + /** + * Check if Java properties have been specified. + * + * @return true if Java properties have been specified + */ + public boolean checkJavaPropertiesSet() { + return javaProperties != null && javaProperties.length > 0; + } + + /** + * Gets the Java properties that have been specified. + * + * @return the Java properties that have been specified + */ + public String[][] getJavaProperties() { + return javaProperties; + } + @Override public GroupValidationResult validate() { GroupValidationResult result = new GroupValidationResult(this); + validateJavaProperties(result); + if (engineServiceParameters == null) { result.setResult("engineServiceParameters", ValidationStatus.INVALID, - "engine service parameters are not specified"); + "engine service parameters are not specified"); } else { result.setResult("engineServiceParameters", engineServiceParameters.validate()); } @@ -152,12 +178,12 @@ public class ApexParameters implements ParameterGroup { // Sanity check, we must have an entry in both output and input maps if (eventInputParameters.isEmpty()) { result.setResult(EVENT_INPUT_PARAMETERS_STRING, ValidationStatus.INVALID, - "at least one event input must be specified"); + "at least one event input must be specified"); } if (eventOutputParameters.isEmpty()) { result.setResult(EVENT_OUTPUT_PARAMETERS_STRING, ValidationStatus.INVALID, - "at least one event output must be specified"); + "at least one event output must be specified"); } // Validate that the values of all parameters are ok @@ -175,6 +201,37 @@ public class ApexParameters implements ParameterGroup { } /** + * This method validates the java properties variable if it is present. + * + * @param result the result of the validation + */ + private void validateJavaProperties(GroupValidationResult result) { + if (javaProperties == null) { + return; + } + + StringBuilder errorMessageBuilder = new StringBuilder(); + for (String[] javaProperty : javaProperties) { + if (javaProperty == null) { + errorMessageBuilder.append("java properties array entry is null\n"); + } else if (javaProperty.length != 2) { + errorMessageBuilder.append("java properties array entries must have one key and one value: " + + Arrays.deepToString(javaProperty) + "\n"); + } else if (!ParameterValidationUtils.validateStringParameter(javaProperty[0])) { + errorMessageBuilder + .append("java properties key is null or blank: " + Arrays.deepToString(javaProperty) + "\n"); + } else if (!ParameterValidationUtils.validateStringParameter(javaProperty[1])) { + errorMessageBuilder + .append("java properties value is null or blank: " + Arrays.deepToString(javaProperty) + "\n"); + } + } + + if (errorMessageBuilder.length() > 0) { + result.setResult(JAVA_PROPERTIES, ValidationStatus.INVALID, errorMessageBuilder.toString()); + } + } + + /** * This method validates the parameters in an event handler map. * * @param eventHandlerType the type of the event handler to use on error messages @@ -182,15 +239,15 @@ public class ApexParameters implements ParameterGroup { * @param parsForValidation The event handler parameters to validate (input or output) */ private void validateEventHandlerMap(final String eventHandlerType, final GroupValidationResult result, - final Map<String, EventHandlerParameters> parsForValidation) { + final Map<String, EventHandlerParameters> parsForValidation) { for (final Entry<String, EventHandlerParameters> parameterEntry : parsForValidation.entrySet()) { if (parameterEntry.getKey() == null || parameterEntry.getKey().trim().isEmpty()) { result.setResult(eventHandlerType, parameterEntry.getKey(), ValidationStatus.INVALID, - "invalid " + eventHandlerType + " name \"" + parameterEntry.getKey() + "\""); + "invalid " + eventHandlerType + " name \"" + parameterEntry.getKey() + "\""); } else if (parameterEntry.getValue() == null) { result.setResult(eventHandlerType, parameterEntry.getKey(), ValidationStatus.INVALID, - "invalid/Null event input prameters specified for " + eventHandlerType + " name \"" - + parameterEntry.getKey() + "\" "); + "invalid/Null event input prameters specified for " + eventHandlerType + " name \"" + + parameterEntry.getKey() + "\" "); } else { result.setResult(eventHandlerType, parameterEntry.getKey(), parameterEntry.getValue().validate()); } @@ -213,30 +270,28 @@ public class ApexParameters implements ParameterGroup { * @param peeredMode The mode to check */ private void validatePeeredModeParameters(final String eventHandlerType, final GroupValidationResult result, - final Entry<String, EventHandlerParameters> parameterEntry, - final EventHandlerPeeredMode peeredMode) { + final Entry<String, EventHandlerParameters> parameterEntry, final EventHandlerPeeredMode peeredMode) { final String messagePreamble = "specified peered mode \"" + peeredMode + "\""; final String peer = parameterEntry.getValue().getPeer(peeredMode); if (parameterEntry.getValue().isPeeredMode(peeredMode)) { if (peer == null || peer.trim().isEmpty()) { result.setResult(eventHandlerType, parameterEntry.getKey(), ValidationStatus.INVALID, - messagePreamble + " mandatory parameter not specified or is null"); + messagePreamble + " mandatory parameter not specified or is null"); } if (parameterEntry.getValue().getPeerTimeout(peeredMode) < 0) { - result.setResult(eventHandlerType, parameterEntry.getKey(), ValidationStatus.INVALID, messagePreamble - + " timeout value \"" + parameterEntry.getValue().getPeerTimeout(peeredMode) - + "\" is illegal, specify a non-negative timeout value in milliseconds"); + result.setResult(eventHandlerType, parameterEntry.getKey(), ValidationStatus.INVALID, + messagePreamble + " timeout value \"" + parameterEntry.getValue().getPeerTimeout(peeredMode) + + "\" is illegal, specify a non-negative timeout value in milliseconds"); } } else { if (peer != null) { result.setResult(eventHandlerType, parameterEntry.getKey(), ValidationStatus.INVALID, messagePreamble - + " peer is illegal on " + eventHandlerType + " \"" + parameterEntry.getKey() + "\" "); + + " peer is illegal on " + eventHandlerType + " \"" + parameterEntry.getKey() + "\" "); } if (parameterEntry.getValue().getPeerTimeout(peeredMode) != 0) { - result.setResult(eventHandlerType, parameterEntry.getKey(), ValidationStatus.INVALID, - messagePreamble + " timeout is illegal on " + eventHandlerType + " \"" - + parameterEntry.getKey() + "\""); + result.setResult(eventHandlerType, parameterEntry.getKey(), ValidationStatus.INVALID, messagePreamble + + " timeout is illegal on " + eventHandlerType + " \"" + parameterEntry.getKey() + "\""); } } } @@ -266,9 +321,9 @@ public class ApexParameters implements ParameterGroup { // Validate the parameters for each side of the peered mode parameters validatePeeredModePeers(EVENT_INPUT_PARAMETERS_STRING, result, peeredMode, inputParametersUsingMode, - outputParametersUsingMode); + outputParametersUsingMode); validatePeeredModePeers(EVENT_OUTPUT_PARAMETERS_STRING, result, peeredMode, outputParametersUsingMode, - inputParametersUsingMode); + inputParametersUsingMode); } /** @@ -280,9 +335,8 @@ public class ApexParameters implements ParameterGroup { * @param rightModeParameters The mode parameters being referenced by the checked parameters */ private void validatePeeredModePeers(final String handlerMapVariableName, final GroupValidationResult result, - final EventHandlerPeeredMode peeredMode, - final Map<String, EventHandlerParameters> leftModeParameterMap, - final Map<String, EventHandlerParameters> rightModeParameterMap) { + final EventHandlerPeeredMode peeredMode, final Map<String, EventHandlerParameters> leftModeParameterMap, + final Map<String, EventHandlerParameters> rightModeParameterMap) { // These sets are used to check for duplicate references on the both sides final Set<String> leftCheckDuplicateSet = new HashSet<>(); @@ -299,9 +353,8 @@ public class ApexParameters implements ParameterGroup { // Check that the peer reference is OK if (rightModeParameters == null) { result.setResult(handlerMapVariableName, leftModeParameterEntry.getKey(), ValidationStatus.INVALID, - PEER_STRING + '"' + leftModeParameters.getPeer(peeredMode) + FOR_PEERED_MODE_STRING - + peeredMode - + " does not exist or is not defined with the same peered mode"); + PEER_STRING + '"' + leftModeParameters.getPeer(peeredMode) + FOR_PEERED_MODE_STRING + peeredMode + + " does not exist or is not defined with the same peered mode"); continue; } @@ -309,36 +362,32 @@ public class ApexParameters implements ParameterGroup { final String rightSidePeer = rightModeParameters.getPeer(peeredMode); if (!rightSidePeer.equals(leftModeParameterEntry.getKey())) { result.setResult(handlerMapVariableName, leftModeParameterEntry.getKey(), ValidationStatus.INVALID, - PEER_STRING + '"' + leftModeParameters.getPeer(peeredMode) + FOR_PEERED_MODE_STRING - + peeredMode + ", value \"" + rightSidePeer + "\" on peer \"" - + leftSidePeer + "\" does not equal event handler \"" - + leftModeParameterEntry.getKey() + "\""); + PEER_STRING + '"' + leftModeParameters.getPeer(peeredMode) + FOR_PEERED_MODE_STRING + peeredMode + + ", value \"" + rightSidePeer + "\" on peer \"" + leftSidePeer + + "\" does not equal event handler \"" + leftModeParameterEntry.getKey() + "\""); } else { // Check for duplicates if (!leftCheckDuplicateSet.add(leftSidePeer)) { result.setResult(handlerMapVariableName, leftModeParameterEntry.getKey(), ValidationStatus.INVALID, - PEER_STRING + '"' + leftModeParameters.getPeer(peeredMode) + FOR_PEERED_MODE_STRING - + peeredMode + ", peer value \"" + leftSidePeer - + "\" on event handler \"" + leftModeParameterEntry.getKey() - + "\" is used more than once"); + PEER_STRING + '"' + leftModeParameters.getPeer(peeredMode) + FOR_PEERED_MODE_STRING + peeredMode + + ", peer value \"" + leftSidePeer + "\" on event handler \"" + + leftModeParameterEntry.getKey() + "\" is used more than once"); } if (!rightCheckDuplicateSet.add(rightSidePeer)) { result.setResult(handlerMapVariableName, leftModeParameterEntry.getKey(), ValidationStatus.INVALID, - PEER_STRING + '"' + leftModeParameters.getPeer(peeredMode) + FOR_PEERED_MODE_STRING - + peeredMode + ", peer value \"" + rightSidePeer + "\" on peer \"" - + leftSidePeer + "\" on event handler \"" - + leftModeParameterEntry.getKey() + "\" is used more than once"); + PEER_STRING + '"' + leftModeParameters.getPeer(peeredMode) + FOR_PEERED_MODE_STRING + peeredMode + + ", peer value \"" + rightSidePeer + "\" on peer \"" + leftSidePeer + + "\" on event handler \"" + leftModeParameterEntry.getKey() + "\" is used more than once"); } } if (!crossCheckPeeredTimeoutValues(leftModeParameters, rightModeParameters, peeredMode)) { result.setResult(handlerMapVariableName, leftModeParameterEntry.getKey(), ValidationStatus.INVALID, - PEER_STRING + '"' + leftModeParameters.getPeer(peeredMode) + FOR_PEERED_MODE_STRING - + peeredMode + " timeout " - + leftModeParameters.getPeerTimeout(peeredMode) + " on event handler \"" - + leftModeParameters.getName() + "\" does not equal timeout " - + rightModeParameters.getPeerTimeout(peeredMode) - + " on event handler \"" + rightModeParameters.getName() + "\""); + PEER_STRING + '"' + leftModeParameters.getPeer(peeredMode) + FOR_PEERED_MODE_STRING + peeredMode + + " timeout " + leftModeParameters.getPeerTimeout(peeredMode) + " on event handler \"" + + leftModeParameters.getName() + "\" does not equal timeout " + + rightModeParameters.getPeerTimeout(peeredMode) + " on event handler \"" + + rightModeParameters.getName() + "\""); } } @@ -352,7 +401,7 @@ public class ApexParameters implements ParameterGroup { * @return true if the timeout values are cross checked as being OK */ private boolean crossCheckPeeredTimeoutValues(final EventHandlerParameters leftModeParameters, - final EventHandlerParameters rightModeParameters, final EventHandlerPeeredMode peeredMode) { + final EventHandlerParameters rightModeParameters, final EventHandlerPeeredMode peeredMode) { // Cross-set the timeouts if they are not specified if (leftModeParameters.getPeerTimeout(peeredMode) != 0) { if (rightModeParameters.getPeerTimeout(peeredMode) != 0) { |