-/*-
+/*
  * ============LICENSE_START=======================================================
  * feature-active-standby-management
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
         * {@inheritDoc}
         */
        @Override
-       public void globalInit(String args[], String configDir)
+       public void globalInit(String[] args, String configDir)
        {
                // This must come first since it initializes myPdp
                initializePersistence(configDir);
                 */
                DroolsPdp existingPdp = conn.getPdp(resourceName);
                if (existingPdp != null) {
-                       System.out.println("Found existing PDP record, pdpId="
+                       logger.info("Found existing PDP record, pdpId="
                                        + existingPdp.getPdpId() + ", isDesignated="
                                        + existingPdp.isDesignated() + ", updatedDate="
                                        + existingPdp.getUpdatedDate());
 
                                myPdp = new DroolsPdpImpl(resourceName,false,4,new Date());     
                        }
-                       String site_name = ActiveStandbyProperties.getProperty(ActiveStandbyProperties.SITE_NAME);
-                       if (site_name == null) {
-                               site_name = "";
+                       String siteName = ActiveStandbyProperties.getProperty(ActiveStandbyProperties.SITE_NAME);
+                       if (siteName == null) {
+                               siteName = "";
                        }else{
-                               site_name = site_name.trim();
+                               siteName = siteName.trim();
                        }
-                       myPdp.setSiteName(site_name);
+                       myPdp.setSiteName(siteName);
                        if(electionHandler == null){
                                electionHandler = new DroolsPdpsElectionHandler(conn,myPdp);
                        }
                }
-               System.out.println("\n\nThis controller is a standby, waiting to be chosen as primary...\n\n");
                logger.info("\n\nThis controller is a standby, waiting to be chosen as primary...\n\n");
        }
 
         */
        public static DroolsPdpsConnector getDroolsPdpsConnector(String pu) {
 
-               Map<String, Object> propMap = new HashMap<String, Object>();
+               Map<String, Object> propMap = new HashMap<>();
                propMap.put("javax.persistence.jdbc.driver", ActiveStandbyProperties
                                .getProperty(ActiveStandbyProperties.DB_DRIVER));
                propMap.put("javax.persistence.jdbc.url",
 
                EntityManagerFactory emf = Persistence.createEntityManagerFactory(
                                pu, propMap);
-               DroolsPdpsConnector conn = new JpaDroolsPdpsConnector(emf);
-
-               return conn;
+               return new JpaDroolsPdpsConnector(emf);
        }
 
        /**
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * feature-active-standby-management
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
        }
        @Override
        public int comparePriority(DroolsPdp other, String previousSite){
-               if(previousSite == null || previousSite.equals("")){
+               if(previousSite == null || previousSite.isEmpty()){
                        return comparePriority(other);
                }
                if(nullSafeCompare(this.getSiteName(),other.getSiteName()) == 0){
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * feature-active-standby-management
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
+import java.util.List;
 import java.util.Timer;
 import java.util.TimerTask;
 
 
 public class DroolsPdpsElectionHandler implements ThreadRunningChecker {
        // get an instance of logger 
-       private final static Logger  logger = LoggerFactory.getLogger(DroolsPdpsElectionHandler.class); 
+       private static final Logger  logger = LoggerFactory.getLogger(DroolsPdpsElectionHandler.class); 
        private DroolsPdpsConnector pdpsConnector;
        private Object checkWaitTimerLock = new Object();
        private Object designationWaiterLock = new Object();
        private StateManagementFeatureAPI stateManagementFeature;
        
        private static boolean isUnitTesting = false;
-       public static void setIsUnitTesting(boolean val){
-               isUnitTesting = val;
-       }
        private static boolean isStalled = false;
-       public static void setIsStalled(boolean val){
-               isStalled = val;
-       }
        
        public DroolsPdpsElectionHandler(DroolsPdpsConnector pdps, DroolsPdp myPdp){
                if (pdps == null) {
                }
        }
        
+       public static void setIsUnitTesting(boolean val){
+               isUnitTesting = val;
+       }
+       public static void setIsStalled(boolean val){
+               isStalled = val;
+       }
+       
        /*
         * When the JpaDroolsPdpsConnector.standDown() method is invoked, it needs
         * access to myPdp, so it can keep its designation status in sync with the
 
                                        //It is possible that multiple PDPs are designated lead.  So, we will make a list of all designated
                                        //PDPs and then decide which one really should be designated at the end.
-                                       ArrayList<DroolsPdp> listOfDesignated = new ArrayList<DroolsPdp>();
+                                       ArrayList<DroolsPdp> listOfDesignated = new ArrayList<>();
 
                                        Collection<DroolsPdp> pdps = pdpsConnector.getDroolsPdps();
                                        DroolsPdp designatedPdp = null;
                return mostRecentPrimary;
        }
        
-       public DroolsPdp computeDesignatedPdp(ArrayList<DroolsPdp> listOfDesignated, DroolsPdp mostRecentPrimary){
+       public DroolsPdp computeDesignatedPdp(List<DroolsPdp> listOfDesignated, DroolsPdp mostRecentPrimary){
                DroolsPdp designatedPdp = null;
                DroolsPdp lowestPriorityPdp = null;
                if(listOfDesignated.size() > 1){
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * feature-active-standby-management
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
                        em.getTransaction().begin();
                        Query droolsPdpsListQuery = em.createQuery("SELECT p FROM DroolsPdpEntity p");
                        List<?> droolsPdpsList = droolsPdpsListQuery.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
-                       LinkedList<DroolsPdp> droolsPdpsReturnList = new LinkedList<DroolsPdp>();
+                       LinkedList<DroolsPdp> droolsPdpsReturnList = new LinkedList<>();
                        for(Object o : droolsPdpsList){
                                if(o instanceof DroolsPdp){
                                        //Make sure it is not a cached version
         */
        private static void cleanup(EntityManager em, String method)
        {
-               if (em != null) {
-                       if (em.isOpen()) {
-                               if (em.getTransaction().isActive()) {
-                                       // there is an active EntityTransaction -- roll it back
-                                       try {
-                                               em.getTransaction().rollback();
-                                       } catch (Exception e) {
-                                               logger.error(method + ": Caught Exception attempting to rollback EntityTransaction,", e);
-                                       }
-                               }
-
-                               // now, close the EntityManager
+               if (em != null && em.isOpen()) {
+                       if (em.getTransaction().isActive()) {
+                               // there is an active EntityTransaction -- roll it back
                                try {
-                                       em.close();
+                                       em.getTransaction().rollback();
                                } catch (Exception e) {
-                                       logger.error(method + ": Caught Exception attempting to close EntityManager, ", e);
+                                       logger.error(method + ": Caught Exception attempting to rollback EntityTransaction,", e);
                                }
                        }
+
+                       // now, close the EntityManager
+                       try {
+                               em.close();
+                       } catch (Exception e) {
+                               logger.error(method + ": Caught Exception attempting to close EntityManager, ", e);
+                       }
                }
        }
 }
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * feature-active-standby-management
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
                 * has synchronize all of its methods. Only one stateManagement operation can occur at a time. Thus,
                 * only one handleStateChange() call will ever be made at a time.
                 */
-               if(logger.isInfoEnabled()){
-                       if(logger.isDebugEnabled()){
-                               logger.debug("handleStateChange: Entering, message={}, standbyStatus={}",
-                                                super.getMessage(), super.getStateManagement().getStandbyStatus());
-                       }
+               if(logger.isDebugEnabled()){
+                       logger.debug("handleStateChange: Entering, message={}, standbyStatus={}",
+                                        super.getMessage(), super.getStateManagement().getStandbyStatus());
                }
                String standbyStatus = super.getStateManagement().getStandbyStatus();
                String pdpId = ActiveStandbyProperties
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * feature-active-standby-management
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 
 package org.onap.policy.drools.activestandby;
 
+@FunctionalInterface
 public interface ThreadRunningChecker {
        public void checkThreadStatus();
 
 
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.onap.policy.common.im.StateManagement;
 import org.onap.policy.drools.activestandby.ActiveStandbyFeatureAPI;
                                
                logger.debug("testAllSeemsWell: Sleeping {} ms, to allow JpaDroolsPdpsConnector "
                                + "time to check droolspdpentity table", sleepTime);
-               Thread.sleep(sleepTime);
+               sleep(sleepTime);
                
                
                // Verify that this formerly un-designated PDP in HOT_STANDBY is now designated and providing service.
                //It takes 10x the update interval (1 sec) before the watcher will declare the election handler dead
                //and that just stops forward progress counter.  So, the fp monitor must then run to determine
                //if the fpc has stalled.  That will take about another 5 sec.
-               Thread.sleep(stalledElectionHandlerSleepTime);
+               sleep(stalledElectionHandlerSleepTime);
                
                logger.debug("testAllSeemsWell: After isStalled=true, PDP= {} "
                                + "has standbyStatus= {}", thisPdpId, smf.getStandbyStatus(thisPdpId));
                //Now lets resume the election handler
                DroolsPdpsElectionHandler.setIsStalled(false);
                
-               Thread.sleep(resumedElectionHandlerSleepTime);
+               sleep(resumedElectionHandlerSleepTime);
                
                logger.debug("testAllSeemsWell: After isStalled=false, PDP= {} "
                                + "has standbyStatus= {}", thisPdpId, smf.getStandbyStatus(thisPdpId));
                logger.debug("\n\ntestAllSeemsWell: Exiting\n\n");
 
        }
+
+       private void sleep(long sleepms) throws InterruptedException {
+               Thread.sleep(sleepms);
+       }
 }
 
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.onap.policy.common.im.AdministrativeStateException;
 import org.onap.policy.common.im.IntegrityMonitor;
                assertTrue(pmNotifier.getPreviousStandbyStatus().equals(PMStandbyStateChangeNotifier.HOTSTANDBY_OR_COLDSTANDBY));
 
                //Sleep long enough for the delayActivationTimer to run
-               Thread.sleep(5000);
+               sleep(5000);
                assertTrue(pmNotifier.getPreviousStandbyStatus().equals(StateManagement.PROVIDING_SERVICE));
 
                //standbystatus = providingservice
                logger.debug("testColdStandby: Runner started; Sleeping "
                                + interruptRecoveryTime + "ms before promoting PDP= {}",
                                thisPdpId);
-               Thread.sleep(interruptRecoveryTime);
+               sleep(interruptRecoveryTime);
 
                logger.debug("testColdStandby: Promoting PDP={}", thisPdpId);
                smf.promote();          
                logger.debug("testColdStandby: Locking smf");
                smf.lock();
                
-               Thread.sleep(interruptRecoveryTime);
+               sleep(interruptRecoveryTime);
                
                // Verify that the PDP is no longer designated.
                 
                assertTrue(droolsPdpEntity.isDesignated() == false);
                
                logger.debug("\n\ntestColdStandby: Exiting\n\n");
-               Thread.sleep(interruptRecoveryTime);
+               sleep(interruptRecoveryTime);
 
        }
 
                                
                logger.debug("testHotStandby1: Sleeping {} ms, to allow JpaDroolsPdpsConnector "
                                + "time to check droolspdpentity table", sleepTime);
-               Thread.sleep(sleepTime);
+               sleep(sleepTime);
                
                
                // Verify that this formerly un-designated PDP in HOT_STANDBY is now designated and providing service.
                //policyManagementRunner.stopRunner();          
        
                logger.debug("\n\ntestHotStandby1: Exiting\n\n");
-               Thread.sleep(interruptRecoveryTime);
+               sleep(interruptRecoveryTime);
 
        }
 
                
                logger.info("testHotStandby2: Runner started; Sleeping {} "
                                + "ms before promoting/demoting", interruptRecoveryTime);
-               Thread.sleep(interruptRecoveryTime);
+               sleep(interruptRecoveryTime);
 
                logger.info("testHotStandby2: Runner started; promoting PDP={}", activePdpId);
                //At this point, the newly created pdp will have set the state to disabled/failed/cold standby
                
                logger.info("testHotStandby2: Sleeping {} ms, to allow JpaDroolsPdpsConnector "
                                + "time to check droolspdpentity table", sleepTime);
-               Thread.sleep(sleepTime);
+               sleep(sleepTime);
                
                /*
                 * Verify that this PDP, demoted to HOT_STANDBY, is now
                //policyManagementRunner.stopRunner();          
 
                logger.info("\n\ntestHotStandby2: Exiting\n\n");
-               Thread.sleep(interruptRecoveryTime);
+               sleep(interruptRecoveryTime);
 
        }
        
                logger.debug("testLocking1: Runner started; Sleeping "
                                + interruptRecoveryTime + "ms before promoting PDP={}",
                                thisPdpId);
-               Thread.sleep(interruptRecoveryTime);
+               sleep(interruptRecoveryTime);
 
                logger.debug("testLocking1: Promoting PDP={}", thisPdpId);
                sm.promote();
                logger.debug("testLocking1: Sleeping {} ms, to allow time for "
                                + "policy-management.Main class to come up, designated= {}", 
                                 sleepTime, conn.getPdp(thisPdpId).isDesignated());
-               Thread.sleep(sleepTime);
+               sleep(sleepTime);
                
                logger.debug("testLocking1: Waking up and invoking startTransaction on active PDP={}"
                                + ", designated= {}",thisPdpId, conn.getPdp(thisPdpId).isDesignated());
                
                logger.debug("testLocking1: sleeping" + electionWaitSleepTime
                                + " to allow election handler to re-promote PDP={}", thisPdpId);
-               Thread.sleep(electionWaitSleepTime);
+               sleep(electionWaitSleepTime);
                                                                
                logger.debug("testLocking1: Invoking startTransaction on re-promoted PDP={}"
                                + ", designated={}", thisPdpId, conn.getPdp(thisPdpId).isDesignated());
                
                // Just to avoid any race conditions, sleep a little after locking
                logger.debug("testLocking1: Sleeping a few millis after locking, to avoid race condition");
-               Thread.sleep(100);
+               sleep(100);
                
                logger.debug("testLocking1: Invoking startTransaction on locked PDP= {}"
                                + ", designated= {}",thisPdpId, conn.getPdp(thisPdpId).isDesignated());
                
                // Just to avoid any race conditions, sleep a little after locking
                logger.debug("testLocking1: Sleeping a few millis after unlocking, to avoid race condition");
-               Thread.sleep(electionWaitSleepTime);
+               sleep(electionWaitSleepTime);
                
                logger.debug("testLocking1: Invoking startTransaction on unlocked PDP="
                                + thisPdpId
                
                // Just to avoid any race conditions, sleep a little after promoting
                logger.debug("testLocking1: Sleeping a few millis after demoting, to avoid race condition");
-               Thread.sleep(100);
+               sleep(100);
                
                logger.debug("testLocking1: Invoking startTransaction on demoted PDP={}"
                                + ", designated={}", thisPdpId, conn.getPdp(thisPdpId).isDesignated());
                }
                
                logger.debug("\n\ntestLocking1: Exiting\n\n");
-               Thread.sleep(interruptRecoveryTime);
+               sleep(interruptRecoveryTime);
 
        }
        
                                
                logger.debug("testLocking2: Runner started; Sleeping {} ms "
                                + "before promoting/demoting", interruptRecoveryTime);
-               Thread.sleep(interruptRecoveryTime);
+               sleep(interruptRecoveryTime);
 
                logger.debug("testLocking2: Promoting PDP= {}", thisPdpId);
                sm.promote();
                sm2.demote();
                
                logger.debug("testLocking2: Sleeping {} ms, to allow time for to come up", sleepTime);
-               Thread.sleep(sleepTime);
+               sleep(sleepTime);
                
                logger.debug("testLocking2: Waking up and invoking startTransaction on active PDP={}"
                                + ", designated= {}", thisPdpId, conn.getPdp(thisPdpId).isDesignated());
                
                logger.debug("testLocking2: sleeping {}"
                                + " to allow election handler to re-promote PDP={}", electionWaitSleepTime, thisPdpId);
-               Thread.sleep(electionWaitSleepTime);
+               sleep(electionWaitSleepTime);
                
                logger.debug("testLocking2: Waking up and invoking startTransaction "
                                + "on re-promoted PDP= {}, designated= {}",
                assertTrue(standbyPdpDesignated == false);
 
                logger.debug("\n\ntestLocking2: Exiting\n\n");
-               Thread.sleep(interruptRecoveryTime);
+               sleep(interruptRecoveryTime);
+       }
+
+       private void sleep(long sleepms) throws InterruptedException {
+               Thread.sleep(sleepms);
        }
 }
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * feature-eelf
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 public class EelfFeature implements PolicyEngineFeatureAPI {
 
        @Override
-       final public boolean beforeBoot(PolicyEngine engine, String cliArgs[]) {
+       public final boolean beforeBoot(PolicyEngine engine, String[] cliArgs) {
                
                String logback = System.getProperty(Main.LOGBACK_CONFIGURATION_FILE_SYSTEM_PROPERTY, 
                                                            Main.LOGBACK_CONFIGURATION_FILE_DEFAULT);           
                Logger logger = FlexLogger.getLogger(this.getClass(), true);
                
                if (logger.isInfoEnabled()) {
-                       logger.info("eelf-feature: Property " + Main.LOGBACK_CONFIGURATION_FILE_SYSTEM_PROPERTY + "=" + 
-                                   System.getProperty(Main.LOGBACK_CONFIGURATION_FILE_SYSTEM_PROPERTY));
-                       logger.info("eelf-feature: Property " + Configuration.PROPERTY_LOGGING_FILE_PATH + "=" + 
-                               System.getProperty(Configuration.PROPERTY_LOGGING_FILE_PATH));
-                       logger.info("eelf-feature: Property " + Configuration.PROPERTY_LOGGING_FILE_NAME + "=" + 
-                           System.getProperty(Configuration.PROPERTY_LOGGING_FILE_NAME));
+                       logProperty(logger, Main.LOGBACK_CONFIGURATION_FILE_SYSTEM_PROPERTY);
+                       logProperty(logger, Configuration.PROPERTY_LOGGING_FILE_PATH);
+                       logProperty(logger, Configuration.PROPERTY_LOGGING_FILE_NAME);
                }
                
                return false;
        }
        
+       private void logProperty(Logger logger, String propnm) {
+               logger.info("eelf-feature: Property " + propnm + "=" + System.getProperty(propnm));
+       }
+       
        @Override
        public int getSequenceNumber() {
                return 0;
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * feature-healthcheck
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * Healthcheck
  */
 public interface HealthCheck extends Startable {
+
+       /**
+        * Healthcheck Monitor
+        */
+       public static final HealthCheck monitor = new HealthCheckMonitor();
        
        /**
         * Healthcheck Report
             return details;
         }
 
-        public void setDetails(ArrayList<Report> details) {
+        public void setDetails(List<Report> details) {
             this.details = details;
         }
        }
         * @return a report
         */
        public Reports healthCheck();
-
-       /**
-        * Healthcheck Monitor
-        */
-       public static final HealthCheck monitor = new HealthCheckMonitor();
 }
 
 /**
         * {@inheritDoc}
         */
        @Override
-       public boolean start() throws IllegalStateException {
+       public boolean start() {
                
                try {
                        this.healthCheckProperties = SystemPersistence.manager.getProperties(HealthCheckFeature.CONFIGURATION_PROPERTIES_NAME);
         * {@inheritDoc}
         */
        @Override
-       public boolean stop() throws IllegalStateException {
+       public boolean stop() {
                
                for (HttpServletServer server : servers) {
                        try {
         * {@inheritDoc}
         */
        @Override
-       public void shutdown() throws IllegalStateException {
+       public void shutdown() {
                this.stop();
        }
 
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * feature-session-persistence
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 package org.onap.policy.drools.persistence;
 
 public class DroolsPersistenceProperties {
-       private DroolsPersistenceProperties() {
-       }
        /*
         * feature-session-persistence.properties parameter key values
         */
        public static final String DB_PWD = "javax.persistence.jdbc.password";
        public static final String DB_SESSIONINFO_TIMEOUT = "persistence.sessioninfo.timeout";
        public static final String JTA_OBJECTSTORE_DIR = "persistence.objectstore.dir";
+
+       private DroolsPersistenceProperties() {
+               super();
+       }
 }
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * feature-session-persistence
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
                        userTrans.begin();
                        em.joinTransaction();
 
-               } catch (RuntimeException e) {
-                       em.close();
-                       throw new EntityMgrException(e);
-
-               } catch (NotSupportedException | SystemException e) {
+               } catch (RuntimeException |NotSupportedException | SystemException e) {
                        em.close();
                        throw new EntityMgrException(e);
                }
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * feature-session-persistence
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
         * {@inheritDoc}
         */
        @Override
-       public void globalInit(String args[], String configDir) {
+       public void globalInit(String[] args, String configDir) {
 
                kieSvcFact = fact.getKieServices();
 
                                ds.close();
                        }
                }
-       }
 
-       /* ============================================================ */
+               /**
+                * Configures java system properties for JPA/JTA.
+                */
+               private void configureSysProps() {
+                       System.setProperty("com.arjuna.ats.arjuna.coordinator.defaultTimeout", "60");
+                       System.setProperty("com.arjuna.ats.arjuna.objectstore.objectStoreDir",
+                                       persistProps.getProperty(DroolsPersistenceProperties.JTA_OBJECTSTORE_DIR));
+                       System.setProperty("ObjectStoreEnvironmentBean.objectStoreDir",
+                                       persistProps.getProperty(DroolsPersistenceProperties.JTA_OBJECTSTORE_DIR));
+               }
 
-       /**
-        * Configures java system properties for JPA/JTA.
-        */
-       private void configureSysProps() {
-               System.setProperty("com.arjuna.ats.arjuna.coordinator.defaultTimeout", "60");
-               System.setProperty("com.arjuna.ats.arjuna.objectstore.objectStoreDir",
-                               persistProps.getProperty(DroolsPersistenceProperties.JTA_OBJECTSTORE_DIR));
-               System.setProperty("ObjectStoreEnvironmentBean.objectStoreDir",
-                               persistProps.getProperty(DroolsPersistenceProperties.JTA_OBJECTSTORE_DIR));
+               /**
+                * Configures a Kie Environment
+                * 
+                * @param env
+                *            environment to be configured
+                * @param emf
+                *            entity manager factory
+                */
+               private void configureKieEnv(Environment env, EntityManagerFactory emf) {
+                       env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);
+                       env.set(EnvironmentName.TRANSACTION, fact.getUserTrans());
+                       env.set(EnvironmentName.TRANSACTION_SYNCHRONIZATION_REGISTRY, fact.getTransSyncReg());
+                       env.set(EnvironmentName.TRANSACTION_MANAGER, fact.getTransMgr());
+               }
+
+               /**
+                * Gets a session's ID from the persistent store.
+                * 
+                * @param conn
+                *            persistence connector
+                * @param sessnm
+                *            name of the session
+                * @return the session's id, or {@code -1} if the session is not found
+                */
+               private long getSessionId(DroolsSessionConnector conn, String sessnm) {
+                       DroolsSession sess = conn.get(sessnm);
+                       return sess != null ? sess.getSessionId() : -1;
+               }
+
+               /**
+                * Replaces a session within the persistent store, if it exists. Adds it
+                * otherwise.
+                * 
+                * @param conn
+                *            persistence connector
+                * @param sessnm
+                *            name of session to be updated
+                * @param kieSession
+                *            new session information
+                */
+               private void replaceSession(DroolsSessionConnector conn, String sessnm, KieSession kieSession) {
+
+                       DroolsSessionEntity sess = new DroolsSessionEntity();
+
+                       sess.setSessionName(sessnm);
+                       sess.setSessionId(kieSession.getIdentifier());
+
+                       conn.replace(sess);
+               }
        }
 
+       /* ============================================================ */
+
        /**
         * Gets the data source properties.
         * 
                return props;
        }
 
-       /**
-        * Configures a Kie Environment
-        * 
-        * @param env
-        *            environment to be configured
-        * @param emf
-        *            entity manager factory
-        */
-       private void configureKieEnv(Environment env, EntityManagerFactory emf) {
-               env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);
-               env.set(EnvironmentName.TRANSACTION, fact.getUserTrans());
-               env.set(EnvironmentName.TRANSACTION_SYNCHRONIZATION_REGISTRY, fact.getTransSyncReg());
-               env.set(EnvironmentName.TRANSACTION_MANAGER, fact.getTransMgr());
-       }
-
        /**
         * Removes "old" Drools 'sessioninfo' records, so they aren't used to
         * restore data to Drools sessions. This also has the useful side-effect of
                }
        }
 
-       /**
-        * Gets a session's ID from the persistent store.
-        * 
-        * @param conn
-        *            persistence connector
-        * @param sessnm
-        *            name of the session
-        * @return the session's id, or {@code -1} if the session is not found
-        */
-       private long getSessionId(DroolsSessionConnector conn, String sessnm) {
-               DroolsSession sess = conn.get(sessnm);
-               return sess != null ? sess.getSessionId() : -1;
-       }
-
-       /**
-        * Replaces a session within the persistent store, if it exists. Adds it
-        * otherwise.
-        * 
-        * @param conn
-        *            persistence connector
-        * @param sessnm
-        *            name of session to be updated
-        * @param kieSession
-        *            new session information
-        */
-       private void replaceSession(DroolsSessionConnector conn, String sessnm, KieSession kieSession) {
-
-               DroolsSessionEntity sess = new DroolsSessionEntity();
-
-               sess.setSessionName(sessnm);
-               sess.setSessionId(kieSession.getIdentifier());
-
-               conn.replace(sess);
-       }
-
        /**
         * Determine whether persistence is enabled for a specific container
         * 
                        // We want to continue, despite any exceptions that occur
                        // while rules are fired.
 
-                       for (;;) {
+                       boolean cont = true;
+                       while(cont) {
 
                                try {
                                        if (kieSession.fireAllRules() > 0) {
                                } catch (Exception | LinkageError e) {
                                        logger.error("Exception during kieSession.fireAllRules", e);
                                }
+                               
 
                                try {
                                        if (stopped.await(sleepTime, TimeUnit.MILLISECONDS)) {
-                                               break;
+                                               cont = false;
                                        }
 
                                } catch (InterruptedException e) {
                                        logger.error("startThread exception: ", e);
                                        Thread.currentThread().interrupt();
-                                       break;
+                                       cont = false;
                                }
                        }
 
 
        private static class SingletonRegistry {
                private static final TransactionSynchronizationRegistry transreg = new com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionSynchronizationRegistryImple();
+               
+               private SingletonRegistry() {
+                       super();
+               }
        }
 
        /**
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * feature-simulators
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 @Path("/events")
 public class DMaaPSimulatorJaxRs {
        
+       private static final String NO_DATA_MSG = "No Data";
        private static final Map<String, BlockingQueue<String>> queues = new ConcurrentHashMap<>();
        private static final Logger logger = LoggerFactory.getLogger(DMaaPSimulatorJaxRs.class);
        private static int responseCode = 200;
         try {
             httpResponse.flushBuffer();
         } catch (IOException e) {
-            final Logger logger = LoggerFactory.getLogger(DMaaPSimulatorJaxRs.class);
             logger.error("flushBuffer threw: ", e);
             return "Got an error";
         }
            }
                if (queues.containsKey(topicName)) {
                        BlockingQueue<String> queue = queues.get(topicName);
-                       String response = "No Data";
+                       String response = NO_DATA_MSG;
                        try {
                                response = queue.poll(timeout, TimeUnit.MILLISECONDS);
                        } catch (InterruptedException e) {
                                logger.debug("error in DMaaP simulator", e);
+                               Thread.currentThread().interrupt();
                        }
                        if (response == null) {
-                           response = "No Data";
+                           response = NO_DATA_MSG;
                        }
                        return response;
                }
                                        BlockingQueue<String> queue = queues.get(topicName);
                                        String response = queue.poll();
                                        if (response == null) {
-                                           response = "No Data";
+                                           response = NO_DATA_MSG;
                                        }
                                        return response;
                                }
                        } catch (InterruptedException e) {
                                logger.debug("error in DMaaP simulator", e);
+                               Thread.currentThread().interrupt();
                        }
                }
                return "No topic";
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-core
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
    *   with this name
    */
   public PolicySession adoptKieSession(String name, KieSession kieSession)
-       throws IllegalArgumentException, IllegalStateException
   {
 
        if(name == null){
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-core
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
   private ThreadModel threadModel = null;
 
   // supports 'getCurrentSession()' method
-  private static ThreadLocal<PolicySession> policySession =
+  private static ThreadLocal<PolicySession> policySess =
        new ThreadLocal<>();
 
   /**
   public void setPolicySession()
   {
        // this sets a 'ThreadLocal' variable
-       policySession.set(this);
+       policySess.set(this);
   }
 
   /**
    */
   public static PolicySession getCurrentSession()
   {
-       return policySession.get();
+       return policySess.get();
   }
        
   /**
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-core
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
         * @throws IllegalStateException. if the element is in a state that
         * conflicts with the start operation.
         */
-       public boolean start() throws IllegalStateException;
+       public boolean start();
        
        /**
         * Stop operation.  The entity can be restarted again by invoking
         * @throws IllegalStateException. if the element is in a state that
         * conflicts with the stop operation.
         */
-       public boolean stop()throws IllegalStateException;
+       public boolean stop();
        
        /**
         * shutdown operation.   The terminate operation yields the entity
         * @throws IllegalStateException. if the element is in a state that
         * conflicts with the stop operation.
         */
-       public void shutdown()throws IllegalStateException;
+       public void shutdown();
        
        /**
         * is it alive?
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-endpoints
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  */
 public interface TopicEndpoint extends Startable, Lockable {
 
+  /**
+   * singleton for global access
+   */
+  public static final TopicEndpoint manager = new ProxyTopicEndpointManager();
+
   /**
    * Add Topic Sources to the communication infrastructure initialized per properties
    *
    * @throws IllegalArgumentException if invalid parameters are present
    * @throws UnsupportedOperationException if the operation is not supported.
    */
-  public TopicSource getTopicSource(Topic.CommInfrastructure commType, String topicName)
-      throws UnsupportedOperationException;
+  public TopicSource getTopicSource(Topic.CommInfrastructure commType, String topicName);
 
   /**
    * get the UEB Topic Source for the given topic name
    *         TopicWriters for a topic name and communication infrastructure
    * @throws IllegalArgumentException if invalid parameters are present
    */
-  public TopicSink getTopicSink(Topic.CommInfrastructure commType, String topicName)
-      throws UnsupportedOperationException;
+  public TopicSink getTopicSink(Topic.CommInfrastructure commType, String topicName);
 
   /**
    * get the Topic Sinks for the given topic name and all the underlying communication
    * @return the NOOP Topic Sinks List
    */
   public List<NoopTopicSink> getNoopTopicSinks();
-
-  /**
-   * singleton for global access
-   */
-  public static final TopicEndpoint manager = new ProxyTopicEndpointManager();
 }
 
 
   }
 
   @Override
-  public TopicSource getTopicSource(Topic.CommInfrastructure commType, String topicName)
-      throws UnsupportedOperationException {
+  public TopicSource getTopicSource(Topic.CommInfrastructure commType, String topicName) {
 
     if (commType == null) {
-      throw new IllegalArgumentException(
-          "Invalid parameter: a communication infrastructure required to fetch " + topicName);
+      throw parmException(topicName);
     }
 
     if (topicName == null) {
-      throw new IllegalArgumentException(
-          "Invalid parameter: a communication infrastructure required to fetch " + topicName);
+      throw parmException(topicName);
     }
 
     switch (commType) {
     }
   }
 
+  private IllegalArgumentException parmException(String topicName) {
+       return new IllegalArgumentException(
+          "Invalid parameter: a communication infrastructure required to fetch " + topicName);
+  }
+
   @Override
-  public TopicSink getTopicSink(Topic.CommInfrastructure commType, String topicName)
-      throws UnsupportedOperationException {
+  public TopicSink getTopicSink(Topic.CommInfrastructure commType, String topicName) {
     if (commType == null) {
-      throw new IllegalArgumentException(
-          "Invalid parameter: a communication infrastructure required to fetch " + topicName);
+      throw parmException(topicName);
     }
 
     if (topicName == null) {
-      throw new IllegalArgumentException(
-          "Invalid parameter: a communication infrastructure required to fetch " + topicName);
+      throw parmException(topicName);
     }
 
     switch (commType) {
   @Override
   public List<TopicSink> getTopicSinks(String topicName) {
     if (topicName == null) {
-      throw new IllegalArgumentException(
-          "Invalid parameter: a communication infrastructure required to fetch " + topicName);
+      throw parmException(topicName);
     }
 
     final List<TopicSink> sinks = new ArrayList<>();
     try {
       sinks.add(this.getUebTopicSink(topicName));
     } catch (final Exception e) {
-      logger.debug("No sink for topic: {}", topicName, e);
+      logNoSink(topicName, e);
     }
 
     try {
       sinks.add(this.getDmaapTopicSink(topicName));
     } catch (final Exception e) {
-      logger.debug("No sink for topic: {}", topicName, e);
+      logNoSink(topicName, e);
     }
 
     try {
       sinks.add(this.getNoopTopicSink(topicName));
     } catch (final Exception e) {
-      logger.debug("No sink for topic: {}", topicName, e);
+      logNoSink(topicName, e);
     }
 
     return sinks;
   }
 
+private void logNoSink(String topicName, Exception ex) {
+       logger.debug("No sink for topic: {}", topicName, ex);
+}
+
   @Override
   public UebTopicSource getUebTopicSource(String topicName) {
     return UebTopicSource.factory.get(topicName);
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-endpoints
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
         * @throws IllegalStateException the entity is in an state that prevents
         *         it from sending messages, for example, locked or stopped.
         */
-       public boolean send(String message) throws IllegalArgumentException, IllegalStateException;
+       public boolean send(String message);
 
 }
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-endpoints
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * Factory of DMAAP Reader Topics indexed by topic name
  */
 class IndexedDmaapTopicSinkFactory implements DmaapTopicSinkFactory {
+       private static final String MISSING_TOPIC = "A topic must be provided";
+
        /**
         * Logger
         */
                                                                boolean allowSelfSignedCerts) {
                
                if (topic == null || topic.isEmpty()) {
-                       throw new IllegalArgumentException("A topic must be provided");
+                       throw new IllegalArgumentException(MISSING_TOPIC);
                }
                
                synchronized (this) {
                                                                boolean useHttps, boolean allowSelfSignedCerts) {
                
                if (topic == null || topic.isEmpty()) {
-                       throw new IllegalArgumentException("A topic must be provided");
+                       throw new IllegalArgumentException(MISSING_TOPIC);
                }
                
                synchronized (this) {
                                                                        PolicyProperties.PROPERTY_TOPIC_SERVERS_SUFFIX);
                                
                                List<String> serverList;
-                               if (servers != null && !servers.isEmpty()) serverList = new ArrayList<>(Arrays.asList(servers.split("\\s*,\\s*")));
+                               if (servers != null && !servers.isEmpty())
+                                       serverList = new ArrayList<>(Arrays.asList(servers.split("\\s*,\\s*")));
                                else serverList = new ArrayList<>();
                                
                                String apiKey = properties.getProperty(PolicyProperties.PROPERTY_DMAAP_SINK_TOPICS + 
        public void destroy(String topic) {
                
                if (topic == null || topic.isEmpty()) {
-                       throw new IllegalArgumentException("A topic must be provided");
+                       throw new IllegalArgumentException(MISSING_TOPIC);
                }
                
                DmaapTopicSink dmaapTopicWriter;
        public DmaapTopicSink get(String topic) {
                
                if (topic == null || topic.isEmpty()) {
-                       throw new IllegalArgumentException("A topic must be provided");
+                       throw new IllegalArgumentException(MISSING_TOPIC);
                }
                
                synchronized(this) {
 
        @Override
        public synchronized List<DmaapTopicSink> inventory() {
-                List<DmaapTopicSink> writers = 
-                                new ArrayList<>(this.dmaapTopicWriters.values());
-                return writers;
+                return new ArrayList<>(this.dmaapTopicWriters.values());
        }
 
        @Override
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-endpoints
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
         * @return an DMAAP Topic Source
         * @throws IllegalArgumentException if invalid parameters are present
         */
-       public List<DmaapTopicSource> build(Properties properties)
-                       throws IllegalArgumentException;
+       public List<DmaapTopicSource> build(Properties properties);
        
        /**
         * Instantiates a new DMAAP Topic Source
                                                                int fetchLimit,
                                                                boolean managed,
                                                                boolean useHttps,
-                                                               boolean allowSelfSignedCerts)
-                       throws IllegalArgumentException;
+                                                               boolean allowSelfSignedCerts);
        
        /**
         * Instantiates a new DMAAP Topic Source
                                                                Map<String,String> additionalProps,
                                                                boolean managed,
                                                                boolean useHttps, 
-                                                               boolean allowSelfSignedCerts)
-                       throws IllegalArgumentException;
+                                                               boolean allowSelfSignedCerts);
        
        /**
         * Instantiates a new DMAAP Topic Source
        public DmaapTopicSource build(List<String> servers, 
                                                                String topic, 
                                                                String apiKey, 
-                                                               String apiSecret)
-                       throws IllegalArgumentException;
+                                                               String apiSecret);
 
        /**
         * Instantiates a new DMAAP Topic Source
         * @throws IllegalArgumentException if invalid parameters are present
         */
        public DmaapTopicSource build(List<String> servers,
-                                                               String topic)
-                       throws IllegalArgumentException;        
+                                                               String topic);  
        
        /**
         * Destroys an DMAAP Topic Source based on a topic
         * @throws IllegalStateException if the DMAAP Topic Source is 
         * an incorrect state
         */
-       public DmaapTopicSource get(String topic)
-                  throws IllegalArgumentException, IllegalStateException;
+       public DmaapTopicSource get(String topic);
        
        /**
         * Provides a snapshot of the DMAAP Topic Sources
  */
 
 class IndexedDmaapTopicSourceFactory implements DmaapTopicSourceFactory {
+       private static final String MISSING_TOPIC = "A topic must be provided";
+
        /**
         * Logger 
         */
                                                                Map<String,String> additionalProps,
                                                                boolean managed,
                                                                boolean useHttps,
-                                                               boolean allowSelfSignedCerts) 
-                       throws IllegalArgumentException {
+                                                               boolean allowSelfSignedCerts) {
                
                if (topic == null || topic.isEmpty()) {
-                       throw new IllegalArgumentException("A topic must be provided");
+                       throw new IllegalArgumentException(MISSING_TOPIC);
                }
                
                synchronized(this) {
                                                                int fetchLimit,
                                                                boolean managed,
                                                                boolean useHttps,
-                                                               boolean allowSelfSignedCerts) 
-                       throws IllegalArgumentException {
+                                                               boolean allowSelfSignedCerts) {
                
                if (servers == null || servers.isEmpty()) {
                        throw new IllegalArgumentException("DMaaP Server(s) must be provided");
                }
                
                if (topic == null || topic.isEmpty()) {
-                       throw new IllegalArgumentException("A topic must be provided");
+                       throw new IllegalArgumentException(MISSING_TOPIC);
                }
                
                synchronized(this) {
         * {@inheritDoc}
         */
        @Override
-       public List<DmaapTopicSource> build(Properties properties) 
-                       throws IllegalArgumentException {
+       public List<DmaapTopicSource> build(Properties properties) {
                
                String readTopics = properties.getProperty(PolicyProperties.PROPERTY_DMAAP_SOURCE_TOPICS);
                if (readTopics == null || readTopics.isEmpty()) {
                }
                List<String> readTopicList = new ArrayList<>(Arrays.asList(readTopics.split("\\s*,\\s*")));             
                
-               List<DmaapTopicSource> dmaapTopicSource_s = new ArrayList<>();
+               List<DmaapTopicSource> dmaapTopicSourceLst = new ArrayList<>();
                synchronized(this) {
                        for (String topic: readTopicList) {
                                if (this.dmaapTopicSources.containsKey(topic)) {
-                                       dmaapTopicSource_s.add(this.dmaapTopicSources.get(topic));
+                                       dmaapTopicSourceLst.add(this.dmaapTopicSources.get(topic));
                                        continue;
                                }
                                
                                                         PolicyProperties.PROPERTY_TOPIC_SERVERS_SUFFIX);
                                
                                List<String> serverList;
-                               if (servers != null && !servers.isEmpty()) serverList = new ArrayList<>(Arrays.asList(servers.split("\\s*,\\s*")));
+                               if (servers != null && !servers.isEmpty())
+                                       serverList = new ArrayList<>(Arrays.asList(servers.split("\\s*,\\s*")));
                                else serverList = new ArrayList<>();
                                
                                String apiKey = properties.getProperty(PolicyProperties.PROPERTY_DMAAP_SOURCE_TOPICS + 
                                                                                                           dme2Latitude, dme2Longitude, dme2AdditionalProps,
                                                                                                           managed, useHttps, allowSelfSignedCerts);
                                
-                               dmaapTopicSource_s.add(uebTopicSource);
+                               dmaapTopicSourceLst.add(uebTopicSource);
                        }
                }
-               return dmaapTopicSource_s;
+               return dmaapTopicSourceLst;
        }
        
        /**
        public DmaapTopicSource build(List<String> servers, 
                                                                String topic,
                                                                String apiKey, 
-                                                               String apiSecret) throws IllegalArgumentException {
+                                                               String apiSecret) {
                return this.build(servers, topic, 
                                                  apiKey, apiSecret, null, null,
                                                  null, null,
         * @throws IllegalArgumentException 
         */
        @Override
-       public DmaapTopicSource build(List<String> servers, String topic) throws IllegalArgumentException {
+       public DmaapTopicSource build(List<String> servers, String topic) {
                return this.build(servers, topic, null, null);
        }       
 
         * {@inheritDoc}
         */
        @Override
-       public void destroy(String topic) 
-                  throws IllegalArgumentException {
+       public void destroy(String topic) {
                
                if (topic == null || topic.isEmpty()) {
-                       throw new IllegalArgumentException("A topic must be provided");
+                       throw new IllegalArgumentException(MISSING_TOPIC);
                }
                
                DmaapTopicSource uebTopicSource;
         * {@inheritDoc}
         */
        @Override
-       public DmaapTopicSource get(String topic) 
-              throws IllegalArgumentException, IllegalStateException {
+       public DmaapTopicSource get(String topic) {
                
                if (topic == null || topic.isEmpty()) {
-                       throw new IllegalArgumentException("A topic must be provided");
+                       throw new IllegalArgumentException(MISSING_TOPIC);
                }
                
                synchronized(this) {
 
        @Override
        public synchronized List<DmaapTopicSource> inventory() {
-                List<DmaapTopicSource> readers = 
-                                new ArrayList<>(this.dmaapTopicSources.values());
-                return readers;
+                return new ArrayList<>(this.dmaapTopicSources.values());
        }
 
        @Override
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-endpoints
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * Factory of noop sinks
  */
 class IndexedNoopTopicSinkFactory implements NoopTopicSinkFactory {
-  /**
+  private static final String MISSING_TOPIC = "A topic must be provided";
+
+/**
    * Logger
    */
   private static Logger logger = LoggerFactory.getLogger(IndexedUebTopicSinkFactory.class);
     }
 
     if (topic == null || topic.isEmpty()) {
-      throw new IllegalArgumentException("A topic must be provided");
+      throw new IllegalArgumentException(MISSING_TOPIC);
     }
 
     synchronized (this) {
   @Override
   public void destroy(String topic) {
     if (topic == null || topic.isEmpty()) {
-      throw new IllegalArgumentException("A topic must be provided");
+      throw new IllegalArgumentException(MISSING_TOPIC);
     }
 
     NoopTopicSink noopSink;
   @Override
   public NoopTopicSink get(String topic) {
     if (topic == null || topic.isEmpty()) {
-      throw new IllegalArgumentException("A topic must be provided");
+      throw new IllegalArgumentException(MISSING_TOPIC);
     }
 
     synchronized (this) {
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-endpoints
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * Factory of UEB Reader Topics indexed by topic name
  */
 class IndexedUebTopicSinkFactory implements UebTopicSinkFactory {
+       private static final String MISSING_TOPIC = "A topic must be provided";
+
        /**
         * Logger 
         */
                }
 
                if (topic == null || topic.isEmpty()) {
-                       throw new IllegalArgumentException("A topic must be provided");
+                       throw new IllegalArgumentException(MISSING_TOPIC);
                }
                
                synchronized (this) {
        public void destroy(String topic) {
                
                if (topic == null || topic.isEmpty()) {
-                       throw new IllegalArgumentException("A topic must be provided");
+                       throw new IllegalArgumentException(MISSING_TOPIC);
                }
                
                UebTopicSink uebTopicWriter;
        public UebTopicSink get(String topic) {
                
                if (topic == null || topic.isEmpty()) {
-                       throw new IllegalArgumentException("A topic must be provided");
+                       throw new IllegalArgumentException(MISSING_TOPIC);
                }
                
                synchronized(this) {
 
        @Override
        public synchronized List<UebTopicSink> inventory() {
-                List<UebTopicSink> writers = 
-                                new ArrayList<>(this.uebTopicSinks.values());
-                return writers;
+                return new ArrayList<>(this.uebTopicSinks.values());
        }
 
 
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-endpoints
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
         * @return an UEB Topic Source
         * @throws IllegalArgumentException if invalid parameters are present
         */
-       public List<UebTopicSource> build(Properties properties)
-                       throws IllegalArgumentException;
+       public List<UebTopicSource> build(Properties properties);
        
        /**
         * Instantiates a new UEB Topic Source
                                                                int fetchLimit,
                                                                boolean managed,
                                                                boolean useHttps,
-                                                               boolean allowSelfSignedCerts)
-                       throws IllegalArgumentException;
+                                                               boolean allowSelfSignedCerts);
        
        /**
         * Instantiates a new UEB Topic Source
        public UebTopicSource build(List<String> servers, 
                                                                String topic, 
                                                                String apiKey, 
-                                                               String apiSecret)
-                       throws IllegalArgumentException;
+                                                               String apiSecret);
 
        /**
         * Instantiates a new UEB Topic Source
         * @throws IllegalArgumentException if invalid parameters are present
         */
        public UebTopicSource build(List<String> servers, 
-                                                               String topic)
-                       throws IllegalArgumentException;        
+                                                               String topic);  
        
        /**
         * Destroys an UEB Topic Source based on a topic
         * @throws IllegalStateException if the UEB Topic Source is 
         * an incorrect state
         */
-       public UebTopicSource get(String topic)
-                  throws IllegalArgumentException, IllegalStateException;
+       public UebTopicSource get(String topic);
        
        /**
         * Provides a snapshot of the UEB Topic Sources
  * Factory of UEB Source Topics indexed by topic name
  */
 class IndexedUebTopicSourceFactory implements UebTopicSourceFactory {
+       private static final String MISSING_TOPIC = "A topic must be provided";
+
        /**
         * Logger
         */
                                                                int fetchLimit,
                                                                boolean managed,
                                                                boolean useHttps,
-                                                               boolean allowSelfSignedCerts) 
-       throws IllegalArgumentException {
+                                                               boolean allowSelfSignedCerts) {
                if (servers == null || servers.isEmpty()) {
                        throw new IllegalArgumentException("UEB Server(s) must be provided");
                }
                
                if (topic == null || topic.isEmpty()) {
-                       throw new IllegalArgumentException("A topic must be provided");
+                       throw new IllegalArgumentException(MISSING_TOPIC);
                }
                
                synchronized(this) {
         * {@inheritDoc}
         */
        @Override
-       public List<UebTopicSource> build(Properties properties) 
-                       throws IllegalArgumentException {
+       public List<UebTopicSource> build(Properties properties) {
                
                String readTopics = properties.getProperty(PolicyProperties.PROPERTY_UEB_SOURCE_TOPICS);
                if (readTopics == null || readTopics.isEmpty()) {
         * {@inheritDoc}
         */
        @Override
-       public void destroy(String topic) 
-                  throws IllegalArgumentException {
+       public void destroy(String topic) {
                
                if (topic == null || topic.isEmpty()) {
-                       throw new IllegalArgumentException("A topic must be provided");
+                       throw new IllegalArgumentException(MISSING_TOPIC);
                }
                
                UebTopicSource uebTopicSource;
         * {@inheritDoc}
         */
        @Override
-       public UebTopicSource get(String topic) 
-              throws IllegalArgumentException, IllegalStateException {
+       public UebTopicSource get(String topic) {
                
                if (topic == null || topic.isEmpty()) {
-                       throw new IllegalArgumentException("A topic must be provided");
+                       throw new IllegalArgumentException(MISSING_TOPIC);
                }
                
                synchronized(this) {
 
        @Override
        public synchronized List<UebTopicSource> inventory() {
-                List<UebTopicSource> readers = 
-                                new ArrayList<>(this.uebTopicSources.values());
-                return readers;
+                return new ArrayList<>(this.uebTopicSources.values());
        }
 
        @Override
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-endpoints
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
      */
     public CambriaConsumerWrapper(List<String> servers, String topic, String apiKey,
         String apiSecret, String consumerGroup, String consumerInstance, int fetchTimeout,
-        int fetchLimit, boolean useHttps, boolean useSelfSignedCerts)
-        throws IllegalArgumentException {
+        int fetchLimit, boolean useHttps, boolean useSelfSignedCerts) {
 
       this.fetchTimeout = fetchTimeout;
 
           additionalProps.get(DmaapTopicSinkFactory.DME2_ROUTE_OFFER_PROPERTY);
 
       if (environment == null || environment.isEmpty()) {
-        throw new IllegalArgumentException(
-            "Missing " + PolicyProperties.PROPERTY_DMAAP_SOURCE_TOPICS + "." + topic
-                + PolicyProperties.PROPERTY_DMAAP_DME2_ENVIRONMENT_SUFFIX
-                + " property for DME2 in DMaaP");
+          throw parmException(topic, PolicyProperties.PROPERTY_DMAAP_DME2_ENVIRONMENT_SUFFIX);
       }
       if (aftEnvironment == null || aftEnvironment.isEmpty()) {
-        throw new IllegalArgumentException(
-            "Missing " + PolicyProperties.PROPERTY_DMAAP_SOURCE_TOPICS + "." + topic
-                + PolicyProperties.PROPERTY_DMAAP_DME2_AFT_ENVIRONMENT_SUFFIX
-                + " property for DME2 in DMaaP");
+          throw parmException(topic, PolicyProperties.PROPERTY_DMAAP_DME2_AFT_ENVIRONMENT_SUFFIX);
       }
       if (latitude == null || latitude.isEmpty()) {
-        throw new IllegalArgumentException("Missing "
-            + PolicyProperties.PROPERTY_DMAAP_SOURCE_TOPICS + "." + topic
-            + PolicyProperties.PROPERTY_DMAAP_DME2_LATITUDE_SUFFIX + " property for DME2 in DMaaP");
+        throw parmException(topic, PolicyProperties.PROPERTY_DMAAP_DME2_LATITUDE_SUFFIX);
       }
       if (longitude == null || longitude.isEmpty()) {
-        throw new IllegalArgumentException(
-            "Missing " + PolicyProperties.PROPERTY_DMAAP_SOURCE_TOPICS + "." + topic
-                + PolicyProperties.PROPERTY_DMAAP_DME2_LONGITUDE_SUFFIX
-                + " property for DME2 in DMaaP");
+       throw parmException(topic, PolicyProperties.PROPERTY_DMAAP_DME2_LONGITUDE_SUFFIX);
       }
 
       if ((dme2Partner == null || dme2Partner.isEmpty())
 
       logger.info("{}: CREATION", this);
     }
+    
+    private IllegalArgumentException parmException(String topic, String propnm) {
+        return new IllegalArgumentException(
+                "Missing " + PolicyProperties.PROPERTY_DMAAP_SOURCE_TOPICS + "." + topic
+                    + propnm + " property for DME2 in DMaaP");
+       
+    }
   }
 }
 
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-endpoints
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
         * @return true if success, false otherwise
         * @throws IllegalArgumentException if no message provided
         */
-       public boolean send(String partitionId, String message) throws IllegalArgumentException;
+       public boolean send(String partitionId, String message);
        
        /**
         * closes the publisher
                
                public CambriaPublisherWrapper(List<String> servers, String topic,
                                                               String apiKey,
-                                                              String apiSecret, boolean useHttps) throws IllegalArgumentException {
+                                                              String apiSecret, boolean useHttps) {
                        PublisherBuilder builder = new CambriaClientBuilders.PublisherBuilder();
                
 
                 * {@inheritDoc}
                 */
                @Override
-               public boolean send(String partitionId, String message) 
-                               throws IllegalArgumentException {
+               public boolean send(String partitionId, String message) {
                        if (message == null)
                                throw new IllegalArgumentException("No message provided");
                        
                public DmaapPublisherWrapper(ProtocolTypeConstants protocol,
                                                                         List<String> servers, String topic,
                                                     String username,
-                                                    String password, boolean useHttps) throws IllegalArgumentException {
+                                                    String password, boolean useHttps) {
 
                        
                        if (topic == null || topic.isEmpty())
                 * {@inheritDoc}
                 */
                @Override
-               public boolean send(String partitionId, String message) 
-                               throws IllegalArgumentException {
+               public boolean send(String partitionId, String message) {
                        if (message == null)
                                throw new IllegalArgumentException("No message provided");
                        
                        String dme2RouteOffer = additionalProps.get(DmaapTopicSinkFactory.DME2_ROUTE_OFFER_PROPERTY);
                        
                         if (environment == null || environment.isEmpty()) {
-                               throw new IllegalArgumentException("Missing " + PolicyProperties.PROPERTY_DMAAP_SINK_TOPICS +
-                                               "." + topic + PolicyProperties.PROPERTY_DMAAP_DME2_ENVIRONMENT_SUFFIX + " property for DME2 in DMaaP");
+                                       throw parmException(topic, PolicyProperties.PROPERTY_DMAAP_DME2_ENVIRONMENT_SUFFIX);
                        } if (aftEnvironment == null || aftEnvironment.isEmpty()) {
-                               throw new IllegalArgumentException("Missing " + PolicyProperties.PROPERTY_DMAAP_SINK_TOPICS +
-                                               "." + topic + PolicyProperties.PROPERTY_DMAAP_DME2_AFT_ENVIRONMENT_SUFFIX + " property for DME2 in DMaaP");
+                               throw parmException(topic, PolicyProperties.PROPERTY_DMAAP_DME2_AFT_ENVIRONMENT_SUFFIX);
                        } if (latitude == null || latitude.isEmpty()) {
-                               throw new IllegalArgumentException("Missing " + PolicyProperties.PROPERTY_DMAAP_SINK_TOPICS +
-                                               "." + topic + PolicyProperties.PROPERTY_DMAAP_DME2_LATITUDE_SUFFIX + " property for DME2 in DMaaP");
+                               throw parmException(topic, PolicyProperties.PROPERTY_DMAAP_DME2_LATITUDE_SUFFIX);
                        } if (longitude == null || longitude.isEmpty()) {
-                               throw new IllegalArgumentException("Missing " + PolicyProperties.PROPERTY_DMAAP_SINK_TOPICS +
-                                               "." + topic + PolicyProperties.PROPERTY_DMAAP_DME2_LONGITUDE_SUFFIX + " property for DME2 in DMaaP");
+                               throw parmException(topic, PolicyProperties.PROPERTY_DMAAP_DME2_LONGITUDE_SUFFIX);
                        }
                        
                        if ((dme2Partner == null || dme2Partner.isEmpty()) && (dme2RouteOffer == null || dme2RouteOffer.isEmpty())) {
                        
                        this.publisher.setProps(props);
                }
+               
+               private IllegalArgumentException parmException(String topic, String propnm) {
+                       return new IllegalArgumentException("Missing " + PolicyProperties.PROPERTY_DMAAP_SINK_TOPICS +
+                                       "." + topic + propnm + " property for DME2 in DMaaP");
+                       
+               }
        }
 }
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-management
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
         */
        public static final String NO_VERSION = "NO-VERSION";
        
+       /**
+        * Factory to track and manage drools controllers
+        */
+       public static final DroolsControllerFactory factory = 
+                                                                       new IndexedDroolsControllerFactory();
+       
        /**
         * get group id
         * @return group id
         *         to the functionality missing (ie. communication infrastructure
         *         not supported.
         */
-       public boolean deliver(TopicSink sink, Object event)
-                       throws IllegalArgumentException, IllegalStateException, 
-                          UnsupportedOperationException;
+       public boolean deliver(TopicSink sink, Object event);
        
        /**
         * 
         * @param encodedObject
         * @return
         */
-       public boolean ownsCoder(Class<? extends Object> coderClass, int modelHash) throws IllegalStateException;
+       public boolean ownsCoder(Class<? extends Object> coderClass, int modelHash);
        
        /**
         * fetches a class from the model
         * @param className the class to fetch
         * @return the actual class object, or null if not found
         */
-       public Class<?> fetchModelClass(String className) throws IllegalArgumentException;
+       public Class<?> fetchModelClass(String className);
        
        /**
         * is this controller Smart?
        public void updateToVersion(String newGroupId, String newArtifactId, String newVersion,
                        List<TopicCoderFilterConfiguration> decoderConfigurations,
                        List<TopicCoderFilterConfiguration> encoderConfigurations)
-       throws IllegalArgumentException, LinkageError;
+       throws LinkageError;
 
        /**
         * gets the classnames of facts as well as the current count
         * @param sessionName the session name
         * @return map of class to count
         */
-       public Map<String,Integer> factClassNames(String sessionName) throws IllegalArgumentException;  
+       public Map<String,Integer> factClassNames(String sessionName);  
        
        /**
         * gets the count of facts for a given session
         * @return the fact count 
         * @throws IllegalArgumentException
         */
-       public long factCount(String sessionName) throws IllegalArgumentException;
+       public long factCount(String sessionName);
        
        /**
         * gets all the facts of a given class for a given session
         * halts and permanently releases all resources
         * @throws IllegalStateException
         */
-       public void halt() throws IllegalStateException;
-       
-       /**
-        * Factory to track and manage drools controllers
-        */
-       public static final DroolsControllerFactory factory = 
-                                                                       new IndexedDroolsControllerFactory();
+       public void halt();
 }
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-management
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
        protected List<TopicCoderFilterConfiguration> codersAndFilters
                                        (Properties properties, List<? extends Topic> topicEntities) {
                
-               String PROPERTY_TOPIC_ENTITY_PREFIX;
+               String propertyTopicEntityPrefix;
                
                List<TopicCoderFilterConfiguration>
                        topics2DecodedClasses2Filters = new ArrayList<>();
                        CommInfrastructure commInfra = topic.getTopicCommInfrastructure();
                        if (commInfra == CommInfrastructure.UEB) {
                                if (isSource) {
-                                       PROPERTY_TOPIC_ENTITY_PREFIX = PolicyProperties.PROPERTY_UEB_SOURCE_TOPICS + ".";
+                                       propertyTopicEntityPrefix = PolicyProperties.PROPERTY_UEB_SOURCE_TOPICS + ".";
                                } else {
-                                       PROPERTY_TOPIC_ENTITY_PREFIX = PolicyProperties.PROPERTY_UEB_SINK_TOPICS + ".";
+                                       propertyTopicEntityPrefix = PolicyProperties.PROPERTY_UEB_SINK_TOPICS + ".";
                                }
                        } else if (commInfra == CommInfrastructure.DMAAP) {
                                if (isSource) {
-                                       PROPERTY_TOPIC_ENTITY_PREFIX = PolicyProperties.PROPERTY_DMAAP_SOURCE_TOPICS + ".";
+                                       propertyTopicEntityPrefix = PolicyProperties.PROPERTY_DMAAP_SOURCE_TOPICS + ".";
                                } else {
-                                       PROPERTY_TOPIC_ENTITY_PREFIX = PolicyProperties.PROPERTY_DMAAP_SINK_TOPICS + ".";
+                                       propertyTopicEntityPrefix = PolicyProperties.PROPERTY_DMAAP_SINK_TOPICS + ".";
                                }
                        } else if (commInfra == CommInfrastructure.NOOP) {
                                if (!isSource)
-                                       PROPERTY_TOPIC_ENTITY_PREFIX = PolicyProperties.PROPERTY_NOOP_SINK_TOPICS + ".";
+                                       propertyTopicEntityPrefix = PolicyProperties.PROPERTY_NOOP_SINK_TOPICS + ".";
                                else
                                        continue;
                        } else {
                        //     instead of the ones provided in the platform
 
                        String customGson = properties.getProperty
-                                       (PROPERTY_TOPIC_ENTITY_PREFIX + 
+                                       (propertyTopicEntityPrefix + 
                                         aTopic + 
                                         PolicyProperties.PROPERTY_TOPIC_EVENTS_CUSTOM_MODEL_CODER_GSON_SUFFIX);
                        
                        }
                        
                        String customJackson = properties.getProperty
-                                       (PROPERTY_TOPIC_ENTITY_PREFIX + 
+                                       (propertyTopicEntityPrefix + 
                                         aTopic + 
                                         PolicyProperties.PROPERTY_TOPIC_EVENTS_CUSTOM_MODEL_CODER_JACKSON_SUFFIX);
                        
                        // 3. second the list of classes associated with each topic
                        
                        String eventClasses = 
-                                       properties.getProperty(PROPERTY_TOPIC_ENTITY_PREFIX + aTopic + PolicyProperties.PROPERTY_TOPIC_EVENTS_SUFFIX);
+                                       properties.getProperty(propertyTopicEntityPrefix + aTopic + PolicyProperties.PROPERTY_TOPIC_EVENTS_SUFFIX);
                        
                        if (eventClasses == null || eventClasses.isEmpty()) {
                                // TODO warn
                                // 4. third, for each coder class, get the list of field filters
                                
                                String filter = properties.getProperty
-                                               (PROPERTY_TOPIC_ENTITY_PREFIX + 
+                                               (propertyTopicEntityPrefix + 
                                                 aTopic + 
                                                 PolicyProperties.PROPERTY_TOPIC_EVENTS_SUFFIX + 
                                                 "." + aClass + 
 
        @Override
        public List<DroolsController> inventory() {
-                List<DroolsController> controllers = 
-                                new ArrayList<>(this.droolsControllers.values());
-                return controllers;
+                return new ArrayList<>(this.droolsControllers.values());
        }
        
        @Override
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-management
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
                                String customGsonCoderClass = coderConfig.getCustomGsonCoder().getClassContainer();
                                if (!ReflectionUtil.isClass(this.policyContainer.getClassLoader(),
                                                                   customGsonCoderClass)) {
-                                       logger.error(customGsonCoderClass + " cannot be retrieved");
-                                       throw new IllegalArgumentException(customGsonCoderClass + " cannot be retrieved");
+                                       throw makeRetrieveEx(customGsonCoderClass);
                                } else {
                                        if (logger.isInfoEnabled())
-                                               logger.info("CLASS FETCHED " + customGsonCoderClass);
+                                               logClassFetched(customGsonCoderClass);
                                }
                        }
                        
                                String customJacksonCoderClass = coderConfig.getCustomJacksonCoder().getClassContainer();
                                if (!ReflectionUtil.isClass(this.policyContainer.getClassLoader(),
                                                                   customJacksonCoderClass)) {
-                                       logger.error(customJacksonCoderClass + " cannot be retrieved");
-                                       throw new IllegalArgumentException(customJacksonCoderClass + " cannot be retrieved");
+                                       throw makeRetrieveEx(customJacksonCoderClass);
                                } else {
                                        if (logger.isInfoEnabled())
-                                               logger.info("CLASS FETCHED " + customJacksonCoderClass);
+                                               logClassFetched(customJacksonCoderClass);
                                }
                        }       
                        
                                
                                if (!ReflectionUtil.isClass(this.policyContainer.getClassLoader(), 
                                                                   potentialCodedClass)) {
-                                       logger.error(potentialCodedClass + " cannot be retrieved");
-                                       throw new IllegalArgumentException(potentialCodedClass + " cannot be retrieved");
+                                       throw makeRetrieveEx(potentialCodedClass);
                                } else {
                                        if (logger.isInfoEnabled())
-                                               logger.info("CLASS FETCHED " + potentialCodedClass);
+                                               logClassFetched(potentialCodedClass);
                                }                       
                                
                                if (decoder)
                }
        }
        
+       /**
+        * Logs an error and makes an exception for an item that cannot be retrieved.
+        * @param itemName
+        * @return a new exception
+        */
+       private IllegalArgumentException makeRetrieveEx(String itemName) {
+               logger.error(itemName + " cannot be retrieved");
+               return new IllegalArgumentException(itemName + " cannot be retrieved");
+       }
+
+       /**
+        * Logs the name of the class that was fetched.
+        * @param className
+        */
+       private void logClassFetched(String className) {
+               logger.info("CLASS FETCHED " + className);
+       }
+       
 
        /**
         * remove decoders.
        }       
        
        @Override
-       public boolean deliver(TopicSink sink, Object event) 
-                       throws UnsupportedOperationException {
+       public boolean deliver(TopicSink sink, Object event) {
                
                if (logger.isInfoEnabled())
                        logger.info(this + "DELIVER: " +  event + " FROM " + this + " TO " + sink);
                                return session;                         
                }
                
-               throw new IllegalArgumentException("Invalid Session Name: " + sessionName);
+               throw invalidSessNameEx(sessionName);
+       }
+
+       private IllegalArgumentException invalidSessNameEx(String sessionName) {
+               return new IllegalArgumentException("Invalid Session Name: " + sessionName);
        }
        
        @Override
        public Map<String,Integer> factClassNames(String sessionName) {         
                if (sessionName == null || sessionName.isEmpty())
-                       throw new IllegalArgumentException("Invalid Session Name: " + sessionName);
+                       throw invalidSessNameEx(sessionName);
 
                Map<String,Integer> classNames = new HashMap<>();
                
        @Override
        public long factCount(String sessionName) {             
                if (sessionName == null || sessionName.isEmpty())
-                       throw new IllegalArgumentException("Invalid Session Name: " + sessionName);
+                       throw invalidSessNameEx(sessionName);
                
                PolicySession session = getSession(sessionName);
                return session.getKieSession().getFactCount();  
        @Override
        public List<Object> facts(String sessionName, String className, boolean delete) {               
                if (sessionName == null || sessionName.isEmpty())
-                       throw new IllegalArgumentException("Invalid Session Name: " + sessionName);
+                       throw invalidSessNameEx(sessionName);
                
                if (className == null || className.isEmpty())
                        throw new IllegalArgumentException("Invalid Class Name: " + className);
        @Override
        public List<Object> factQuery(String sessionName, String queryName, String queriedEntity, boolean delete, Object... queryParams) {              
                if (sessionName == null || sessionName.isEmpty())
-                       throw new IllegalArgumentException("Invalid Session Name: " + sessionName);
+                       throw invalidSessNameEx(sessionName);
                
                if (queryName == null || queryName.isEmpty())
                        throw new IllegalArgumentException("Invalid Query Name: " + queryName);
        
        @Override
        public Class<?> fetchModelClass(String className) {
-               Class<?> modelClass = 
-                       ReflectionUtil.fetchClass(this.policyContainer.getClassLoader(), className);
-               return modelClass;
+               return ReflectionUtil.fetchClass(this.policyContainer.getClassLoader(), className);
        }
 
        /**
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-management
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
        }
 
        @Override
-       public boolean deliver(TopicSink sink, Object event) throws UnsupportedOperationException {
-               throw new IllegalStateException(this.getClass().getCanonicalName() + " invoked");
+       public boolean deliver(TopicSink sink, Object event) {
+               throw new IllegalStateException(makeInvokeMsg());
        }
 
        @Override
 
        @Override
        public boolean ownsCoder(Class<? extends Object> coderClass, int modelHash) {
-               throw new IllegalStateException(this.getClass().getCanonicalName() + " invoked");
+               throw new IllegalStateException(makeInvokeMsg());
        }
 
        @Override
        public Class<?> fetchModelClass(String className) {
-               throw new IllegalArgumentException(this.getClass().getCanonicalName() + " invoked");
+               throw new IllegalArgumentException(makeInvokeMsg());
        }
        
        @Override
        public void updateToVersion(String newGroupId, String newArtifactId, String newVersion,
                        List<TopicCoderFilterConfiguration> decoderConfigurations,
                        List<TopicCoderFilterConfiguration> encoderConfigurations)
-                       throws IllegalArgumentException, LinkageError {
-               throw new IllegalArgumentException(this.getClass().getCanonicalName() + " invoked");
+                       throws LinkageError {
+               throw new IllegalArgumentException(makeInvokeMsg());
        }
 
        @Override
-       public Map<String, Integer> factClassNames(String sessionName) 
-                  throws IllegalArgumentException {
+       public Map<String, Integer> factClassNames(String sessionName) {
                return new HashMap<>();
        }
 
                                              boolean delete, Object... queryParams) {
                return new ArrayList<>();
        }
+
+       private String makeInvokeMsg() {
+               return this.getClass().getCanonicalName() + " invoked";
+       }
 }
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-management
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 import org.onap.policy.drools.utils.OrderedServiceImpl;
 
 public interface PolicyControllerFeatureAPI extends OrderedService {
+         
+         /**
+          * Feature providers implementing this interface
+          */
+         public static final OrderedServiceImpl<PolicyControllerFeatureAPI> providers = 
+                                                                       new OrderedServiceImpl<PolicyControllerFeatureAPI>(PolicyControllerFeatureAPI.class);
 
          /**
           * called before creating a controller with name 'name' and 
                                                                      String topic,
                                                                      Object event, 
                                                                      boolean success) {return false;}
-
-         
-         /**
-          * Feature providers implementing this interface
-          */
-         public static final OrderedServiceImpl<PolicyControllerFeatureAPI> providers = 
-                                                                       new OrderedServiceImpl<PolicyControllerFeatureAPI>(PolicyControllerFeatureAPI.class);
 }
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-engine
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * Policy Engine Feature API.
  * Provides Interception Points during the Policy Engine lifecycle.
  */
-public interface PolicyEngineFeatureAPI extends OrderedService {
+public interface PolicyEngineFeatureAPI extends OrderedService {         
+         /**
+          * Feature providers implementing this interface
+          */
+         public static final OrderedServiceImpl<PolicyEngineFeatureAPI> providers = 
+                                                                       new OrderedServiceImpl<>(PolicyEngineFeatureAPI.class);
        
          /**
           * intercept before the Policy Engine is commanded to boot.
           * of the operation preventing the invocation of 
           * lower priority features.   False, otherwise.
           */
-         public default boolean beforeBoot(PolicyEngine engine, String cliArgs[]) {return false;};
+         public default boolean beforeBoot(PolicyEngine engine, String[] cliArgs) {return false;};
          
          /**
           * intercept after the Policy Engine is booted.
           * lower priority features.   False, otherwise.
           */
          public default boolean afterShutdown(PolicyEngine engine) {return false;};
-         
-         /**
-          * Feature providers implementing this interface
-          */
-         public static final OrderedServiceImpl<PolicyEngineFeatureAPI> providers = 
-                                                                       new OrderedServiceImpl<>(PolicyEngineFeatureAPI.class);
 }
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-management
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
   /**
    * policy controllers suffix
    */
-  public final static String CONTROLLER_SUFFIX_IDENTIFIER = "-controller";
+  public static final String CONTROLLER_SUFFIX_IDENTIFIER = "-controller";
 
   /**
    * policy controller properties file suffix
    */
-  public final static String PROPERTIES_FILE_CONTROLLER_SUFFIX =
+  public static final String PROPERTIES_FILE_CONTROLLER_SUFFIX =
       CONTROLLER_SUFFIX_IDENTIFIER + ".properties";
 
   /**
    * policy controller properties file suffix
    */
-  public final static String PROPERTIES_FILE_CONTROLLER_BACKUP_SUFFIX =
+  public static final String PROPERTIES_FILE_CONTROLLER_BACKUP_SUFFIX =
       CONTROLLER_SUFFIX_IDENTIFIER + ".properties.bak";
 
   /**
    * policy engine properties file name
    */
-  public final static String PROPERTIES_FILE_ENGINE = "policy-engine.properties";
+  public static final String PROPERTIES_FILE_ENGINE = "policy-engine.properties";
 
   /**
    * Installation environment suffix for files
    */
-  public final static String ENV_SUFFIX = ".environment";
+  public static final String ENV_SUFFIX = ".environment";
 
   /**
    * configuration directory
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-management
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
    */
   public static final String DEFAULT_CONFIGURATION_DIR = "config";
 
+  /**
+   * Persistence Manager. For now it is a file-based properties management, In the future, it will
+   * probably be DB based, so manager implementation will change.
+   */
+  public static final SystemPersistence manager = new FileSystemPersistence();
+
   /**
    * sets a configuration directory and ensures it exists
    *
    * @throws IllegalArgumentException if the name does not lead to a properties configuration
    */
   public Properties getProperties(String name);
-
-  /**
-   * Persistence Manager. For now it is a file-based properties management, In the future, it will
-   * probably be DB based, so manager implementation will change.
-   */
-  public static final SystemPersistence manager = new FileSystemPersistence();
 }
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * ONAP
  * ================================================================================
  */
 public interface EventProtocolCoder {
        
+       /**
+        * singleton reference to the global event protocol coder
+        */
+       public static EventProtocolCoder manager = new MultiplexorEventProtocolCoder();
+       
        public static class CoderFilters {
 
                /**
                                       JsonProtocolFilter protocolFilter, 
                                       CustomGsonCoder customGsonCoder,
                                       CustomJacksonCoder customJacksonCoder,
-                                      int modelClassLoaderHash)
-               throws IllegalArgumentException;
+                                      int modelClassLoaderHash);
 
        /**
         * removes all decoders associated with the controller id
         * 
         * @throws IllegalArgumentException if invalid arguments have been provided
         */
-       void removeEncoders(String groupId, String artifactId, String topic) throws IllegalArgumentException;
+       void removeEncoders(String groupId, String artifactId, String topic);
        
        /**
         * removes decoders associated with the controller id and topic
         * 
         * @throws IllegalArgumentException if invalid arguments have been provided
         */
-       public void removeDecoders(String groupId, String artifactId, String topic) throws IllegalArgumentException;
+       public void removeDecoders(String groupId, String artifactId, String topic);
        
        /**
         * Given a controller id and a topic, it gives back its filters
         * 
         * @throw IllegalArgumentException if an invalid parameter is passed
         */
-       public List<CoderFilters> getDecoderFilters(String groupId, String artifactId, String topic)
-               throws IllegalArgumentException;        
+       public List<CoderFilters> getDecoderFilters(String groupId, String artifactId, String topic);
        
 
        /**
         * 
         * @throw IllegalArgumentException if an invalid parameter is passed
         */
-       public ProtocolCoderToolset getDecoders(String groupId, String artifactId, String topic) 
-                  throws IllegalArgumentException;
+       public ProtocolCoderToolset getDecoders(String groupId, String artifactId, String topic);
        
        /**
         * Given a controller id and a topic, it gives back all the decoding configurations
         * 
         * @throw IllegalArgumentException if an invalid parameter is passed
         */
-       public List<ProtocolCoderToolset> getDecoders(String groupId, String artifactId)
-                  throws IllegalArgumentException;
+       public List<ProtocolCoderToolset> getDecoders(String groupId, String artifactId);
        
        
        /**
         * 
         * @throws IllegalArgumentException if invalid arguments have been provided
         */
-       public List<CoderFilters> getDecoderFilters(String groupId, String artifactId) throws IllegalArgumentException;
+       public List<CoderFilters> getDecoderFilters(String groupId, String artifactId);
        
 
        /**
         * 
         * @throw IllegalArgumentException if an invalid parameter is passed
         */
-       public List<CoderFilters> getEncoderFilters(String groupId, String artifactId, String topic) 
-                       throws IllegalArgumentException;
+       public List<CoderFilters> getEncoderFilters(String groupId, String artifactId, String topic);
        
        /**
         * gets all encoders associated with the group and artifact ids
         * 
         * @throws IllegalArgumentException if invalid arguments have been provided
         */
-       public List<CoderFilters> getEncoderFilters(String groupId, String artifactId) throws IllegalArgumentException;
+       public List<CoderFilters> getEncoderFilters(String groupId, String artifactId);
        
        /**
         * Given a controller id, a topic, and a classname, it gives back the classes that implements the decoding
         * 
         * @throw IllegalArgumentException if an invalid parameter is passed
         */     
-       public CoderFilters getDecoderFilters(String groupId, String artifactId, String topic, String classname)
-               throws IllegalArgumentException;        
+       public CoderFilters getDecoderFilters(String groupId, String artifactId, String topic, String classname);
        
        /**
         * is there a decoder supported for the controller id and topic
                                       JsonProtocolFilter protocolFilter,
                                       CustomGsonCoder customGsonCoder,
                                       CustomJacksonCoder customJacksonCoder,
-                                      int modelClassLoaderHash)
-               throws IllegalArgumentException;
+                                      int modelClassLoaderHash);
        
        /**
         * is there an encoder supported for the controller id and topic
         * @return
         * @throws IllegalArgumentException invalid arguments passed in
         */
-       public CoderFilters getEncoderFilters(String groupId, String artifactId, String topic, String classname)
-                       throws IllegalArgumentException;
+       public CoderFilters getEncoderFilters(String groupId, String artifactId, String topic, String classname);
        
        /**
         * get encoder based on topic and encoded class
         * @return
         * @throws IllegalArgumentException invalid arguments passed in
         */
-       public List<CoderFilters> getReverseEncoderFilters(String topic, String encodedClass)
-                       throws IllegalArgumentException;
+       public List<CoderFilters> getReverseEncoderFilters(String topic, String encodedClass);
        
        /**
         * gets the identifier of the creator of the encoder
         * @return a drools controller
         * @throws IllegalArgumentException invalid arguments passed in
         */
-       public DroolsController getDroolsController(String topic, Object encodedClass)
-                       throws IllegalArgumentException;
+       public DroolsController getDroolsController(String topic, Object encodedClass);
        
        /**
         * gets the identifier of the creator of the encoder
         * @return list of drools controllers
         * @throws IllegalArgumentException invalid arguments passed in
         */
-       public List<DroolsController> getDroolsControllers(String topic, Object encodedClass)
-                       throws IllegalArgumentException;
+       public List<DroolsController> getDroolsControllers(String topic, Object encodedClass);
        
        /**
         * decode topic's stringified event (json) to corresponding Event Object.
         * @throws UnsupportedOperationException if the operation is not supported
         * @throws IllegalStateException if the system is in an illegal state
         */
-       public Object decode(String groupId, String artifactId, String topic, String json) 
-                       throws IllegalArgumentException, UnsupportedOperationException, IllegalStateException;
+       public Object decode(String groupId, String artifactId, String topic, String json);
 
        /**
         * encodes topic's stringified event (json) to corresponding Event Object.
         * 
         * @throws IllegalArgumentException invalid arguments passed in
         */
-       public String encode(String groupId, String artifactId, String topic, Object event) 
-                       throws IllegalArgumentException, IllegalStateException, UnsupportedOperationException;
+       public String encode(String groupId, String artifactId, String topic, Object event);
        
        /**
         * encodes topic's stringified event (json) to corresponding Event Object.
         * @throws IllegalArgumentException invalid arguments passed in
         * @throws UnsupportedOperationException operation cannot be performed
         */
-       public String encode(String topic, Object event) 
-                       throws IllegalArgumentException, IllegalStateException, UnsupportedOperationException;
+       public String encode(String topic, Object event);
        
        /**
         * encodes topic's stringified event (json) to corresponding Event Object.
         * @throws IllegalArgumentException invalid arguments passed in
         * @throws UnsupportedOperationException operation cannot be performed
         */
-       public String encode(String topic, Object event, DroolsController droolsController) 
-                       throws IllegalArgumentException, IllegalStateException, UnsupportedOperationException;
-       
-       /**
-        * singleton reference to the global event protocol coder
-        */
-       public static EventProtocolCoder manager = new MultiplexorEventProtocolCoder();
+       public String encode(String topic, Object event, DroolsController droolsController);
 }
 
 /**
                                       JsonProtocolFilter protocolFilter,
                                       CustomGsonCoder customGsonCoder,
                                       CustomJacksonCoder customJacksonCoder,
-                                      int modelClassLoaderHash) 
-                  throws IllegalArgumentException {
+                                      int modelClassLoaderHash) {
                logger.info("{}: add-decoder {}:{}:{}:{}:{}:{}:{}:{}", this, 
                                    groupId, artifactId, topic, eventClass,
                                    protocolFilter, customGsonCoder, customJacksonCoder,
                                       JsonProtocolFilter protocolFilter,
                                       CustomGsonCoder customGsonCoder,
                                       CustomJacksonCoder customJacksonCoder,
-                                      int modelClassLoaderHash) 
-                  throws IllegalArgumentException {
+                                      int modelClassLoaderHash) {
                logger.info("{}: add-decoder {}:{}:{}:{}:{}:{}:{}:{}", this, 
                                groupId, artifactId, topic, eventClass,
                                protocolFilter, customGsonCoder, customJacksonCoder,
         * {@inheritDoc}
         */
        @Override
-       public void removeDecoders(String groupId, String artifactId, String topic) 
-                  throws IllegalArgumentException {
+       public void removeDecoders(String groupId, String artifactId, String topic) {
                logger.info("{}: remove-decoder {}:{}:{}", this, groupId, artifactId, topic);   
                this.decoders.remove(groupId, artifactId, topic);
        }
         * {@inheritDoc}
         */
        @Override
-       public void removeEncoders(String groupId, String artifactId, String topic) 
-                  throws IllegalArgumentException {
+       public void removeEncoders(String groupId, String artifactId, String topic) {
                logger.info("{}: remove-encoder {}:{}:{}", this, groupId, artifactId, topic);
                this.encoders.remove(groupId, artifactId, topic);
        }
         * {@inheritDoc}
         */
        @Override
-       public Object decode(String groupId, String artifactId, String topic, String json) 
-                       throws IllegalArgumentException, UnsupportedOperationException, IllegalStateException {
+       public Object decode(String groupId, String artifactId, String topic, String json) {
                logger.debug("{}: decode {}:{}:{}:{}", this, groupId, artifactId, topic, json);
                return this.decoders.decode(groupId, artifactId, topic, json);
        }
         * {@inheritDoc}
         */
        @Override
-       public String encode(String groupId, String artifactId, String topic, Object event) 
-                       throws IllegalArgumentException, IllegalStateException, UnsupportedOperationException {
+       public String encode(String groupId, String artifactId, String topic, Object event) {
                logger.debug("{}: encode {}:{}:{}:{}", this, groupId, artifactId, topic, event);
                return this.encoders.encode(groupId, artifactId, topic, event);
        }
         * {@inheritDoc}
         */
        @Override
-       public String encode(String topic, Object event) 
-                       throws IllegalArgumentException, IllegalStateException, UnsupportedOperationException {
+       public String encode(String topic, Object event) {
                logger.debug("{}: encode {}:{}", this, topic, event);
                return this.encoders.encode(topic, event);
        }
         * {@inheritDoc}
         */
        @Override
-       public String encode(String topic, Object event, DroolsController droolsController) 
-                       throws IllegalArgumentException, IllegalStateException, UnsupportedOperationException {
+       public String encode(String topic, Object event, DroolsController droolsController) {
                logger.debug("{}: encode {}:{}:{}", this, topic, event, droolsController);
                return this.encoders.encode(topic, event, droolsController);
        }
         * {@inheritDoc}
         */
        @Override
-       public List<CoderFilters> getDecoderFilters(String groupId, String artifactId, String topic) 
-                       throws IllegalArgumentException {               
+       public List<CoderFilters> getDecoderFilters(String groupId, String artifactId, String topic) {
                return this.decoders.getFilters(groupId, artifactId, topic);
        }
        
         * {@inheritDoc}
         */
        @Override
-       public ProtocolCoderToolset getDecoders(String groupId, String artifactId, String topic) 
-                       throws IllegalArgumentException {               
+       public ProtocolCoderToolset getDecoders(String groupId, String artifactId, String topic) {
                Pair<ProtocolCoderToolset,ProtocolCoderToolset> decoderToolsets = this.decoders.getCoders(groupId, artifactId, topic);
                if (decoderToolsets == null)
                        throw new IllegalArgumentException("Decoders not found for " + groupId + ":" + artifactId + ":" + topic);
         * {@inheritDoc}
         */
        @Override
-       public List<CoderFilters> getEncoderFilters(String groupId, String artifactId, String topic) 
-                       throws IllegalArgumentException {               
+       public List<CoderFilters> getEncoderFilters(String groupId, String artifactId, String topic) {
                return this.encoders.getFilters(groupId, artifactId, topic);
        }
 
         * {@inheritDoc}
         */
        @Override
-       public CoderFilters getDecoderFilters(String groupId, String artifactId, String topic, String classname)
-                       throws IllegalArgumentException {               
+       public CoderFilters getDecoderFilters(String groupId, String artifactId, String topic, String classname) {
                return this.decoders.getFilters(groupId, artifactId, topic, classname);
        }
        
         * {@inheritDoc}
         */
        @Override
-       public CoderFilters getEncoderFilters(String groupId, String artifactId, String topic, String classname)
-                       throws IllegalArgumentException {       
+       public CoderFilters getEncoderFilters(String groupId, String artifactId, String topic, String classname) {
                return this.encoders.getFilters(groupId, artifactId, topic, classname);
        }
        
         * {@inheritDoc}
         */
        @Override
-       public List<CoderFilters> getReverseEncoderFilters(String topic, String encodedClass) throws IllegalArgumentException {
+       public List<CoderFilters> getReverseEncoderFilters(String topic, String encodedClass) {
                return this.encoders.getReverseFilters(topic, encodedClass);
        }
 
         * @throws IllegalArgumentException if invalid input
         */
        @Override
-       public List<ProtocolCoderToolset> getDecoders(String groupId, String artifactId) 
-                       throws IllegalArgumentException {
+       public List<ProtocolCoderToolset> getDecoders(String groupId, String artifactId) {
 
                List<Pair<ProtocolCoderToolset,ProtocolCoderToolset>> decoderToolsets = this.decoders.getCoders(groupId, artifactId);
                if (decoderToolsets == null)
         * {@inheritDoc}
         */
        @Override
-       public List<CoderFilters> getDecoderFilters(String groupId, String artifactId) throws IllegalArgumentException {
+       public List<CoderFilters> getDecoderFilters(String groupId, String artifactId) {
                return this.decoders.getFilters(groupId, artifactId);
                
        }
         * {@inheritDoc}
         */
        @Override
-       public List<CoderFilters> getEncoderFilters(String groupId, String artifactId) throws IllegalArgumentException {
+       public List<CoderFilters> getEncoderFilters(String groupId, String artifactId) {
                return this.encoders.getFilters(groupId, artifactId);
        }
        
         * {@inheritDoc}
         */
        @Override
-       public DroolsController getDroolsController(String topic, Object encodedClass) throws IllegalArgumentException {
+       public DroolsController getDroolsController(String topic, Object encodedClass) {
                return this.encoders.getDroolsController(topic, encodedClass);
        }
        
         * {@inheritDoc}
         */
        @Override
-       public List<DroolsController> getDroolsControllers(String topic, Object encodedClass) throws IllegalArgumentException {
+       public List<DroolsController> getDroolsControllers(String topic, Object encodedClass) {
                return this.encoders.getDroolsControllers(topic, encodedClass);
        }
 
  * class and best fitted json parsing tools.
  */
 abstract class GenericEventProtocolCoder  {
+       private static final String INVALID_ARTIFACT_ID_MSG = "Invalid artifact id";
+
+       private static final String INVALID_GROUP_ID_MSG = "Invalid group id";
+
+       private static final String INVALID_TOPIC_MSG = "Invalid Topic";
+
+       private static final String UNSUPPORTED_MSG = "Unsupported";
+
+       private static final String MISSING_CLASS = "class must be provided";
+
        private static Logger  logger = LoggerFactory.getLogger(GenericEventProtocolCoder.class);       
        
        /**
                                JsonProtocolFilter protocolFilter, 
                                CustomGsonCoder customGsonCoder, 
                                CustomJacksonCoder customJacksonCoder,
-                               int modelClassLoaderHash)
-                  throws IllegalArgumentException {
+                               int modelClassLoaderHash) {
                if (groupId == null || groupId.isEmpty()) {                     
-                       throw new IllegalArgumentException("Invalid group id");
+                       throw new IllegalArgumentException(INVALID_GROUP_ID_MSG);
                }
                
                if (artifactId == null || artifactId.isEmpty())
-                       throw new IllegalArgumentException("Invalid artifact id");
+                       throw new IllegalArgumentException(INVALID_ARTIFACT_ID_MSG);
                
                if (topic == null || topic.isEmpty())
-                       throw new IllegalArgumentException("Invalid Topic");
+                       throw new IllegalArgumentException(INVALID_TOPIC_MSG);
                
                if (eventClass == null) {
                        throw new IllegalArgumentException("Invalid Event Class");
         * @param topic topic
         * @throws IllegalArgumentException if invalid input
         */
-       public void remove(String groupId, String artifactId, String topic) 
-                  throws IllegalArgumentException {
+       public void remove(String groupId, String artifactId, String topic) {
                
                if (groupId == null || groupId.isEmpty())
-                       throw new IllegalArgumentException("Invalid group id");
+                       throw new IllegalArgumentException(INVALID_GROUP_ID_MSG);
                
                if (artifactId == null || artifactId.isEmpty())
-                       throw new IllegalArgumentException("Invalid artifact id");
+                       throw new IllegalArgumentException(INVALID_ARTIFACT_ID_MSG);
                
                if (topic == null || topic.isEmpty())
-                       throw new IllegalArgumentException("Invalid Topic");
+                       throw new IllegalArgumentException(INVALID_TOPIC_MSG);
                
                String key = this.codersKey(groupId, artifactId, topic);
                
        public boolean isCodingSupported(String groupId, String artifactId, String topic) {
                
                if (groupId == null || groupId.isEmpty())
-                       throw new IllegalArgumentException("Invalid group id");
+                       throw new IllegalArgumentException(INVALID_GROUP_ID_MSG);
                
                if (artifactId == null || artifactId.isEmpty())
-                       throw new IllegalArgumentException("Invalid artifact id");
+                       throw new IllegalArgumentException(INVALID_ARTIFACT_ID_MSG);
                
                if (topic == null || topic.isEmpty())
-                       throw new IllegalArgumentException("Invalid Topic");
+                       throw new IllegalArgumentException(INVALID_TOPIC_MSG);
                
                String key = this.codersKey(groupId, artifactId, topic);
                synchronized(this) {
         * @throws IllegalArgumentException if invalid argument is provided
         * @throws UnsupportedOperationException if the operation cannot be performed
         */
-       public Object decode(String groupId, String artifactId, String topic, String json) 
-                       throws IllegalArgumentException, UnsupportedOperationException, IllegalStateException {
+       public Object decode(String groupId, String artifactId, String topic, String json) {
                
                if (!isCodingSupported(groupId, artifactId, topic))
                        throw new IllegalArgumentException("Unsupported:" + codersKey(groupId, artifactId, topic) + " for encoding");
         * @throws IllegalArgumentException if invalid argument is provided
         * @throws UnsupportedOperationException if the operation cannot be performed
         */
-       public String encode(String groupId, String artifactId, String topic, Object event) 
-                       throws IllegalArgumentException, UnsupportedOperationException {
+       public String encode(String groupId, String artifactId, String topic, Object event) {
                
                if (!isCodingSupported(groupId, artifactId, topic))
                        throw new IllegalArgumentException
         * @throws IllegalArgumentException if invalid argument is provided
         * @throws UnsupportedOperationException if the operation cannot be performed
         */
-       protected String encodeInternal(String key, Object event) 
-                       throws IllegalArgumentException, UnsupportedOperationException {
+       protected String encodeInternal(String key, Object event) {
                
                logger.debug("{}: encode for {}: {}", this, key, event);
                
         * @throws IllegalArgumentException if invalid argument is provided
         * @throws UnsupportedOperationException if the operation cannot be performed
         */
-       public String encode(String topic, Object event) 
-                       throws IllegalArgumentException, IllegalStateException, UnsupportedOperationException {
+       public String encode(String topic, Object event) {
                
                if (event == null)
                        throw new IllegalArgumentException("Invalid encoded class");
         * @throws IllegalArgumentException if invalid argument is provided
         * @throws UnsupportedOperationException if the operation cannot be performed
         */
-       public String encode(String topic, Object encodedClass, DroolsController droolsController) 
-                       throws IllegalArgumentException, IllegalArgumentException, UnsupportedOperationException {
+       public String encode(String topic, Object encodedClass, DroolsController droolsController) {
                
                if (encodedClass == null)
                        throw new IllegalArgumentException("Invalid encoded class");
         * @throws IllegalStateException
         * @throws IllegalArgumentException
         */
-       protected List<DroolsController> droolsCreators(String topic, Object encodedClass)
-                       throws IllegalStateException, IllegalArgumentException {
+       protected List<DroolsController> droolsCreators(String topic, Object encodedClass) {
                
                List<DroolsController> droolsControllers = new ArrayList<>();
                
         * @return list of coders
         * @throws IllegalArgumentException if invalid input
         */
-       public List<CoderFilters> getFilters(String groupId, String artifactId, String topic) 
-                       throws IllegalArgumentException {
+       public List<CoderFilters> getFilters(String groupId, String artifactId, String topic) {
                
                if (!isCodingSupported(groupId, artifactId, topic))
                        throw new IllegalArgumentException("Unsupported:" + codersKey(groupId, artifactId, topic));
         * @return list of coders
         * @throws IllegalArgumentException if invalid input
         */
-       public Pair<ProtocolCoderToolset,ProtocolCoderToolset> getCoders(String groupId, String artifactId, String topic) 
-                       throws IllegalArgumentException {
+       public Pair<ProtocolCoderToolset,ProtocolCoderToolset> getCoders(String groupId, String artifactId, String topic) {
                
                if (!isCodingSupported(groupId, artifactId, topic))
                        throw new IllegalArgumentException("Unsupported:" + codersKey(groupId, artifactId, topic));
                
                String key = this.codersKey(groupId, artifactId, topic);
-               Pair<ProtocolCoderToolset,ProtocolCoderToolset> coderTools = coders.get(key);
-               return coderTools;
+               return coders.get(key);
        }
        
        /**
         * @return list of coders
         * @throws IllegalArgumentException if invalid input
         */
-       public List<CoderFilters> getFilters(String groupId, String artifactId) 
-                       throws IllegalArgumentException {
+       public List<CoderFilters> getFilters(String groupId, String artifactId) {
                
                if (groupId == null || groupId.isEmpty())
-                       throw new IllegalArgumentException("Invalid group id");
+                       throw new IllegalArgumentException(INVALID_GROUP_ID_MSG);
                
                if (artifactId == null || artifactId.isEmpty())
-                       throw new IllegalArgumentException("Invalid artifact id");
+                       throw new IllegalArgumentException(INVALID_ARTIFACT_ID_MSG);
                
                String key = this.codersKey(groupId, artifactId, "");
                
         * @return list of coders
         * @throws IllegalArgumentException if invalid input
         */
-       public List<Pair<ProtocolCoderToolset,ProtocolCoderToolset>> getCoders(String groupId, String artifactId) 
-                       throws IllegalArgumentException {
+       public List<Pair<ProtocolCoderToolset,ProtocolCoderToolset>> getCoders(String groupId, String artifactId) {
                
                if (groupId == null || groupId.isEmpty())
-                       throw new IllegalArgumentException("Invalid group id");
+                       throw new IllegalArgumentException(INVALID_GROUP_ID_MSG);
                
                if (artifactId == null || artifactId.isEmpty())
-                       throw new IllegalArgumentException("Invalid artifact id");
+                       throw new IllegalArgumentException(INVALID_ARTIFACT_ID_MSG);
                
                String key = this.codersKey(groupId, artifactId, "");
                
         * @return list of coders
         * @throws IllegalArgumentException if invalid input
         */
-       public CoderFilters getFilters(String groupId, String artifactId, String topic, String classname)
-                       throws IllegalArgumentException {
+       public CoderFilters getFilters(String groupId, String artifactId, String topic, String classname) {
                
                if (!isCodingSupported(groupId, artifactId, topic))
                        throw new IllegalArgumentException("Unsupported:" + codersKey(groupId, artifactId, topic));
         * @return
         * @throws IllegalArgumentException
         */
-       public List<CoderFilters> getReverseFilters(String topic, String codedClass)
-                       throws IllegalArgumentException {
+       public List<CoderFilters> getReverseFilters(String topic, String codedClass) {
                
                if (topic == null || topic.isEmpty())
-                       throw new IllegalArgumentException("Unsupported");
+                       throw new IllegalArgumentException(UNSUPPORTED_MSG);
                
                if (codedClass == null)
-                       throw new IllegalArgumentException("class must be provided");
+                       throw new IllegalArgumentException(MISSING_CLASS);
                
                String key = this.reverseCodersKey(topic, codedClass);
                List<Pair<ProtocolCoderToolset,ProtocolCoderToolset>> toolsets = this.reverseCoders.get(key);
         * @return
         * @throws IllegalArgumentException
         */
-       DroolsController getDroolsController(String topic, Object fact)
-                       throws IllegalArgumentException {
+       DroolsController getDroolsController(String topic, Object fact) {
                
                if (topic == null || topic.isEmpty())
-                       throw new IllegalArgumentException("Unsupported");
+                       throw new IllegalArgumentException(UNSUPPORTED_MSG);
                
                if (fact == null)
-                       throw new IllegalArgumentException("class must be provided");
+                       throw new IllegalArgumentException(MISSING_CLASS);
                
                List<DroolsController> droolsControllers = droolsCreators(topic, fact);
                
         * @return
         * @throws IllegalArgumentException
         */
-       List<DroolsController> getDroolsControllers(String topic, Object fact)
-                       throws IllegalArgumentException {
+       List<DroolsController> getDroolsControllers(String topic, Object fact) {
                
                if (topic == null || topic.isEmpty())
-                       throw new IllegalArgumentException("Unsupported");
+                       throw new IllegalArgumentException(UNSUPPORTED_MSG);
                
                if (fact == null)
-                       throw new IllegalArgumentException("class must be provided");
+                       throw new IllegalArgumentException(MISSING_CLASS);
                
                List<DroolsController> droolsControllers = droolsCreators(topic, fact);
                if (droolsControllers.size() > 1) {
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * ONAP
  * ================================================================================
  */
 public class JsonProtocolFilter {
        
+       private static final String MISSING_RULE_NAME = "no rule name provided";
        /**
         * Logger
         */
         */
        protected List<FilterRule> rules = new CopyOnWriteArrayList<>();
        
-       /**
-        * 
-        * @param rawFilters raw filter initialization
-        * 
-        * @throws IllegalArgumentException an invalid input has been provided
-        */
-       public static JsonProtocolFilter fromRawFilters(List<Pair<String, String>> rawFilters) 
-               throws IllegalArgumentException {
-               
-               if (rawFilters == null) {
-                       throw new IllegalArgumentException("No raw filters provided");
-               }
-               
-               List<FilterRule> filters = new ArrayList<>();
-               for (Pair<String, String> filterPair: rawFilters) {
-                       if  (filterPair.first() == null || filterPair.first().isEmpty()) {
-                               continue;
-                       }
-                       
-                       filters.add(new FilterRule(filterPair.first(), filterPair.second()));
-               }
-               return new JsonProtocolFilter(filters);
-       }
-       
        /**
         * Create a Protocol Filter
         * 
         * @throws IllegalArgumentException an invalid input has been provided
         */
-       public JsonProtocolFilter() throws IllegalArgumentException {}
+       public JsonProtocolFilter() {}
        
        /**
         * 
         * 
         * @throws IllegalArgumentException an invalid input has been provided
         */
-       public JsonProtocolFilter(List<FilterRule> filters) throws IllegalArgumentException {
+       public JsonProtocolFilter(List<FilterRule> filters) {
                List<FilterRule> temp = new ArrayList<>();
                for (FilterRule rule : filters) {
                        if (rule.getName() == null || rule.getName().isEmpty()) {
 
                this.rules.addAll(temp);
        }
+       
+       /**
+        * 
+        * @param rawFilters raw filter initialization
+        * 
+        * @throws IllegalArgumentException an invalid input has been provided
+        */
+       public static JsonProtocolFilter fromRawFilters(List<Pair<String, String>> rawFilters) {
+               
+               if (rawFilters == null) {
+                       throw new IllegalArgumentException("No raw filters provided");
+               }
+               
+               List<FilterRule> filters = new ArrayList<>();
+               for (Pair<String, String> filterPair: rawFilters) {
+                       if  (filterPair.first() == null || filterPair.first().isEmpty()) {
+                               continue;
+                       }
+                       
+                       filters.add(new FilterRule(filterPair.first(), filterPair.second()));
+               }
+               return new JsonProtocolFilter(filters);
+       }
 
        /**
         * are there any filters?
         * 
         * @throws IllegalArgumentException an invalid input has been provided
         */
-       public boolean accept(JsonElement json) throws IllegalArgumentException {
+       public boolean accept(JsonElement json) {
                if (json == null) {
                        throw new IllegalArgumentException("no JSON provided");
                }
         * 
         * @throws IllegalArgumentException an invalid input has been provided
         */
-       public boolean accept(String json) throws IllegalArgumentException {
+       public boolean accept(String json) {
                if (json == null || json.isEmpty()) {
                        throw new IllegalArgumentException("no JSON provided");
                }
 
        public List<FilterRule> getRules(String name) {
                if (name == null || name.isEmpty())
-                       throw new IllegalArgumentException("no rule name provided");
+                       throw new IllegalArgumentException(MISSING_RULE_NAME);
 
                ArrayList<FilterRule> temp = new ArrayList<>();
                for (FilterRule rule : this.rules) {
        
        public void deleteRules(String name) {
                if (name == null || name.isEmpty())
-                       throw new IllegalArgumentException("no rule name provided");
+                       throw new IllegalArgumentException(MISSING_RULE_NAME);
 
                List<FilterRule> temp = new ArrayList<>();
                for (FilterRule rule : this.rules) {
 
        public void deleteRule(String name, String regex) {
                if (name == null || name.isEmpty())
-                       throw new IllegalArgumentException("no rule name provided");
+                       throw new IllegalArgumentException(MISSING_RULE_NAME);
 
                String nonNullRegex = regex;
                if (regex == null || regex.isEmpty()) {
        
        public void addRule(String name, String regex) {
                if (name == null || name.isEmpty())
-                       throw new IllegalArgumentException("no rule name provided");
+                       throw new IllegalArgumentException(MISSING_RULE_NAME);
 
                String nonNullRegex = regex;
                if (regex == null || regex.isEmpty()) {
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * ONAP
  * ================================================================================
 
 package org.onap.policy.drools.protocol.coders;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonParser;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
+
 import org.onap.policy.drools.controller.DroolsController;
 import org.onap.policy.drools.protocol.coders.EventProtocolCoder.CoderFilters;
 import org.onap.policy.drools.protocol.coders.TopicCoderFilterConfiguration.CustomCoder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonParser;
+import com.google.gson.JsonPrimitive;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+
 /**
  * Protocol Coding/Decoding Toolset
  */
    */
   public ProtocolCoderToolset(String topic, String controllerId, String groupId, String artifactId,
       String codedClass, JsonProtocolFilter filters, CustomCoder customCoder,
-      int modelClassLoaderHash) throws IllegalArgumentException {
+      int modelClassLoaderHash) {
 
     if (topic == null || controllerId == null || groupId == null || artifactId == null
         || codedClass == null || filters == null || topic.isEmpty() || controllerId.isEmpty()) {
    * @throws UnsupportedOperationException can't filter
    * @throws IllegalArgumentException invalid input
    */
-  protected CoderFilters filter(String json)
-      throws UnsupportedOperationException, IllegalArgumentException, IllegalStateException {
+  protected CoderFilters filter(String json) {
 
 
     // 1. Get list of decoding classes for this controller Id and topic
    * @throws IllegalArgumentException if an invalid parameter has been received
    * @throws UnsupportedOperationException if parsing into POJO is not possible
    */
-  public abstract Object decode(String json)
-      throws IllegalArgumentException, UnsupportedOperationException, IllegalStateException;
+  public abstract Object decode(String json);
 
   /**
    * Encodes a POJO object into a JSON String
    * @throws IllegalArgumentException if an invalid parameter has been received
    * @throws UnsupportedOperationException if parsing into POJO is not possible
    */
-  public abstract String encode(Object event)
-      throws IllegalArgumentException, UnsupportedOperationException;
+  public abstract String encode(Object event);
 
   @Override
   public String toString() {
  * Tools used for encoding/decoding using Jackson
  */
 class JacksonProtocolCoderToolset extends ProtocolCoderToolset {
-  private static Logger logger = LoggerFactory.getLogger(JacksonProtocolCoderToolset.class);
+  private static final String WARN_FETCH_FAILED = "{}: cannot fetch application class {}";
+private static final String WARN_FETCH_FAILED_BECAUSE = "{}: cannot fetch application class {} because of {}";
+private static final String FETCH_FAILED = "cannot fetch application class ";
+private static final String ENCODE_FAILED = "event cannot be encoded";
+private static Logger logger = LoggerFactory.getLogger(JacksonProtocolCoderToolset.class);
   /**
    * decoder
    */
    * {@inheritDoc}
    */
   @Override
-  public Object decode(String json)
-      throws IllegalArgumentException, UnsupportedOperationException, IllegalStateException {
+  public Object decode(String json) {
 
     // 0. Use custom coder if available
 
     try {
       decoderClass = droolsController.fetchModelClass(decoderFilter.getCodedClass());
       if (decoderClass == null) {
-        logger.warn("{}: cannot fetch application class {}", this, decoderFilter.getCodedClass());
+        logger.warn(WARN_FETCH_FAILED, this, decoderFilter.getCodedClass());
         throw new IllegalStateException(
-            "cannot fetch application class " + decoderFilter.getCodedClass());
+            FETCH_FAILED + decoderFilter.getCodedClass());
       }
     } catch (final Exception e) {
-      logger.warn("{}: cannot fetch application class {} because of {}", this,
+      logger.warn(WARN_FETCH_FAILED_BECAUSE, this,
           decoderFilter.getCodedClass(), e.getMessage());
       throw new UnsupportedOperationException(
-          "cannot fetch application class " + decoderFilter.getCodedClass(), e);
+          FETCH_FAILED + decoderFilter.getCodedClass(), e);
     }
 
 
     try {
-      final Object fact = this.decoder.readValue(json, decoderClass);
-      return fact;
+      return this.decoder.readValue(json, decoderClass);
     } catch (final Exception e) {
       logger.warn("{} cannot decode {} into {} because of {}", this, json, decoderClass.getName(),
           e.getMessage(), e);
    * {@inheritDoc}
    */
   @Override
-  public String encode(Object event)
-      throws IllegalArgumentException, UnsupportedOperationException {
+  public String encode(Object event) {
 
     // 0. Use custom coder if available
 
     }
 
     try {
-      final String encodedEvent = this.encoder.writeValueAsString(event);
-      return encodedEvent;
+      return this.encoder.writeValueAsString(event);
     } catch (final JsonProcessingException e) {
       logger.error("{} cannot encode {} because of {}", this, event, e.getMessage(), e);
-      throw new UnsupportedOperationException("event cannot be encoded");
+      throw new UnsupportedOperationException(ENCODE_FAILED);
     }
   }
 
       implements JsonSerializer<ZonedDateTime>, JsonDeserializer<ZonedDateTime> {
     @Override
     public ZonedDateTime deserialize(JsonElement element, Type type,
-        JsonDeserializationContext context) throws JsonParseException {
+        JsonDeserializationContext context) {
       try {
         return ZonedDateTime.parse(element.getAsString(), format);
       } catch (final Exception e) {
       implements JsonSerializer<Instant>, JsonDeserializer<Instant> {
 
     @Override
-    public Instant deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
-        throws JsonParseException {
+    public Instant deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
       return Instant.ofEpochMilli(json.getAsLong());
     }
 
    * {@inheritDoc}
    */
   @Override
-  public Object decode(String json)
-      throws IllegalArgumentException, UnsupportedOperationException, IllegalStateException {
+  public Object decode(String json) {
 
     final DroolsController droolsController =
         DroolsController.factory.get(this.groupId, this.artifactId, "");
         final Object gsonObject = gsonField.get(null);
         final Method fromJsonMethod = gsonObject.getClass().getDeclaredMethod("fromJson",
             new Class[] {String.class, Class.class});
-        final Object fact = fromJsonMethod.invoke(gsonObject, json, decoderClass);
-        return fact;
+        return fromJsonMethod.invoke(gsonObject, json, decoderClass);
       } catch (final Exception e) {
         logger.warn("{}: cannot fetch application class {} because of {}", this,
             decoderFilter.getCodedClass(), e.getMessage());
       }
     } else {
       try {
-        final Object fact = this.decoder.fromJson(json, decoderClass);
-        return fact;
+        return this.decoder.fromJson(json, decoderClass);
       } catch (final Exception e) {
         logger.warn("{} cannot decode {} into {} because of {}", this, json, decoderClass.getName(),
             e.getMessage(), e);
    * {@inheritDoc}
    */
   @Override
-  public String encode(Object event)
-      throws IllegalArgumentException, UnsupportedOperationException {
+  public String encode(Object event) {
 
     if (this.customCoder != null) {
       try {
         final Object gsonObject = gsonField.get(null);
         final Method toJsonMethod =
             gsonObject.getClass().getDeclaredMethod("toJson", new Class[] {Object.class});
-        final String encodedJson = (String) toJsonMethod.invoke(gsonObject, event);
-        return encodedJson;
+        return (String) toJsonMethod.invoke(gsonObject, event);
       } catch (final Exception e) {
         logger.warn("{} cannot custom-encode {} because of {}", this, event, e.getMessage(), e);
         throw new UnsupportedOperationException("event cannot be encoded", e);
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-management
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
         * Custom coder, contains class and static field to access parser that the controller
         * desires to use instead of the framework provided parser
         */
-       public static abstract class CustomCoder {
+       public abstract static class CustomCoder {
                protected String className;
                protected String staticCoderField;
                
                 * 
                 * @param rawCustomCoder with format: <class-containing-custom-coder>,<static-coder-field>
                 */
-               public CustomCoder(String rawCustomCoder) throws IllegalArgumentException {                     
+               public CustomCoder(String rawCustomCoder) {                     
                        if (rawCustomCoder != null && !rawCustomCoder.isEmpty()) {
                                
                                this.className = rawCustomCoder.substring(0,rawCustomCoder.indexOf(","));
                 * @param classContainer
                 * @param staticCoderField
                 */
-               public CustomCoder(String className, String staticCoderField) throws IllegalArgumentException {
+               public CustomCoder(String className, String staticCoderField) {
                        if (className == null || className.isEmpty()) {
                                throw new IllegalArgumentException("No classname to create CustomCoder cannot be created");
                        }
                                super(className, staticCoderField);
                }
 
-               public CustomGsonCoder(String customGson) throws IllegalArgumentException {
+               public CustomGsonCoder(String customGson) {
                        super(customGson);
                }
 
                                super(className, staticCoderField);
                }
                
-               public CustomJacksonCoder(String customJackson) throws IllegalArgumentException {
+               public CustomJacksonCoder(String customJackson) {
                        super(customJackson);
                }
                
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-management
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
     private DroolsConfiguration drools;
     @JsonIgnore
     private Map<String, Object> additionalProperties = new HashMap<>();
-    protected final static Object NOT_FOUND_VALUE = new Object();
+    protected static final Object NOT_FOUND_VALUE = new Object();
 
     /**
      * No args constructor for use in serialization
         if (other == this) {
             return true;
         }
-        if ((other instanceof ControllerConfiguration) == false) {
+        if (!(other instanceof ControllerConfiguration)) {
             return false;
         }
         ControllerConfiguration rhs = ((ControllerConfiguration) other);
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-management
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
     private String version;
     @JsonIgnore
     private Map<String, Object> additionalProperties = new HashMap<>();
-    protected final static Object NOT_FOUND_VALUE = new Object();
+    protected static final Object NOT_FOUND_VALUE = new Object();
 
     /**
      * No args constructor for use in serialization
         if (other == this) {
             return true;
         }
-        if ((other instanceof DroolsConfiguration) == false) {
+        if (!(other instanceof DroolsConfiguration)) {
             return false;
         }
         DroolsConfiguration rhs = ((DroolsConfiguration) other);
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-management
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
     private List<ControllerConfiguration> controllers = new ArrayList<>();
     @JsonIgnore
     private Map<String, Object> additionalProperties = new HashMap<>();
-    protected final static Object NOT_FOUND_VALUE = new Object();
+    protected static final Object NOT_FOUND_VALUE = new Object();
 
     /**
      * No args constructor for use in serialization
         return this;
     }
 
-    @SuppressWarnings("unchecked")
-       protected boolean declaredProperty(String name, Object value) {
+    protected boolean declaredProperty(String name, Object value) {
         switch (name) {
             case "requestID":
                 callSetRequestId(value);
         if (other == this) {
             return true;
         }
-        if ((other instanceof PdpdConfiguration) == false) {
+        if (!(other instanceof PdpdConfiguration)) {
             return false;
         }
         PdpdConfiguration rhs = (PdpdConfiguration) other;
         }       
     }
 
-    public void callSetControllers(Object value) {
+    @SuppressWarnings("unchecked")
+       public void callSetControllers(Object value) {
         if (value instanceof List) {
             setControllers((List<ControllerConfiguration> ) value);
         } else {
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-management
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
       return Response.status(Status.OK).entity(source).build();
     else
       return Response.status(Status.NOT_ACCEPTABLE)
-          .entity(new Error("cannot perform operation on " + topic)).build();
+          .entity(makeTopicOperError(topic)).build();
   }
 
   @DELETE
       return Response.status(Status.OK).entity(source).build();
     else
       return Response.status(Status.NOT_ACCEPTABLE)
-          .entity(new Error("cannot perform operation on " + topic)).build();
+          .entity(makeTopicOperError(topic)).build();
+  }
+
+  private Error makeTopicOperError(String topic) {
+       return new Error("cannot perform operation on " + topic);
   }
 
   @GET
       return Response.status(Status.OK).entity(source).build();
     else
       return Response.status(Status.NOT_ACCEPTABLE)
-          .entity(new Error("cannot perform operation on " + topic)).build();
+          .entity(makeTopicOperError(topic)).build();
   }
 
   @DELETE
       return Response.status(Status.OK).entity(source).build();
     else
       return Response.status(Status.SERVICE_UNAVAILABLE)
-          .entity(new Error("cannot perform operation on " + topic)).build();
+          .entity(makeTopicOperError(topic)).build();
   }
 
   @PUT
         return Response.status(Status.NOT_ACCEPTABLE)
             .entity(new Error("Failure to inject event over " + topic)).build();
     } catch (final IllegalArgumentException e) {
-      logger.debug("{}: cannot offer for encoder ueb topic for {} because of {}", this, topic,
-          e.getMessage(), e);
+      logNoUebEncoder(topic, e);
       return Response.status(Response.Status.NOT_FOUND).entity(new Error(topic + " not found"))
           .build();
     } catch (final IllegalStateException e) {
-      logger.debug("{}: cannot offer for encoder ueb topic for {} because of {}", this, topic,
-          e.getMessage(), e);
+      logNoUebEncoder(topic, e);
       return Response.status(Response.Status.NOT_ACCEPTABLE)
           .entity(new Error(topic + " not acceptable due to current state")).build();
     } catch (final Exception e) {
-      logger.debug("{}: cannot offer for encoder ueb topic for {} because of {}", this, topic,
-          e.getMessage(), e);
+      logNoUebEncoder(topic, e);
       return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
           .entity(new Error(e.getMessage())).build();
     }
   }
 
+  private void logNoUebEncoder(String topic, Exception ex) {
+       logger.debug("{}: cannot offer for encoder ueb topic for {} because of {}", this, topic,
+          ex.getMessage(), ex);
+  }
+
   @PUT
   @Path("engine/topics/sources/dmaap/{topic}/events")
   @Consumes(MediaType.TEXT_PLAIN)
         return Response.status(Status.NOT_ACCEPTABLE)
             .entity(new Error("Failure to inject event over " + topic)).build();
     } catch (final IllegalArgumentException e) {
-      logger.debug("{}: cannot offer for encoder dmaap topic for {} because of {}", this, topic,
-          e.getMessage(), e);
+      logNoDmaapEncoder(topic, e);
       return Response.status(Response.Status.NOT_FOUND).entity(new Error(topic + " not found"))
           .build();
     } catch (final IllegalStateException e) {
-      logger.debug("{}: cannot offer for encoder dmaap topic for {} because of {}", this, topic,
-          e.getMessage(), e);
+      logNoDmaapEncoder(topic, e);
       return Response.status(Response.Status.NOT_ACCEPTABLE)
           .entity(new Error(topic + " not acceptable due to current state")).build();
     } catch (final Exception e) {
-      logger.debug("{}: cannot offer for encoder dmaap topic for {} because of {}", this, topic,
-          e.getMessage(), e);
+      logNoDmaapEncoder(topic, e);
       return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
           .entity(new Error(e.getMessage())).build();
     }
   }
 
+  private void logNoDmaapEncoder(String topic, Exception ex) {
+       logger.debug("{}: cannot offer for encoder dmaap topic for {} because of {}", this, topic,
+          ex.getMessage(), ex);
+  }
+
   @GET
   @Path("engine/tools/uuid")
   @ApiOperation(value = "Produces an UUID", notes = "UUID generation utility")
    * Generic Error Reporting class
    */
   public static class Error {
-    private String error;
+    private String msg;
 
-    public Error(String error) {
-      this.setError(error);
+    public Error(String msg) {
+      this.setError(msg);
     }
 
     public String getError() {
-        return error;
+        return msg;
     }
 
-    public void setError(String error) {
-        this.error = error;
+    public void setError(String msg) {
+        this.msg = msg;
     }
   }
 
 
    * @param args program arguments
    * @throws IOException
    */
-  public static void main(String args[]) {
+  public static void main(String[] args) {
 
     /* logging defaults */
 
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-management
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  */
 public interface PolicyController extends Startable, Lockable {
        
+       /**
+        * Factory that tracks and manages Policy Controllers
+        */
+       public static PolicyControllerFactory factory =
+                                               new IndexedPolicyControllerFactory();
+       
        /**
         * name of this Policy Controller
         */
         *         not supported.
         */
        public boolean deliver(CommInfrastructure busType, String topic, 
-                                      Object event)
-                       throws IllegalArgumentException, IllegalStateException, 
-                              UnsupportedOperationException;
+                                      Object event);
        
        /**
         * halts and permanently releases all resources
         * @throws IllegalStateException
         */
-       public void halt() throws IllegalStateException;
-       
-       /**
-        * Factory that tracks and manages Policy Controllers
-        */
-       public static PolicyControllerFactory factory =
-                                               new IndexedPolicyControllerFactory();
+       public void halt();
        
 }
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-management
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
         * 
         * @throws IllegalArgumentException invalid values provided in properties
         */
-       public PolicyController build(String name, Properties properties)
-                       throws IllegalArgumentException;
+       public PolicyController build(String name, Properties properties);
        
        /**
         * patches (updates) a controller from a critical configuration update.
         * @throws IllegalArgumentException
         * @throws IllegalStateException
         */
-       public PolicyController get(DroolsController droolsController) 
-                       throws IllegalArgumentException, IllegalStateException;
+       public PolicyController get(DroolsController droolsController);
        
        /**
         * Makes the Policy Controller identified by controllerName not operational, but
         * @param controllerName  name of the policy controller
         * @throws IllegalArgumentException invalid arguments
         */
-       public void shutdown(String controllerName) throws IllegalArgumentException;;
+       public void shutdown(String controllerName);
        
        /**
         * Makes the Policy Controller identified by controller not operational, but
         * @param controller a Policy Controller
         * @throws IllegalArgumentException invalid arguments
         */
-       public void shutdown(PolicyController controller) throws IllegalArgumentException;
+       public void shutdown(PolicyController controller);
        
        /**
         * Releases all Policy Controllers from operation
         * @param controllerName  name of the policy controller
         * @throws IllegalArgumentException invalid arguments
         */
-       public void destroy(String controllerName) throws IllegalArgumentException;;
+       public void destroy(String controllerName);
        
        /**
         * Destroys this Policy Controller
         * @param controller a Policy Controller
         * @throws IllegalArgumentException invalid arguments
         */
-       public void destroy(PolicyController controller) throws IllegalArgumentException;
+       public void destroy(PolicyController controller);
        
        /**
         * Releases all Policy Controller resources
         * @throws IllegalArgumentException
         * @throws IllegalStateException
         */
-       public PolicyController get(String policyControllerName)
-                  throws IllegalArgumentException, IllegalStateException;
+       public PolicyController get(String policyControllerName);
        
        /**
         * gets the Policy Controller identified by group and artifact ids
         * @throws IllegalArgumentException
         * @throws IllegalStateException
         */
-       public PolicyController get(String groupId, String artifactId)
-                  throws IllegalArgumentException, IllegalStateException;
+       public PolicyController get(String groupId, String artifactId);
        
        /**
         * get features attached to the Policy Controllers
         * get named feature attached to the Policy Controllers
         * @return the feature
         */
-       public PolicyControllerFeatureAPI getFeatureProvider(String featureName) 
-                       throws IllegalArgumentException;
+       public PolicyControllerFeatureAPI getFeatureProvider(String featureName);
        
        /**
         * get features attached to the Policy Controllers
         * {@inheritDoc}
         */
        @Override
-       public synchronized PolicyController build(String name, Properties properties) 
-                       throws IllegalArgumentException {
+       public synchronized PolicyController build(String name, Properties properties) {
                
                if (this.policyControllers.containsKey(name)) {
                        return this.policyControllers.get(name);
         * {@inheritDoc}
         */
        @Override
-       public synchronized PolicyController patch(String name, DroolsConfiguration droolsConfig) 
-                       throws IllegalArgumentException {
+       public synchronized PolicyController patch(String name, DroolsConfiguration droolsConfig) {
                
                if (name == null || name.isEmpty() || !this.policyControllers.containsKey(name)) {
-                       throw new IllegalArgumentException("Invalid " + name);
+                       throw makeArgEx(name);
                }
                
                if (droolsConfig == null)
         * {@inheritDoc}
         */
        @Override
-       public PolicyController patch(PolicyController controller, DroolsConfiguration droolsConfig) 
-                       throws IllegalArgumentException {
+       public PolicyController patch(PolicyController controller, DroolsConfiguration droolsConfig) {
 
                if (controller == null)
                        throw new IllegalArgumentException("Not a valid controller:  null");
         * {@inheritDoc}
         */
        @Override
-       public void shutdown(String controllerName) throws IllegalArgumentException {
+       public void shutdown(String controllerName) {
                
                if (controllerName == null || controllerName.isEmpty()) {
-                       throw new IllegalArgumentException("Invalid " + controllerName);
+                       throw makeArgEx(controllerName);
                }
                
                synchronized(this) {
         * {@inheritDoc}
         */
        @Override
-       public void shutdown(PolicyController controller) throws IllegalArgumentException {             
+       public void shutdown(PolicyController controller) {             
                this.unmanage(controller);
                controller.shutdown();
        }
         * @return
         * @throws IllegalArgumentException
         */
-       protected void unmanage(PolicyController controller) throws IllegalArgumentException {
+       protected void unmanage(PolicyController controller) {
            PolicyController tempController = controller;
                if (tempController == null) {
                        throw new IllegalArgumentException("Invalid Controller");
         * {@inheritDoc}
         */
        @Override
-       public void destroy(String controllerName) throws IllegalArgumentException {
+       public void destroy(String controllerName) {
                
                if (controllerName == null || controllerName.isEmpty()) {
-                       throw new IllegalArgumentException("Invalid " + controllerName);
+                       throw makeArgEx(controllerName);
                }
                
                synchronized(this) {
         * {@inheritDoc}
         */
        @Override
-       public void destroy(PolicyController controller) throws IllegalArgumentException {
+       public void destroy(PolicyController controller) {
                this.unmanage(controller);
                controller.halt();
        }
         * {@inheritDoc}
         */
        @Override
-       public PolicyController get(String name) throws IllegalArgumentException, IllegalStateException {
+       public PolicyController get(String name) {
 
                if (name == null || name.isEmpty()) {
-                       throw new IllegalArgumentException("Invalid " + name);
+                       throw makeArgEx(name);
                }
                
                synchronized(this) {
                        if (this.policyControllers.containsKey(name)) {
                                return this.policyControllers.get(name);
                        } else {
-                               throw new IllegalArgumentException("Invalid " + name);
+                               throw makeArgEx(name);
                        }
                }
        }
         * {@inheritDoc}
         */
        @Override
-       public PolicyController get(String groupId, String artifactId) 
-                       throws IllegalArgumentException, IllegalStateException {
+       public PolicyController get(String groupId, String artifactId) {
 
                if (groupId == null || groupId.isEmpty() || 
                        artifactId == null || artifactId.isEmpty()) {
                        if (this.coordinates2Controller.containsKey(key)) {
                                return this.coordinates2Controller.get(key);
                        } else {
-                               throw new IllegalArgumentException("Invalid " + key);
+                               throw makeArgEx(key);
                        }
                }
        }
         * {@inheritDoc}
         */
        @Override
-       public PolicyController get(DroolsController droolsController) 
-                       throws IllegalArgumentException, IllegalStateException {
+       public PolicyController get(DroolsController droolsController) {
 
                if (droolsController == null) {
                        throw new IllegalArgumentException("No Drools Controller provided");
         */
        @Override
        public List<PolicyController> inventory() {
-                List<PolicyController> controllers = 
-                                new ArrayList<>(this.policyControllers.values());
-                return controllers;
+                return new ArrayList<>(this.policyControllers.values());
        }
        
        /**
         * {@inheritDoc}
         */
        @Override
-       public PolicyControllerFeatureAPI getFeatureProvider(String featureName) throws IllegalArgumentException {
+       public PolicyControllerFeatureAPI getFeatureProvider(String featureName) {
                if (featureName == null || featureName.isEmpty())
                        throw new IllegalArgumentException("A feature name must be provided");
                
                
                throw new IllegalArgumentException("Invalid Feature Name: " + featureName);
        }
+
+       private IllegalArgumentException makeArgEx(String argName) {
+               return new IllegalArgumentException("Invalid " + argName);
+       }
 }
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-management
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * PolicyEngine 1 --- 1 ManagementServer
  */
 public interface PolicyEngine extends Startable, Lockable, TopicListener {
+  /**
+   * Policy Engine Manager
+   */
+  public static final PolicyEngine manager = new PolicyEngineManager();
+  
   /**
    * Default Telemetry Server Port
    */
    *
    * @param cliArgs command line arguments
    */
-  public void boot(String cliArgs[]);
+  public void boot(String[] cliArgs);
 
   /**
    * configure the policy engine according to the given properties
    *
    * @return the feature
    */
-  public PolicyEngineFeatureAPI getFeatureProvider(String featureName)
-      throws IllegalArgumentException;
+  public PolicyEngineFeatureAPI getFeatureProvider(String featureName);
 
   /**
    * get features attached to the Policy Engine
    * @throws IllegalStateException when the engine is in a state where this operation is not
    *         permitted (ie. locked or stopped).
    */
-  public boolean deliver(String topic, Object event)
-      throws IllegalArgumentException, IllegalStateException;
+  public boolean deliver(String topic, Object event);
 
   /**
    * Attempts the dispatching of an "event" object over communication infrastructure "busType"
    * @throws UnsupportedOperationException when the engine cannot deliver due to the functionality
    *         missing (ie. communication infrastructure not supported.
    */
-  public boolean deliver(String busType, String topic, Object event)
-      throws IllegalArgumentException, IllegalStateException, UnsupportedOperationException;
+  public boolean deliver(String busType, String topic, Object event);
 
   /**
    * Attempts the dispatching of an "event" object over communication infrastructure "busType"
    * @throws UnsupportedOperationException when the engine cannot deliver due to the functionality
    *         missing (ie. communication infrastructure not supported.
    */
-  public boolean deliver(CommInfrastructure busType, String topic, Object event)
-      throws IllegalArgumentException, IllegalStateException, UnsupportedOperationException;
+  public boolean deliver(CommInfrastructure busType, String topic, Object event);
 
   /**
    * Attempts delivering of an String over communication infrastructure "busType"
    * @throws UnsupportedOperationException when the engine cannot deliver due to the functionality
    *         missing (ie. communication infrastructure not supported.
    */
-  public boolean deliver(CommInfrastructure busType, String topic, String event)
-      throws IllegalArgumentException, IllegalStateException, UnsupportedOperationException;
+  public boolean deliver(CommInfrastructure busType, String topic, String event);
 
   /**
    * Invoked when the host goes into the active state.
    * @return policy engine configuration
    */
   public Properties defaultTelemetryConfig();
-
-  /**
-   * Policy Engine Manager
-   */
-  public final static PolicyEngine manager = new PolicyEngineManager();
 }
 
 
  * Policy Engine Manager Implementation
  */
 class PolicyEngineManager implements PolicyEngine {
-  /**
+  private static final String INVALID_TOPIC_MSG = "Invalid Topic";
+
+private static final String INVALID_EVENT_MSG = "Invalid Event";
+
+private static final String ENGINE_STOPPED_MSG = "Policy Engine is stopped";
+
+private static final String ENGINE_LOCKED_MSG = "Policy Engine is locked";
+
+/**
    * logger
    */
   private static final Logger logger = LoggerFactory.getLogger(PolicyEngineManager.class);
 
 
   @Override
-  public synchronized void boot(String cliArgs[]) {
+  public synchronized void boot(String[] cliArgs) {
 
     for (final PolicyEngineFeatureAPI feature : PolicyEngineFeatureAPI.providers.getList()) {
       try {
   }
 
   @Override
-  public synchronized PolicyController createPolicyController(String name, Properties properties)
-      throws IllegalArgumentException, IllegalStateException {
+  public synchronized PolicyController createPolicyController(String name, Properties properties) {
 
     String tempName = name;
     // check if a PROPERTY_CONTROLLER_NAME property is present
 
   @Override
   public List<PolicyController> updatePolicyControllers(
-      List<ControllerConfiguration> configControllers)
-      throws IllegalArgumentException, IllegalStateException {
+      List<ControllerConfiguration> configControllers) {
 
     final List<PolicyController> policyControllers = new ArrayList<>();
     if (configControllers == null || configControllers.isEmpty()) {
 
     boolean success = true;
     if (this.locked)
-      throw new IllegalStateException("Engine is locked");
+      throw new IllegalStateException(ENGINE_LOCKED_MSG);
 
     this.alive = true;
 
   }
 
   @Override
-  public boolean deliver(String topic, Object event)
-      throws IllegalArgumentException, IllegalStateException {
+  public boolean deliver(String topic, Object event) {
 
     /*
      * Note this entry point is usually from the DRL
      */
 
     if (topic == null || topic.isEmpty())
-      throw new IllegalArgumentException("Invalid Topic");
+      throw new IllegalArgumentException(INVALID_TOPIC_MSG);
 
     if (event == null)
-      throw new IllegalArgumentException("Invalid Event");
+      throw new IllegalArgumentException(INVALID_EVENT_MSG);
 
     if (!this.isAlive())
-      throw new IllegalStateException("Policy Engine is stopped");
+      throw new IllegalStateException(ENGINE_STOPPED_MSG);
 
     if (this.isLocked())
-      throw new IllegalStateException("Policy Engine is locked");
+      throw new IllegalStateException(ENGINE_LOCKED_MSG);
 
     final List<? extends TopicSink> topicSinks = TopicEndpoint.manager.getTopicSinks(topic);
     if (topicSinks == null || topicSinks.isEmpty() || topicSinks.size() > 1)
   }
 
   @Override
-  public boolean deliver(String busType, String topic, Object event)
-      throws IllegalArgumentException, IllegalStateException, UnsupportedOperationException {
+  public boolean deliver(String busType, String topic, Object event) {
 
     /*
      * Note this entry point is usually from the DRL (one of the reasons busType is String.
       throw new IllegalArgumentException("Invalid Communication Infrastructure");
 
     if (topic == null || topic.isEmpty())
-      throw new IllegalArgumentException("Invalid Topic");
+      throw new IllegalArgumentException(INVALID_TOPIC_MSG);
 
     if (event == null)
-      throw new IllegalArgumentException("Invalid Event");
+      throw new IllegalArgumentException(INVALID_EVENT_MSG);
 
     boolean valid = false;
     for (final Topic.CommInfrastructure comm : Topic.CommInfrastructure.values()) {
 
 
     if (!this.isAlive())
-      throw new IllegalStateException("Policy Engine is stopped");
+      throw new IllegalStateException(ENGINE_STOPPED_MSG);
 
     if (this.isLocked())
-      throw new IllegalStateException("Policy Engine is locked");
+      throw new IllegalStateException(ENGINE_LOCKED_MSG);
 
 
     return this.deliver(Topic.CommInfrastructure.valueOf(busType), topic, event);
   }
 
   @Override
-  public boolean deliver(Topic.CommInfrastructure busType, String topic, Object event)
-      throws IllegalArgumentException, IllegalStateException, UnsupportedOperationException {
+  public boolean deliver(Topic.CommInfrastructure busType, String topic, Object event) {
 
     if (topic == null || topic.isEmpty())
-      throw new IllegalArgumentException("Invalid Topic");
+      throw new IllegalArgumentException(INVALID_TOPIC_MSG);
 
     if (event == null)
-      throw new IllegalArgumentException("Invalid Event");
+      throw new IllegalArgumentException(INVALID_EVENT_MSG);
 
     if (!this.isAlive())
-      throw new IllegalStateException("Policy Engine is stopped");
+      throw new IllegalStateException(ENGINE_STOPPED_MSG);
 
     if (this.isLocked())
-      throw new IllegalStateException("Policy Engine is locked");
+      throw new IllegalStateException(ENGINE_LOCKED_MSG);
 
     /*
      * Try to send through the controller, this is the preferred way, since it may want to apply
   }
 
   @Override
-  public boolean deliver(Topic.CommInfrastructure busType, String topic, String event)
-      throws IllegalArgumentException, IllegalStateException, UnsupportedOperationException {
+  public boolean deliver(Topic.CommInfrastructure busType, String topic, String event) {
 
     if (topic == null || topic.isEmpty())
-      throw new IllegalArgumentException("Invalid Topic");
+      throw new IllegalArgumentException(INVALID_TOPIC_MSG);
 
     if (event == null || event.isEmpty())
-      throw new IllegalArgumentException("Invalid Event");
+      throw new IllegalArgumentException(INVALID_EVENT_MSG);
 
     if (!this.isAlive())
-      throw new IllegalStateException("Policy Engine is stopped");
+      throw new IllegalStateException(ENGINE_STOPPED_MSG);
 
     if (this.isLocked())
-      throw new IllegalStateException("Policy Engine is locked");
+      throw new IllegalStateException(ENGINE_LOCKED_MSG);
 
     try {
       final TopicSink sink = TopicEndpoint.manager.getTopicSink(busType, topic);
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-management
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
         * 
         * @throws IllegalArgumentException when invalid arguments are provided
         */
-       public AggregatedPolicyController(String name, Properties properties) 
-                       throws IllegalArgumentException {
+       public AggregatedPolicyController(String name, Properties properties) {
                
                this.name = name;
                
         * initialize drools layer
         * @throws IllegalArgumentException if invalid parameters are passed in
         */
-       protected void initDrools(Properties properties) throws IllegalArgumentException {
+       protected void initDrools(Properties properties) {
                try {
                        // Register with drools infrastructure
                        this.droolsController = DroolsController.factory.build(properties, sources, sinks);
         * initialize sinks
         * @throws IllegalArgumentException if invalid parameters are passed in
         */
-       protected void initSinks() throws IllegalArgumentException {
+       protected void initSinks() {
                this.topic2Sinks.clear();
                for (TopicSink sink: sinks) {
                        this.topic2Sinks.put(sink.getTopic(), sink);
         * {@inheritDoc}
         */
        @Override
-       public boolean start() throws IllegalStateException {           
+       public boolean start() {                
                logger.info("{}: start", this);
                
                for (PolicyControllerFeatureAPI feature : PolicyControllerFeatureAPI.providers.getList()) {
         * {@inheritDoc}
         */
        @Override
-       public void shutdown() throws IllegalStateException {
+       public void shutdown() {
                logger.info("{}: shutdown", this);
                
                for (PolicyControllerFeatureAPI feature : PolicyControllerFeatureAPI.providers.getList()) {
         * {@inheritDoc}
         */
        @Override
-       public void halt() throws IllegalStateException {
+       public void halt() {
                logger.info("{}: halt", this);
                
                for (PolicyControllerFeatureAPI feature : PolicyControllerFeatureAPI.providers.getList()) {
         */
        @Override
        public boolean deliver(Topic.CommInfrastructure commType, 
-                                      String topic, Object event)
-               throws IllegalArgumentException, IllegalStateException,
-               UnsupportedOperationException { 
+                                      String topic, Object event) {
                
                if (logger.isDebugEnabled())
                        logger.debug("{}: deliver event to {}:{}: {}", this, commType, topic, event);
 
 
 package org.onap.policy.drools.protocol.coders;
 
-import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
-import com.fasterxml.jackson.annotation.PropertyAccessor;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
+
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+
 /**
  * ProtocolCoder Toolset JUNITs
  */
         decode(protocolFilter, coderToolset, triple, tripleEncoded);
     }
 
-    private void decode(JsonProtocolFilter protocolFilter, ProtocolCoderToolset coderToolset,
+    @SuppressWarnings("unchecked")
+       private void decode(JsonProtocolFilter protocolFilter, ProtocolCoderToolset coderToolset,
                         Triple<String, String, String> triple, String tripleEncoded) {
 
         Triple<String, String, String> tripleDecoded = null;
         droolsControllerConfig.put(PolicyProperties.PROPERTY_NOOP_SINK_TOPICS + "." +
                 JUNIT_PROTOCOL_CODER_TOPIC + PolicyProperties.PROPERTY_TOPIC_EVENTS_SUFFIX,
             Triple.class.getCanonicalName());
-
-        DroolsController droolsController =
-            DroolsController.factory.build(droolsControllerConfig, null, noopTopics);
+        
+        DroolsController.factory.build(droolsControllerConfig, null, noopTopics);
     }
 
     private JsonProtocolFilter createFilterSet() {
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * policy-utils
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 package org.onap.policy.drools.utils;
 
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 
        // Sort the list according to sequence number, and then alphabetically
        // according to full class name.
-       Collections.sort(tmp, new Comparator<T>()
-                                        {
-                                          @Override
-                                          public int compare(T o1, T o2)
-                                                {
-                                                  int s1 = o1.getSequenceNumber();
-                                                  int s2 = o2.getSequenceNumber();
-                                                  int rval;
-                                                  if (s1 < s2)
-                                                        {
-                                                          rval = -1;
-                                                        }
-                                                  else if (s1 > s2)
-                                                        {
-                                                          rval = 1;
-                                                        }
-                                                  else
-                                                        {
-                                                          rval = o1.getClass().getName().compareTo
-                                                                (o2.getClass().getName());
-                                                        }
-                                                  return rval;
-                                                }
-                                        });
+       Collections.sort(tmp, (o1, o2) -> {
+                       int s1 = o1.getSequenceNumber();
+                       int s2 = o2.getSequenceNumber();
+                       if (s1 < s2) {
+                               return -1;
+                       } else if (s1 > s2) {
+                               return 1;
+                       } else {
+                               return o1.getClass().getName().compareTo(o2.getClass().getName());
+                       }
+               });
 
        // create an unmodifiable version of this list
        implementers = Collections.unmodifiableList(tmp);
 
-/*-
+/*
  * ============LICENSE_START=======================================================
  * ONAP
  * ================================================================================
     @Test
     public void test() {
         Triple<String, String, String> triple  =
-                new Triple("one", "two", "three");
+                new Triple<>("one", "two", "three");
 
         Assert.assertTrue("one".equals(triple.first()));
         Assert.assertTrue("one".equals(triple.getFirst()));