diff --git a/ms/controllerblueprints/modules/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/PropertyAssignmentService.kt b/ms/controllerblueprints/modules/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/PropertyAssignmentService.kt
index 9389a6f..ea8d491 100644
--- a/ms/controllerblueprints/modules/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/PropertyAssignmentService.kt
+++ b/ms/controllerblueprints/modules/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/PropertyAssignmentService.kt
@@ -1,5 +1,6 @@
 /*
  * Copyright © 2017-2018 AT&T Intellectual Property.
+ * Modifications Copyright © 2018 IBM.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,6 +22,7 @@
 import com.fasterxml.jackson.databind.node.NullNode
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
 import org.onap.ccsdk.apps.controllerblueprints.core.data.*
+import org.onap.ccsdk.apps.controllerblueprints.core.format
 import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
 import org.onap.ccsdk.apps.controllerblueprints.core.utils.ResourceResolverUtils
 import org.slf4j.Logger
@@ -45,7 +47,7 @@
 
     fun resolveAssignmentExpression(nodeTemplateName: String, assignmentName: String,
                                             assignment: Any): JsonNode {
-        var valueNode: JsonNode = NullNode.getInstance()
+        val valueNode: JsonNode
         logger.trace("Assignment ({})", assignment)
         val expressionData = BluePrintExpressionService.getExpressionData(assignment)
 
@@ -96,7 +98,7 @@
     <nested_property_name_or_index_1>, ..., <nested_property_name_or_index_n> ]
  */
     fun resolveAttributeExpression(nodeTemplateName: String, attributeExpression: AttributeExpression): JsonNode {
-        var valueNode: JsonNode = NullNode.getInstance()
+        val valueNode: JsonNode
 
         val attributeName = attributeExpression.attributeName
         val subAttributeName: String? = attributeExpression.subAttributeName
@@ -106,15 +108,15 @@
             attributeNodeTemplateName = attributeExpression.modelableEntityName
         }
 
-        val attributeExpression = bluePrintContext.nodeTemplateByName(attributeNodeTemplateName).attributes?.get(attributeName)
+        val nodeTemplateAttributeExpression = bluePrintContext.nodeTemplateByName(attributeNodeTemplateName).attributes?.get(attributeName)
                 ?: throw BluePrintException(String.format("failed to get property definitions for node template ({})'s property name ({}) ", nodeTemplateName, attributeName))
 
         var propertyDefinition: AttributeDefinition = bluePrintContext.nodeTemplateNodeType(attributeNodeTemplateName).attributes?.get(attributeName)!!
 
-        logger.info("template name ({}), property Name ({}) resolved value ({})", attributeNodeTemplateName, attributeName, attributeExpression)
+        logger.info("node template name ({}), property Name ({}) resolved value ({})", attributeNodeTemplateName, attributeName, nodeTemplateAttributeExpression)
 
         // Check it it is a nested expression
-        valueNode = resolveAssignmentExpression(attributeNodeTemplateName, attributeName, attributeExpression)
+        valueNode = resolveAssignmentExpression(attributeNodeTemplateName, attributeName, nodeTemplateAttributeExpression)
 
 //        subPropertyName?.let {
 //            valueNode = valueNode.at(JsonPointer.valueOf(subPropertyName))
@@ -127,7 +129,7 @@
         <nested_property_name_or_index_1>, ..., <nested_property_name_or_index_n> ]
      */
     fun resolvePropertyExpression(nodeTemplateName: String, propertyExpression: PropertyExpression): JsonNode {
-        var valueNode: JsonNode = NullNode.getInstance()
+        val valueNode: JsonNode
 
         val propertyName = propertyExpression.propertyName
         val subPropertyName: String? = propertyExpression.subPropertyName
@@ -137,15 +139,15 @@
             propertyNodeTemplateName = propertyExpression.modelableEntityName
         }
 
-        val propertyExpression = bluePrintContext.nodeTemplateByName(propertyNodeTemplateName).properties?.get(propertyName)
-                ?: throw BluePrintException(String.format("failed to get property definitions for node template ({})'s property name ({}) ", nodeTemplateName, propertyName))
+        val nodeTemplatePropertyExpression = bluePrintContext.nodeTemplateByName(propertyNodeTemplateName).properties?.get(propertyName)
+                ?: throw BluePrintException(format("failed to get property definitions for node template ({})'s property name ({}) ", nodeTemplateName, propertyName))
 
         var propertyDefinition: PropertyDefinition = bluePrintContext.nodeTemplateNodeType(propertyNodeTemplateName).properties?.get(propertyName)!!
 
-        logger.info("template name ({}), property Name ({}) resolved value ({})", propertyNodeTemplateName, propertyName, propertyExpression)
+        logger.info("node template name ({}), property Name ({}) resolved value ({})", propertyNodeTemplateName, propertyName, nodeTemplatePropertyExpression)
 
         // Check it it is a nested expression
-        valueNode = resolveAssignmentExpression(propertyNodeTemplateName, propertyName, propertyExpression)
+        valueNode = resolveAssignmentExpression(propertyNodeTemplateName, propertyName, nodeTemplatePropertyExpression)
 
 //        subPropertyName?.let {
 //            valueNode = valueNode.at(JsonPointer.valueOf(subPropertyName))
diff --git a/ms/controllerblueprints/modules/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtils.kt b/ms/controllerblueprints/modules/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtils.kt
index 9621382..697a710 100644
--- a/ms/controllerblueprints/modules/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtils.kt
+++ b/ms/controllerblueprints/modules/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtils.kt
@@ -1,5 +1,6 @@
 /*
  * Copyright © 2017-2018 AT&T Intellectual Property.
+ * Modifications Copyright © 2018 IBM.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -32,6 +33,7 @@
 import org.slf4j.LoggerFactory
 import java.io.File
 import java.nio.charset.Charset
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants
 
 /**
  *
@@ -108,14 +110,60 @@
     }
 
     @JvmStatic
+    fun checkJsonNodeValueOfType(type: String, jsonNode: JsonNode) : Boolean {
+        if (BluePrintTypes.validPrimitiveTypes().contains(type)) {
+            return checkJsonNodeValueOfPrimitiveType(type, jsonNode)
+        } else if (BluePrintTypes.validCollectionTypes().contains(type)) {
+            return checkJsonNodeValueOfCollectionType(type, jsonNode)
+        }
+        return false;
+    }
+
+    @JvmStatic
+    fun checkJsonNodeValueOfPrimitiveType(primitiveType: String, jsonNode: JsonNode): Boolean {
+        when (primitiveType) {
+            BluePrintConstants.DATA_TYPE_STRING -> {
+                return jsonNode.isTextual
+            }
+            BluePrintConstants.DATA_TYPE_BOOLEAN -> {
+                return jsonNode.isBoolean
+            }
+            BluePrintConstants.DATA_TYPE_INTEGER -> {
+                return jsonNode.isInt
+            }
+            BluePrintConstants.DATA_TYPE_FLOAT -> {
+                return jsonNode.isDouble
+            }
+            BluePrintConstants.DATA_TYPE_TIMESTAMP -> {
+                return jsonNode.isTextual
+            }
+            else ->
+                return false
+        }
+    }
+
+    @JvmStatic
+    fun checkJsonNodeValueOfCollectionType(type: String, jsonNode: JsonNode): Boolean {
+        when (type) {
+            BluePrintConstants.DATA_TYPE_LIST ->
+                return jsonNode.isArray
+            BluePrintConstants.DATA_TYPE_MAP ->
+                return jsonNode.isContainerNode
+            else ->
+                return false
+        }
+
+    }
+
+    @JvmStatic
     fun populatePrimitiveValues(key: String, value: Any, primitiveType: String, objectNode: ObjectNode) {
-        if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {
+        if (BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {
             objectNode.put(key, value as Boolean)
-        } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {
+        } else if (BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {
             objectNode.put(key, value as Int)
-        } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {
+        } else if (BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {
             objectNode.put(key, value as Float)
-        } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_TIMESTAMP == primitiveType) {
+        } else if (BluePrintConstants.DATA_TYPE_TIMESTAMP == primitiveType) {
             objectNode.put(key, value as String)
         } else {
             objectNode.put(key, value as String)
@@ -124,13 +172,13 @@
 
     @JvmStatic
     fun populatePrimitiveValues(value: Any, primitiveType: String, objectNode: ArrayNode) {
-        if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {
+        if (BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {
             objectNode.add(value as Boolean)
-        } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {
+        } else if (BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {
             objectNode.add(value as Int)
-        } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {
+        } else if (BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {
             objectNode.add(value as Float)
-        } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_TIMESTAMP == primitiveType) {
+        } else if (BluePrintConstants.DATA_TYPE_TIMESTAMP == primitiveType) {
             objectNode.add(value as String)
         } else {
             objectNode.add(value as String)
@@ -139,11 +187,11 @@
 
     @JvmStatic
     fun populatePrimitiveDefaultValues(key: String, primitiveType: String, objectNode: ObjectNode) {
-        if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {
+        if (BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {
             objectNode.put(key, false)
-        } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {
+        } else if (BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {
             objectNode.put(key, 0)
-        } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {
+        } else if (BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {
             objectNode.put(key, 0.0)
         } else {
             objectNode.put(key, "")
@@ -152,11 +200,11 @@
 
     @JvmStatic
     fun populatePrimitiveDefaultValuesForArrayNode(primitiveType: String, arrayNode: ArrayNode) {
-        if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {
+        if (BluePrintConstants.DATA_TYPE_BOOLEAN == primitiveType) {
             arrayNode.add(false)
-        } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {
+        } else if (BluePrintConstants.DATA_TYPE_INTEGER == primitiveType) {
             arrayNode.add(0)
-        } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {
+        } else if (BluePrintConstants.DATA_TYPE_FLOAT == primitiveType) {
             arrayNode.add(0.0)
         } else {
             arrayNode.add("")
@@ -168,13 +216,13 @@
         if (nodeValue == null || nodeValue is NullNode) {
             objectNode.set(key, nodeValue)
         } else if (BluePrintTypes.validPrimitiveTypes().contains(type)) {
-            if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_BOOLEAN == type) {
+            if (BluePrintConstants.DATA_TYPE_BOOLEAN == type) {
                 objectNode.put(key, nodeValue.asBoolean())
-            } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_INTEGER == type) {
+            } else if (BluePrintConstants.DATA_TYPE_INTEGER == type) {
                 objectNode.put(key, nodeValue.asInt())
-            } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_FLOAT == type) {
+            } else if (BluePrintConstants.DATA_TYPE_FLOAT == type) {
                 objectNode.put(key, nodeValue.floatValue())
-            } else if (org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.DATA_TYPE_TIMESTAMP == type) {
+            } else if (BluePrintConstants.DATA_TYPE_TIMESTAMP == type) {
                 objectNode.put(key, nodeValue.asText())
             } else {
                 objectNode.put(key, nodeValue.asText())
diff --git a/ms/controllerblueprints/modules/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtilsTest.kt b/ms/controllerblueprints/modules/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtilsTest.kt
index 28f3b39..8d0f968 100644
--- a/ms/controllerblueprints/modules/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtilsTest.kt
+++ b/ms/controllerblueprints/modules/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtilsTest.kt
@@ -1,5 +1,6 @@
 /*
  * Copyright © 2017-2018 AT&T Intellectual Property.
+ * Modifications Copyright © 2018 IBM.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,13 +17,14 @@
 
 package org.onap.ccsdk.apps.controllerblueprints.core.utils
 
-import com.fasterxml.jackson.databind.JsonNode
 import org.junit.Test
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants
 import org.onap.ccsdk.apps.controllerblueprints.core.data.ServiceTemplate
 import org.slf4j.Logger
 import org.slf4j.LoggerFactory
 import kotlin.test.assertEquals
 import kotlin.test.assertNotNull
+import kotlin.test.assertTrue
 
 /**
  * JacksonUtilsTest
@@ -31,7 +33,7 @@
  */
 class JacksonUtilsTest {
 
-    private val logger: Logger = LoggerFactory.getLogger(this::class.toString())
+    private val log: Logger = LoggerFactory.getLogger(this::class.toString())
 
     val basePath = "load/blueprints"
 
@@ -49,17 +51,13 @@
     @Test
     fun testJsonNodeFromClassPathFile() {
         val filePath = "data/default-context.json"
-        val jsonNode = JacksonUtils.jsonNodeFromClassPathFile(filePath)
-        assertNotNull(jsonNode, "Failed to get json node from file")
-        assertEquals(true, jsonNode is JsonNode, "failed to get JSON node instance")
+        JacksonUtils.jsonNodeFromClassPathFile(filePath)
     }
 
     @Test
     fun testJsonNodeFromFile() {
-        val filePath =  basePath + "/baseconfiguration/Definitions/activation-blueprint.json"
-        val jsonNode = JacksonUtils.jsonNodeFromFile(filePath)
-        assertNotNull(jsonNode, "Failed to get json node from file")
-        assertEquals(true, jsonNode is JsonNode, "failed to get JSON node instance")
+        val filePath = basePath + "/baseconfiguration/Definitions/activation-blueprint.json"
+        JacksonUtils.jsonNodeFromFile(filePath)
     }
 
     @Test
@@ -68,4 +66,28 @@
         val nodeType = JacksonUtils.getListFromJson(content, String::class.java)
         assertNotNull(nodeType, "Failed to get String array from content")
     }
+
+
+    @Test
+    fun testJsonValue() {
+        val filePath = "data/alltype-data.json"
+        val rootJson = JacksonUtils.jsonNodeFromClassPathFile(filePath);
+        assertNotNull(rootJson, "Failed to get all type data json node")
+        val intValue = rootJson.get("intValue")
+        assertTrue(JacksonUtils.checkJsonNodeValueOfType(BluePrintConstants.DATA_TYPE_INTEGER, intValue), "Failed to get as int value")
+        val floatValue = rootJson.get("floatValue")
+        assertTrue(JacksonUtils.checkJsonNodeValueOfType(BluePrintConstants.DATA_TYPE_FLOAT, floatValue), "Failed to get as float value")
+        val stringValue = rootJson.get("stringValue")
+        assertTrue(JacksonUtils.checkJsonNodeValueOfType(BluePrintConstants.DATA_TYPE_STRING, stringValue), "Failed to get as string value")
+        val booleanValue = rootJson.get("booleanValue")
+        assertTrue(JacksonUtils.checkJsonNodeValueOfType(BluePrintConstants.DATA_TYPE_BOOLEAN, booleanValue), "Failed to get as boolean value")
+        val arrayStringValue = rootJson.get("arrayStringValue")
+        assertTrue(JacksonUtils.checkJsonNodeValueOfType(BluePrintConstants.DATA_TYPE_LIST, arrayStringValue), "Failed to get as List value")
+        val mapValue = rootJson.get("mapValue")
+        assertTrue(JacksonUtils.checkJsonNodeValueOfType(BluePrintConstants.DATA_TYPE_MAP, mapValue), "Failed to get as Map value")
+
+        assertTrue(!JacksonUtils.checkJsonNodeValueOfType(BluePrintConstants.DATA_TYPE_LIST, stringValue), "Negative type failed")
+
+
+    }
 }
\ No newline at end of file
diff --git a/ms/controllerblueprints/modules/core/src/test/resources/data/alltype-data.json b/ms/controllerblueprints/modules/core/src/test/resources/data/alltype-data.json
new file mode 100644
index 0000000..055b096
--- /dev/null
+++ b/ms/controllerblueprints/modules/core/src/test/resources/data/alltype-data.json
@@ -0,0 +1,10 @@
+{
+  "intValue" : 1,
+  "floatValue" : 1.34,
+  "booleanValue" : true,
+  "stringValue" : "sample-String",
+  "timeValue" : "2018-09-29",
+  "arrayStringValue" : ["one", "two"],
+  "mapValue" : {"profile_name1":"profile_name1",
+                "profile_name2":"profile_name2"}
+}
\ No newline at end of file
diff --git a/ms/controllerblueprints/modules/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/service/ResourceDictionaryValidationService.kt b/ms/controllerblueprints/modules/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/service/ResourceDictionaryValidationService.kt
index 5a1e381..81bb37d 100644
--- a/ms/controllerblueprints/modules/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/service/ResourceDictionaryValidationService.kt
+++ b/ms/controllerblueprints/modules/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/service/ResourceDictionaryValidationService.kt
@@ -20,12 +20,14 @@
 import com.fasterxml.jackson.databind.JsonNode
 import com.google.common.base.Preconditions
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintTypes
 import org.onap.ccsdk.apps.controllerblueprints.core.data.NodeTemplate
 import org.onap.ccsdk.apps.controllerblueprints.core.data.NodeType
 import org.onap.ccsdk.apps.controllerblueprints.core.data.PropertyDefinition
 import org.onap.ccsdk.apps.controllerblueprints.core.format
 import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintExpressionService
 import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRepoService
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceDefinition
 import org.slf4j.LoggerFactory
 import java.io.Serializable
@@ -43,12 +45,13 @@
 
     override fun validate(resourceDefinition: ResourceDefinition) {
         Preconditions.checkNotNull(resourceDefinition, "Failed to get Resource Definition")
+        log.trace("Validating Resource Dictionary Definition {}", resourceDefinition.name)
 
         resourceDefinition.sources.forEach { (name, nodeTemplate) ->
             val sourceType = nodeTemplate.type
 
             val sourceNodeType = bluePrintRepoService.getNodeType(sourceType)?.block()
-                    ?: throw BluePrintException(format("Failed to get node type definition for source({})", sourceType))
+                    ?: throw BluePrintException(format("Failed to get source({}) node type definition({})", name, sourceType))
 
             // Validate Property Name, expression, values and Data Type
             validateNodeTemplateProperties(nodeTemplate, sourceNodeType)
@@ -62,7 +65,7 @@
 
 
     open fun validatePropertyAssignments(nodeTypeProperties: MutableMap<String, PropertyDefinition>,
-                                    properties: MutableMap<String, JsonNode>) {
+                                         properties: MutableMap<String, JsonNode>) {
         properties.forEach { propertyName, propertyAssignment ->
             val propertyDefinition: PropertyDefinition = nodeTypeProperties[propertyName]
                     ?: throw BluePrintException(format("failed to get definition for the property ({})", propertyName))
@@ -70,12 +73,34 @@
             val expressionData = BluePrintExpressionService.getExpressionData(propertyAssignment)
             if (!expressionData.isExpression) {
                 checkPropertyValue(propertyDefinition, propertyName, propertyAssignment)
+            } else {
+                throw BluePrintException(format("property({}) of expression ({}) is not supported",
+                        propertyName, propertyAssignment))
             }
         }
     }
 
-    open fun checkPropertyValue(propertyDefinition: PropertyDefinition, propertyName: String, jsonNode: JsonNode) {
-        //log.info("validating Property {}, name ({}) value ({})", propertyDefinition, propertyName, jsonNode)
-        //TODO
+    open fun checkPropertyValue(propertyDefinition: PropertyDefinition, propertyName: String, propertyAssignment: JsonNode) {
+        val propertyType = propertyDefinition.type
+        var isValid = false
+
+        if (BluePrintTypes.validPrimitiveTypes().contains(propertyType)) {
+            isValid = JacksonUtils.checkJsonNodeValueOfPrimitiveType(propertyType, propertyAssignment)
+
+        } else if (BluePrintTypes.validCollectionTypes().contains(propertyType)) {
+
+            isValid = JacksonUtils.checkJsonNodeValueOfCollectionType(propertyType, propertyAssignment)
+        } else {
+            bluePrintRepoService.getDataType(propertyType)
+                    ?: throw BluePrintException(format("property({}) defined of data type({}) is not in repository",
+                            propertyName, propertyType))
+
+            isValid = true;
+        }
+
+        check(isValid) {
+            throw BluePrintException(format("property({}) defined of type({}) is not compatable with the value ({})",
+                    propertyName, propertyType, propertyAssignment))
+        }
     }
 }
\ No newline at end of file
diff --git a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/BluePrintRepoDBService.java b/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/BluePrintRepoDBService.java
index 4c11d8c..ae4fed9 100644
--- a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/BluePrintRepoDBService.java
+++ b/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/BluePrintRepoDBService.java
@@ -82,7 +82,7 @@
     }
 
     private Mono<String> getModelDefinitions(String modelName) throws BluePrintException {
-        String modelDefinition = null;
+        String modelDefinition;
         Optional<ModelType> modelTypeDb = modelTypeRepository.findByModelName(modelName);
         if (modelTypeDb.isPresent()) {
             modelDefinition = modelTypeDb.get().getDefinition();
diff --git a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/ConfigModelCreateService.java b/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/ConfigModelCreateService.java
index 7e96f2f..e40c2cf 100644
--- a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/ConfigModelCreateService.java
+++ b/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/ConfigModelCreateService.java
@@ -1,5 +1,6 @@
 /*
  * Copyright © 2017-2018 AT&T Intellectual Property.
+ * Modifications Copyright © 2018 IBM.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -138,7 +139,7 @@
             if (StringUtils.isBlank(artifactVersion)) {
                 throw new BluePrintException("Artifact Version is missing in the Service Template");
             }
-            ConfigModel updateConfigModel = null;
+            ConfigModel updateConfigModel;
 
             Optional<ConfigModel> dbConfigModelOptional = Optional.empty();
 
diff --git a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/ConfigModelService.java b/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/ConfigModelService.java
index feee3a3..b729e3e 100644
--- a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/ConfigModelService.java
+++ b/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/ConfigModelService.java
@@ -1,5 +1,6 @@
 /*
  * Copyright © 2017-2018 AT&T Intellectual Property.
+ * Modifications Copyright © 2018 IBM.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -144,7 +145,7 @@
      */
     public ConfigModel getConfigModelByNameAndVersion(String name, String version) {
         ConfigModel configModel = null;
-        Optional<ConfigModel> dbConfigModel = null;
+        Optional<ConfigModel> dbConfigModel;
         if (StringUtils.isNotBlank(version)) {
             dbConfigModel = configModelRepository.findByArtifactNameAndArtifactVersion(name, version);
         } else {
@@ -182,7 +183,7 @@
 
     public ConfigModel getCloneConfigModel(Long id) {
 
-        ConfigModel configModel = null;
+        ConfigModel configModel;
         ConfigModel cloneConfigModel = null;
         if (id != null) {
             Optional<ConfigModel> dbConfigModel = configModelRepository.findById(id);
diff --git a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/DataBaseInitService.java b/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/DataBaseInitService.java
index 3a5c4fd..4b732cc 100644
--- a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/DataBaseInitService.java
+++ b/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/DataBaseInitService.java
@@ -115,31 +115,28 @@
         try {
             Resource[] dataTypefiles = getPathResources(dataTypePath, ".json");
             StrBuilder errorBuilder = new StrBuilder();
-            if (dataTypefiles != null) {
                 for (Resource file : dataTypefiles) {
                     if (file != null) {
                         loadDataType(file, errorBuilder);
                     }
                 }
-            }
 
             Resource[] nodeTypefiles = getPathResources(nodeTypePath, ".json");
-            if (nodeTypefiles != null) {
-                for (Resource file : nodeTypefiles) {
+                       for (Resource file : nodeTypefiles) {
                     if (file != null) {
                         loadNodeType(file, errorBuilder);
                     }
                 }
-            }
+
 
             Resource[] artifactTypefiles = getPathResources(artifactTypePath, ".json");
-            if (artifactTypefiles != null) {
+
                 for (Resource file : artifactTypefiles) {
                     if (file != null) {
                         loadArtifactType(file, errorBuilder);
                     }
                 }
-            }
+
 
             if (!errorBuilder.isEmpty()) {
                 log.error(errorBuilder.toString());
@@ -154,9 +151,9 @@
                 " *************************** loadResourceDictionary **********************");
         try {
             Resource[] dataTypefiles = getPathResources(resourceDictionaryPath, ".json");
-            if (dataTypefiles != null) {
+
                 StrBuilder errorBuilder = new StrBuilder();
-                String fileName = null;
+                String fileName;
                 for (Resource file : dataTypefiles) {
                     try {
                         fileName = file.getFilename();
@@ -201,7 +198,7 @@
                     log.error(errorBuilder.toString());
                 }
 
-            }
+
         } catch (Exception e) {
             log.error(
                     "Failed in Resource dictionary loading", e);
@@ -248,6 +245,7 @@
             String nodeKey = file.getFilename().replace(".json", "");
             String definitionContent = getResourceContent(file);
             NodeType nodeType = JacksonUtils.readValue(definitionContent, NodeType.class);
+            Preconditions.checkNotNull(nodeType, String.format("failed to get node type from file : %s", file.getFilename()));
             ModelType modelType = new ModelType();
             modelType.setDefinitionType(BluePrintConstants.MODEL_DEFINITION_TYPE_NODE_TYPE);
             modelType.setDerivedFrom(nodeType.getDerivedFrom());
@@ -271,6 +269,7 @@
             String dataKey = file.getFilename().replace(".json", "");
             String definitionContent = getResourceContent(file);
             DataType dataType = JacksonUtils.readValue(definitionContent, DataType.class);
+            Preconditions.checkNotNull(dataType, String.format("failed to get data type from file : %s", file.getFilename()));
             ModelType modelType = new ModelType();
             modelType.setDefinitionType(BluePrintConstants.MODEL_DEFINITION_TYPE_DATA_TYPE);
             modelType.setDerivedFrom(dataType.getDerivedFrom());
@@ -294,6 +293,7 @@
             String dataKey = file.getFilename().replace(".json", "");
             String definitionContent = getResourceContent(file);
             ArtifactType artifactType = JacksonUtils.readValue(definitionContent, ArtifactType.class);
+            Preconditions.checkNotNull(artifactType, String.format("failed to get artifact type from file : %s", file.getFilename()));
             ModelType modelType = new ModelType();
             modelType.setDefinitionType(BluePrintConstants.MODEL_DEFINITION_TYPE_ARTIFACT_TYPE);
             modelType.setDerivedFrom(artifactType.getDerivedFrom());
diff --git a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/ResourceDictionaryService.java b/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/ResourceDictionaryService.java
index 629b94c..85e701b 100644
--- a/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/ResourceDictionaryService.java
+++ b/ms/controllerblueprints/modules/service/src/main/java/org/onap/ccsdk/apps/controllerblueprints/service/ResourceDictionaryService.java
@@ -20,7 +20,6 @@
 import com.google.common.base.Preconditions;
 import org.apache.commons.lang3.StringUtils;
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException;
-import org.onap.ccsdk.apps.controllerblueprints.core.data.EntrySchema;
 import org.onap.ccsdk.apps.controllerblueprints.core.data.PropertyDefinition;
 import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils;
 import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceDefinition;
@@ -119,6 +118,7 @@
 
         ResourceDefinition resourceDefinition =
                 JacksonUtils.readValue(resourceDictionary.getDefinition(), ResourceDefinition.class);
+        Preconditions.checkNotNull(resourceDefinition, "failed to get resource definition from content");
         // Validate the Resource Definitions
         resourceDictionaryValidationService.validate(resourceDefinition);
 
