- [DCAEGEN2-2254](https://jira.onap.org/browse/DCAEGEN2-2254) - Add new data-format for 30.2_ONAP schema version
 ## [1.7.2] - 04/08/2020
         - [DCAEGEN2-1771](https://jira.onap.org/browse/DCAEGEN2-1771) - Add StndDefined event routing to dmaap streams defined in namespace event field - no second stage event validation.
+        - [DCAEGEN2-1771](https://jira.onap.org/browse/DCAEGEN2-1771) - Fix error response model
+        - [DCAEGEN2-1771](https://jira.onap.org/browse/DCAEGEN2-1771) - Update DPO model
 
   "collector.dynamic.config.update.frequency": "5",
   "event.transform.flag": "0",
   "collector.schema.checkflag": "1",
-  "collector.dmaap.streamid": "fault=ves-fault|syslog=ves-syslog|heartbeat=ves-heartbeat|measurementsForVfScaling=ves-measurement|mobileFlow=ves-mobileflow|other=ves-other|stateChange=ves-statechange|thresholdCrossingAlert=ves-thresholdCrossingAlert|voiceQuality=ves-voicequality|sipSignaling=ves-sipsignaling|notification=ves-notification|pnfRegistration=ves-pnfRegistration|stndDefined=ves-other",
+  "collector.dmaap.streamid": "fault=ves-fault|syslog=ves-syslog|heartbeat=ves-heartbeat|measurementsForVfScaling=ves-measurement|mobileFlow=ves-mobileflow|other=ves-other|stateChange=ves-statechange|thresholdCrossingAlert=ves-thresholdCrossingAlert|voiceQuality=ves-voicequality|sipSignaling=ves-sipsignaling|notification=ves-notification|pnfRegistration=ves-pnfRegistration|3GPP-FaultSupervision=ves-3gpp-fault-supervision|3GPP-Heartbeat=ves-3gpp-heartbeat|3GPP-Provisioning=ves-3gpp-provisioning|3GPP-PerformanceAssurance=ves-3gpp-performance-assurance",
   "collector.service.port": "8080",
   "collector.schema.file": "{\"v1\":\"./etc/CommonEventFormat_27.2.json\",\"v2\":\"./etc/CommonEventFormat_27.2.json\",\"v3\":\"./etc/CommonEventFormat_27.2.json\",\"v4\":\"./etc/CommonEventFormat_27.2.json\",\"v5\":\"./etc/CommonEventFormat_28.4.1.json\",\"v7\":\"./etc/CommonEventFormat_30.2_ONAP.json\"}",
   "collector.keystore.passwordfile": "/opt/app/VESCollector/etc/passwordfile",
       "dmaap_info": {
         "topic_url": "http://message-router:3904/events/unauthenticated.VES_NOTIFICATION_OUTPUT/"
       }
+    },
+    "ves-3gpp-fault-supervision": {
+      "type": "message_router",
+      "dmaap_info": {
+        "topic_url": "http://message-router:3904/events/unauthenticated.SEC_3GPP_FAULTSUPERVISION_OUTPUT/"
+      }
+    },
+    "ves-3gpp-provisioning": {
+      "type": "message_router",
+      "dmaap_info": {
+        "topic_url": "http://message-router:3904/events/unauthenticated.SEC_3GPP_PROVISIONING_OUTPUT/"
+      }
+    },
+    "ves-3gpp-heartbeat": {
+      "type": "message_router",
+      "dmaap_info": {
+        "topic_url": "http://message-router:3904/events/unauthenticated.SEC_3GPP_HEARTBEAT_OUTPUT/"
+      }
+    },
+    "ves-3gpp-performance-assurance": {
+      "type": "message_router",
+      "dmaap_info": {
+        "topic_url": "http://message-router:3904/events/unauthenticated.SEC_3GPP_PERFORMANCEASSURANCE_OUTPUT/"
+      }
     }
   },
   "collector.service.secure.port": "8443",
 
       "topic_url": "http://dmaap-mr-hostname:3904/events/DCAE-SE-COLLECTOR-EVENTS-DEV"
     }
   },
+  "ves_3gpp_fault_supervision": {
+    "type": "message_router",
+    "dmaap_info": {
+      "location": "mtl5",
+      "topic_url": "http://dmaap-mr-hostname:3904/events/DCAE-SE-COLLECTOR-EVENTS-DEV"
+    }
+  },
+  "ves_3gpp_provisioning": {
+    "type": "message_router",
+    "dmaap_info": {
+      "location": "mtl5",
+      "topic_url": "http://dmaap-mr-hostname:3904/events/DCAE-SE-COLLECTOR-EVENTS-DEV"
+    }
+  },
+  "ves_3gpp_heartbeat": {
+    "type": "message_router",
+    "dmaap_info": {
+      "location": "mtl5",
+      "topic_url": "http://dmaap-mr-hostname:3904/events/DCAE-SE-COLLECTOR-EVENTS-DEV"
+    }
+  },
+  "ves_3gpp_performance_assurance": {
+    "type": "message_router",
+    "dmaap_info": {
+      "location": "mtl5",
+      "topic_url": "http://dmaap-mr-hostname:3904/events/DCAE-SE-COLLECTOR-EVENTS-DEV"
+    }
+  },
   "ves_syslog_secondary": {
     "type": "message_router",
     "dmaap_info": {
       "location": "mtl5",
       "topic_url": "http://dmaap-mr-hostname:3904/events/DCAE-SE-COLLECTOR-EVENTS-DEV"
     }
+  },
+  "ves_3gpp_fault_supervision_secondary": {
+    "type": "message_router",
+    "dmaap_info": {
+      "location": "mtl5",
+      "topic_url": "http://dmaap-mr-hostname:3904/events/DCAE-SE-COLLECTOR-EVENTS-DEV"
+    }
+  },
+  "ves_3gpp_provisioning_secondary": {
+    "type": "message_router",
+    "dmaap_info": {
+      "location": "mtl5",
+      "topic_url": "http://dmaap-mr-hostname:3904/events/DCAE-SE-COLLECTOR-EVENTS-DEV"
+    }
+  },
+  "ves_3gpp_heartbeat_secondary": {
+    "type": "message_router",
+    "dmaap_info": {
+      "location": "mtl5",
+      "topic_url": "http://dmaap-mr-hostname:3904/events/DCAE-SE-COLLECTOR-EVENTS-DEV"
+    }
+  },
+  "ves_3gpp_performance_assurance_secondary": {
+    "type": "message_router",
+    "dmaap_info": {
+      "location": "mtl5",
+      "topic_url": "http://dmaap-mr-hostname:3904/events/DCAE-SE-COLLECTOR-EVENTS-DEV"
+    }
   }
 }
 
         "version": "7.30.2",
         "type": "message router",
         "config_key": "ves-perf3gpp"
+      },
+      {
+        "format": "VES_specification",
+        "version": "7.30.2",
+        "type": "message router",
+        "config_key": "ves-3gpp-fault-supervision"
+      },
+      {
+        "format": "VES_specification",
+        "version": "7.30.2",
+        "type": "message router",
+        "config_key": "ves-3gpp-provisioning"
+      },
+      {
+        "format": "VES_specification",
+        "version": "7.30.2",
+        "type": "message router",
+        "config_key": "ves-3gpp-heartbeat"
+      },
+      {
+        "format": "VES_specification",
+        "version": "7.30.2",
+        "type": "message router",
+        "config_key": "ves-3gpp-performance-assurance"
       }
     ]
   },
 
 import com.google.common.base.CaseFormat;
 import org.json.JSONObject;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * @author Pawel Szalapski (pawel.szalapski@nokia.com)
  */
     INVALID_CONTENT_TYPE(ExceptionType.SERVICE_EXCEPTION, "SVC0002", "Bad Parameter (Incorrect request Content-Type)", 400),
     UNAUTHORIZED_USER(ExceptionType.POLICY_EXCEPTION, "POL2000", "Unauthorized user", 401),
     INVALID_CUSTOM_HEADER(ExceptionType.SERVICE_EXCEPTION, "SVC0002", "Bad Parameter (Incorrect request api version)", 400),
-    MISSING_NAMESPACE_PARAMETER(ExceptionType.SERVICE_EXCEPTION, "SVC2006", "Mandatory input attribute event.commonEventHeader.stndDefinedNamespace is missing from request", 400),
-    EMPTY_NAMESPACE_PARAMETER(ExceptionType.SERVICE_EXCEPTION, "SVC2006", "Mandatory input attribute event.commonEventHeader.stndDefinedNamespace is empty in request", 400),
+    MISSING_NAMESPACE_PARAMETER(ExceptionType.SERVICE_EXCEPTION, "SVC2006", "Mandatory input %1 %2 is missing from request", List.of("attribute", "event.commonEventHeader.stndDefinedNamespace"), 400),
+    EMPTY_NAMESPACE_PARAMETER(ExceptionType.SERVICE_EXCEPTION, "SVC2006", "Mandatory input %1 %2 is empty in request", List.of("attribute", "event.commonEventHeader.stndDefinedNamespace"), 400),
     NO_SERVER_RESOURCES(ExceptionType.SERVICE_EXCEPTION, "SVC1000", "No server resources (internal processing queue full)", 503);
 
     public final int httpStatusCode;
     private final ExceptionType type;
     private final String code;
     private final String details;
+    private final List<String> variables;
 
     ApiException(ExceptionType type, String code, String details, int httpStatusCode) {
+        this(type, code, details, new ArrayList<>(), httpStatusCode);
+    }
+
+    ApiException(ExceptionType type, String code, String details, List<String> variables, int httpStatusCode) {
         this.type = type;
         this.code = code;
         this.details = details;
+        this.variables = variables;
         this.httpStatusCode = httpStatusCode;
     }
 
         JSONObject exceptionTypeNode = new JSONObject();
         exceptionTypeNode.put("messageId", code);
         exceptionTypeNode.put("text", details);
+        if(!variables.isEmpty()) {
+            exceptionTypeNode.put("variables", variables);
+        }
 
         JSONObject requestErrorNode = new JSONObject();
         requestErrorNode.put(type.toString(), exceptionTypeNode);
 
         verifyErrorResponse(
                 response,
                 "SVC2006",
-                "Mandatory input attribute event.commonEventHeader.stndDefinedNamespace is missing from request"
+                "Mandatory input %1 %2 is missing from request",
+                List.of("attribute", "event.commonEventHeader.stndDefinedNamespace")
         );
         verifyThatEventWasNotSend();
     }
         verifyErrorResponse(
                 response,
                 "SVC2006",
-                "Mandatory input attribute event.commonEventHeader.stndDefinedNamespace is empty in request"
+                "Mandatory input %1 %2 is empty in request",
+                List.of("attribute", "event.commonEventHeader.stndDefinedNamespace")
         );
         verifyThatEventWasNotSend();
     }
         when(applicationSettings.jsonSchema(eq(VERSION_V7))).thenReturn(loadedJsonSchemas.get(VERSION_V7).get());
     }
 
-    private void verifyErrorResponse(ResponseEntity<String> response, String messageId, String messageText) throws com.fasterxml.jackson.core.JsonProcessingException {
-        final Map<String, String> errorDetails = fetchErrorDetails(response);
-        assertThat(errorDetails).containsEntry("messageId", messageId);
-        assertThat(errorDetails).containsEntry("text", messageText);
+    private void verifyErrorResponse(ResponseEntity<String> response, String messageId, String messageText, List<String> variables) throws com.fasterxml.jackson.core.JsonProcessingException {
+        final Map<String, ?> errorDetails = fetchErrorDetails(response);
+        assertThat((Map<String, String>)errorDetails).containsEntry("messageId", messageId);
+        assertThat((Map<String, String>)errorDetails).containsEntry("text", messageText);
+        assertThat((Map<String, List<String>>)errorDetails).containsEntry("variables",  variables);
     }
 
-    private Map<String, String> fetchErrorDetails(ResponseEntity<String> response) throws com.fasterxml.jackson.core.JsonProcessingException {
+    private Map<String, ?> fetchErrorDetails(ResponseEntity<String> response) throws com.fasterxml.jackson.core.JsonProcessingException {
         final String body = response.getBody();
         ObjectMapper mapper = new ObjectMapper();
         Map<String, Map<String, Map<String,String>>> map = mapper.readValue(body, Map.class);