diff --git a/src/main/ajsc/model-loader_v1/model-loader/v1/conf/modelLoaderBeans.groovy b/src/main/ajsc/model-loader_v1/model-loader/v1/conf/modelLoaderBeans.groovy
new file mode 100644
index 0000000..2162213
--- /dev/null
+++ b/src/main/ajsc/model-loader_v1/model-loader/v1/conf/modelLoaderBeans.groovy
@@ -0,0 +1,31 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * MODEL LOADER SERVICE
+ * ================================================================================
+ * Copyright (C) 2017 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.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+beans{
+	xmlns cxf: "http://camel.apache.org/schema/cxf"
+	xmlns jaxrs: "http://cxf.apache.org/jaxrs"
+	xmlns util: "http://www.springframework.org/schema/util"
+	
+	modelLoader(org.openecomp.modelloader.service.ModelLoaderService)
+	
+	util.list(id: 'modelLoaderServices') {
+		ref(bean:'modelLoader')
+	}
+}
diff --git a/src/main/ajsc/model-loader_v1/model-loader/v1/docs/README.txt b/src/main/ajsc/model-loader_v1/model-loader/v1/docs/README.txt
new file mode 100644
index 0000000..508361d
--- /dev/null
+++ b/src/main/ajsc/model-loader_v1/model-loader/v1/docs/README.txt
@@ -0,0 +1,21 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * MODEL LOADER SERVICE
+ * ================================================================================
+ * Copyright (C) 2017 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.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+Place any docs here that you want to access within the ajsc upon deployment of your service.
diff --git a/src/main/ajsc/model-loader_v1/model-loader/v1/lib/README.txt b/src/main/ajsc/model-loader_v1/model-loader/v1/lib/README.txt
new file mode 100644
index 0000000..f80be9b
--- /dev/null
+++ b/src/main/ajsc/model-loader_v1/model-loader/v1/lib/README.txt
@@ -0,0 +1,21 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * MODEL LOADER SERVICE
+ * ================================================================================
+ * Copyright (C) 2017 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.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+3rd party JAR's needed by your jars (if any) for a ajsc deployment package go here...
diff --git a/src/main/docker/startup.sh b/src/main/ajsc/model-loader_v1/model-loader/v1/props/module.props
similarity index 83%
rename from src/main/docker/startup.sh
rename to src/main/ajsc/model-loader_v1/model-loader/v1/props/module.props
index c4a4d5f..aab4afa 100644
--- a/src/main/docker/startup.sh
+++ b/src/main/ajsc/model-loader_v1/model-loader/v1/props/module.props
@@ -1,27 +1,21 @@
-###
+###
 # ============LICENSE_START=======================================================
 # MODEL LOADER SERVICE
 # ================================================================================
 # Copyright (C) 2017 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.
-# You may obtain a copy of the License at
-# 
-#      http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+#      http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
 # limitations under the License.
-# ============LICENSE_END=========================================================
-###
-
-BIN_DIR=`dirname $0`
-
-echo "Checking environment for configuration options"
-$BIN_DIR/update_config.sh
-
-echo "Starting up model loader..."
-$BIN_DIR/jetty.sh run > /dev/null 2>&1
+# ============LICENSE_END=========================================================
+###
+
+EXAMPLE.PROPERTY=EXAMLE_VALUE
diff --git a/src/main/webapp/WEB-INF/applicationContext.xml b/src/main/ajsc/model-loader_v1/model-loader/v1/routes/modelLoader.route
similarity index 61%
rename from src/main/webapp/WEB-INF/applicationContext.xml
rename to src/main/ajsc/model-loader_v1/model-loader/v1/routes/modelLoader.route
index 08a88e6..170c466 100644
--- a/src/main/webapp/WEB-INF/applicationContext.xml
+++ b/src/main/ajsc/model-loader_v1/model-loader/v1/routes/modelLoader.route
@@ -1,29 +1,24 @@
-<!--
+<!--
   ============LICENSE_START=======================================================
   MODEL LOADER SERVICE
   ================================================================================
   Copyright (C) 2017 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.
-  You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+  
+       http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
   limitations under the License.
-  ============LICENSE_END=========================================================
-  -->
-
-<beans xmlns="http://www.springframework.org/schema/beans"
-    xmlns:context="http://www.springframework.org/schema/context"
-    xmlns:mvc="http://www.springframework.org/schema/mvc"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
-    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
-    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
-
-</beans>
+  ============LICENSE_END=========================================================
+  -->
+
+<route xmlns="http://camel.apache.org/schema/spring" trace="true">
+  <from uri="att-dme2-servlet:///__module_ajsc_namespace_name__/__module_ajsc_namespace_version__/model-service?matchOnUriPrefix=true" />
+  <to uri="cxfbean:modelLoaderServices" />
+</route>
diff --git a/src/main/assemble/ajsc_module_assembly.xml b/src/main/assemble/ajsc_module_assembly.xml
new file mode 100644
index 0000000..520870f
--- /dev/null
+++ b/src/main/assemble/ajsc_module_assembly.xml
@@ -0,0 +1,86 @@
+<!--
+  ============LICENSE_START=======================================================
+  MODEL LOADER SERVICE
+  ================================================================================
+  Copyright (C) 2017 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.
+  You may obtain a copy of the License at
+  
+       http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  ============LICENSE_END=========================================================
+  -->
+
+<assembly
+	xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
+	<id>${version}</id>
+	<includeBaseDirectory>false</includeBaseDirectory>
+	<formats>
+		<format>zip</format>
+	</formats>
+	<fileSets>
+		<fileSet>
+			<directory>${project.basedir}/target/versioned-ajsc/routes/</directory>
+			<outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/routes/</outputDirectory>
+			<includes>
+				<include>*.route</include>
+			</includes>
+
+		</fileSet>
+
+		<fileSet>
+			<directory>${project.basedir}/target/versioned-ajsc/docs/</directory>
+			<outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/docs/</outputDirectory>
+			<includes>
+				<include>*.*</include>
+				<!-- <include>*.vm</include>  -->
+			</includes>
+
+		</fileSet>
+
+		<fileSet>
+			<directory>${project.basedir}/target/versioned-ajsc/lib/</directory>
+			<outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/lib/</outputDirectory>
+			<includes>
+				<include>*.jar</include>
+			</includes>
+
+		</fileSet>
+		<fileSet>
+			<directory>${project.basedir}/target/versioned-ajsc/extJars/</directory>
+			<outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/extJars/</outputDirectory>
+			<includes>
+				<include>*.jar</include>
+			</includes>
+		</fileSet>
+		
+		<!-- also try to grab outputs from the "jar" plugin's package phase -->
+		<fileSet>
+			<directory>${project.basedir}/target/</directory>
+			<outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/lib/</outputDirectory>
+			<includes>
+				<include>*.jar</include>
+			</includes>
+		</fileSet>
+
+		<fileSet>
+			<directory>${project.basedir}/target/versioned-ajsc/conf/</directory>
+			<outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/conf/</outputDirectory>
+			<includes>
+				<include>*.*</include>
+			</includes>
+
+		</fileSet>
+	</fileSets>
+
+</assembly>
+
diff --git a/src/main/assemble/ajsc_props_assembly.xml b/src/main/assemble/ajsc_props_assembly.xml
new file mode 100644
index 0000000..e26497b
--- /dev/null
+++ b/src/main/assemble/ajsc_props_assembly.xml
@@ -0,0 +1,43 @@
+<!--
+  ============LICENSE_START=======================================================
+  MODEL LOADER SERVICE
+  ================================================================================
+  Copyright (C) 2017 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.
+  You may obtain a copy of the License at
+  
+       http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  ============LICENSE_END=========================================================
+  -->
+
+<assembly
+	xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
+	<id>${version}_properties</id>
+	<includeBaseDirectory>false</includeBaseDirectory>
+	<formats>
+		<format>zip</format>
+	</formats>
+	<fileSets>
+		<fileSet>
+			<directory>${project.basedir}/target/versioned-ajsc/props</directory>
+			<outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/props/</outputDirectory>
+			<includes>
+				<include>*.props</include>
+			</includes>
+
+		</fileSet>
+
+	</fileSets>
+
+</assembly>
+
diff --git a/src/main/assemble/ajsc_runtime_assembly.xml b/src/main/assemble/ajsc_runtime_assembly.xml
new file mode 100644
index 0000000..c5c515a
--- /dev/null
+++ b/src/main/assemble/ajsc_runtime_assembly.xml
@@ -0,0 +1,64 @@
+<!--
+  ============LICENSE_START=======================================================
+  MODEL LOADER SERVICE
+  ================================================================================
+  Copyright (C) 2017 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.
+  You may obtain a copy of the License at
+  
+       http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  ============LICENSE_END=========================================================
+  -->
+
+<assembly
+	xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
+	<id>runtimeEnvironment</id>
+	<includeBaseDirectory>false</includeBaseDirectory>
+	<formats>
+		<format>zip</format>
+	</formats>
+	<fileSets>
+		<fileSet>
+			<directory>${project.basedir}/target/versioned-runtime/context/</directory>
+			<outputDirectory>runtime/context/</outputDirectory>
+			<includes>
+				<include>*.context</include>
+			</includes>
+		</fileSet>
+		<fileSet>
+			<directory>${project.basedir}/target/versioned-runtime/serviceProperties/</directory>
+			<outputDirectory>runtime/serviceProperties/</outputDirectory>
+			<includes>
+				<include>*.props</include>
+			</includes>
+		</fileSet><fileSet>
+			<directory>${project.basedir}/target/versioned-runtime/shiroRole</directory>
+			<outputDirectory>runtime/shiroRole/</outputDirectory>
+			<includes>
+				<include>*.json</include>
+			</includes>
+		</fileSet><fileSet>
+			<directory>${project.basedir}/target/versioned-runtime/shiroUser</directory>
+			<outputDirectory>runtime/shiroUser/</outputDirectory>
+			<includes>
+				<include>*.json</include>
+			</includes>
+		</fileSet><fileSet>
+			<directory>${project.basedir}/target/versioned-runtime/shiroUserRole</directory>
+			<outputDirectory>runtime/shiroUserRole</outputDirectory>
+			<includes>
+				<include>*.json</include>
+			</includes>
+		</fileSet>
+	</fileSets>
+</assembly>
diff --git a/src/main/bin/start.sh b/src/main/bin/start.sh
new file mode 100644
index 0000000..07f707e
--- /dev/null
+++ b/src/main/bin/start.sh
@@ -0,0 +1,45 @@
+###
+# ============LICENSE_START=======================================================
+# MODEL LOADER SERVICE
+# ================================================================================
+# Copyright (C) 2017 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.
+# You may obtain a copy of the License at
+# 
+#      http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=========================================================
+###
+
+#!/bin/sh
+
+BASEDIR="/opt/app/model-loader/"
+AJSC_HOME="$BASEDIR"
+
+if [ -z "$CONFIG_HOME" ]; then
+	echo "CONFIG_HOME must be set in order to start up process"
+	exit 1
+fi
+
+CLASSPATH="$AJSC_HOME/lib/*"
+CLASSPATH="$CLASSPATH:$AJSC_HOME/extJars/"
+CLASSPATH="$CLASSPATH:$AJSC_HOME/etc/"
+PROPS="-DAJSC_HOME=$AJSC_HOME"
+PROPS="$PROPS -DAJSC_CONF_HOME=$BASEDIR/bundleconfig/"
+PROPS="$PROPS -Dlogback.configurationFile=$BASEDIR/bundleconfig/etc/logback.xml"
+PROPS="$PROPS -DAJSC_SHARED_CONFIG=$AJSC_CONF_HOME"
+PROPS="$PROPS -DAJSC_SERVICE_NAMESPACE=model-loader"
+PROPS="$PROPS -DAJSC_SERVICE_VERSION=v1"
+PROPS="$PROPS -Dserver.port=8080"
+PROPS="$PROPS -DCONFIG_HOME=$CONFIG_HOME"
+
+echo $CLASSPATH
+
+java -Xms1024m -Xmx4096m -XX:PermSize=2024m $PROPS -classpath $CLASSPATH com.att.ajsc.runner.Runner context=// sslport=8081
diff --git a/src/main/config/ajsc-chef.jks b/src/main/config/ajsc-chef.jks
new file mode 100644
index 0000000..aeca770
--- /dev/null
+++ b/src/main/config/ajsc-chef.jks
Binary files differ
diff --git a/src/main/config/ajsc-jetty.xml b/src/main/config/ajsc-jetty.xml
new file mode 100644
index 0000000..43741bd
--- /dev/null
+++ b/src/main/config/ajsc-jetty.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0"  encoding="UTF-8"?>
+<!--
+  ============LICENSE_START=======================================================
+  MODEL LOADER SERVICE
+  ================================================================================
+  Copyright (C) 2017 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.
+  You may obtain a copy of the License at
+  
+       http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  ============LICENSE_END=========================================================
+  -->
+
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
+<Configure id="ajsc-server" class="org.eclipse.jetty.server.Server">
+	<!-- DO NOT REMOVE!!!! This is setting up the AJSC Context -->
+	<New id="ajscContext" class="org.eclipse.jetty.webapp.WebAppContext">
+		<Set name="contextPath"><SystemProperty name="AJSC_CONTEXT_PATH" /></Set>
+		<Set name="extractWAR">true</Set>
+		<Set name="tempDirectory"><SystemProperty name="AJSC_TEMP_DIR" /></Set>
+		<Set name="war"><SystemProperty name="AJSC_WAR_PATH" /></Set>
+		<Set name="descriptor"><SystemProperty name="AJSC_HOME" />/etc/runner-web.xml</Set>
+		<Set name="overrideDescriptor"><SystemProperty name="AJSC_HOME" />/etc/ajsc-override-web.xml</Set>
+		<Set name="throwUnavailableOnStartupException">true</Set>
+		<Set name="servletHandler">
+			<New class="org.eclipse.jetty.servlet.ServletHandler">
+				<Set name="startWithUnavailable">false</Set>
+			</New>
+		</Set>
+		<Set name="extraClasspath"><SystemProperty name="AJSC_HOME" />/extJars/httpclient-4.5.jar,<SystemProperty name="AJSC_HOME" />/extJars/httpcore-4.4.1.jar,<SystemProperty name="AJSC_HOME" />/extJars/json-20131018.jar</Set>
+	</New>
+	
+	<Set name="handler">
+		<New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection">
+			<Set name="Handlers">
+				<Array type="org.eclipse.jetty.webapp.WebAppContext">
+					<Item>
+						<Ref refid="ajscContext" />
+					</Item>
+				</Array>
+			</Set>
+		</New>
+	</Set>
+	
+	<Call name="addBean">
+		<Arg>
+			<New id="DeploymentManager" class="org.eclipse.jetty.deploy.DeploymentManager">
+				<Set name="contexts">
+					<Ref refid="Contexts" />
+				</Set>
+				<Call id="extAppHotDeployProvider" name="addAppProvider">
+					<Arg>
+						<New class="org.eclipse.jetty.deploy.providers.WebAppProvider">
+							<Set name="monitoredDirName"><SystemProperty name="AJSC_HOME" />/extApps</Set>
+							<Set name="scanInterval">10</Set>
+							<Set name="extractWars">true</Set>
+						</New>
+					</Arg>
+				</Call>
+			</New>
+		</Arg>
+	</Call>
+	
+	<Call name="addConnector">
+		<Arg>
+			<New class="org.eclipse.jetty.server.ServerConnector">
+				<Arg name="server">
+					<Ref refid="ajsc-server" />
+				</Arg>
+				<Set name="port"><SystemProperty name="AJSC_HTTP_PORT" default="80" /></Set>
+			</New>
+		</Arg>
+	</Call>
+	
+	<Get name="ThreadPool">
+		<Set name="minThreads"><SystemProperty name="AJSC_JETTY_ThreadCount_MIN" /></Set>
+		<Set name="maxThreads"><SystemProperty name="AJSC_JETTY_ThreadCount_MAX" /></Set>
+		<Set name="idleTimeout"><SystemProperty name="AJSC_JETTY_IDLETIME_MAX" /></Set>
+		<Set name="detailedDump">false</Set>
+	</Get>
+	
+</Configure>
diff --git a/src/main/config/ajsc-override-web.xml b/src/main/config/ajsc-override-web.xml
new file mode 100644
index 0000000..b0d44f3
--- /dev/null
+++ b/src/main/config/ajsc-override-web.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+  ============LICENSE_START=======================================================
+  MODEL LOADER SERVICE
+  ================================================================================
+  Copyright (C) 2017 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.
+  You may obtain a copy of the License at
+  
+       http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  ============LICENSE_END=========================================================
+  -->
+
+<!-- 
+ Copyright (c) 2016 AT&T Intellectual Property. All rights reserved.
+-->
+<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
+	metadata-complete="false" version="3.0">
+
+	<filter-mapping>
+		<filter-name>InterceptorFilter</filter-name>
+		<url-pattern>/services/*</url-pattern>
+	</filter-mapping> 
+	<filter-mapping>
+		<filter-name>InterceptorFilter</filter-name>
+		<url-pattern>/rest/*</url-pattern>
+ 	</filter-mapping>  
+
+	<filter-mapping>
+		<filter-name>springSecurityFilterChain</filter-name>
+		<url-pattern>/*</url-pattern>
+	</filter-mapping>
+		
+	<servlet-mapping>
+		<servlet-name>ManagementServlet</servlet-name>
+		<url-pattern>/mgmt</url-pattern>
+	</servlet-mapping>
+	 
+	 <servlet-mapping>
+			<servlet-name>RestletServlet</servlet-name>
+			<url-pattern>/rest/*</url-pattern>
+	</servlet-mapping>
+
+ 	<servlet-mapping>
+		<servlet-name>CamelServlet</servlet-name>
+		<url-pattern>/services/*</url-pattern>
+	</servlet-mapping>
+
+	<servlet-mapping>
+		<servlet-name>jsp</servlet-name>
+		<url-pattern>*.jsp</url-pattern>
+		<url-pattern>*.jspf</url-pattern>
+		<url-pattern>*.jspx</url-pattern>
+		<url-pattern>*.xsp</url-pattern>
+		<url-pattern>*.JSP</url-pattern>
+		<url-pattern>*.JSPF</url-pattern>
+		<url-pattern>*.JSPX</url-pattern>
+		<url-pattern>*.XSP</url-pattern>
+	</servlet-mapping>
+	<servlet-mapping>
+		<servlet-name>default</servlet-name>
+		<url-pattern>/*</url-pattern>
+	</servlet-mapping>
+</web-app>
diff --git a/src/main/config/ajscJetty.jks b/src/main/config/ajscJetty.jks
new file mode 100644
index 0000000..48cdbff
--- /dev/null
+++ b/src/main/config/ajscJetty.jks
Binary files differ
diff --git a/src/main/config/cadi.properties b/src/main/config/cadi.properties
new file mode 100644
index 0000000..c3b8b14
--- /dev/null
+++ b/src/main/config/cadi.properties
@@ -0,0 +1,56 @@
+###
+# ============LICENSE_START=======================================================
+# MODEL LOADER SERVICE
+# ================================================================================
+# Copyright (C) 2017 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.
+# You may obtain a copy of the License at
+# 
+#      http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=========================================================
+###
+
+#This properties file is used for defining AAF properties related to the CADI framework. This file is used for running AAF framework
+
+#In order to test functionality of cadi-ajsc-plugin locally cross domain cookie. Cadi "should" find your hostname for you. 
+#However, we have seen some situations where this fails. A Local testing
+#modification can include modifying your hosts file so that you can use "mywebserver.att.com" for your localhost in order
+#to test/verify GLO functionality locally. If you are on a Windows machine, you will already have a machine name associated with 
+#it that will utilize an AT&T domain such as "sbc.com". You may need to add your  domain to this as a comma separated list depending
+#upon your particular machine domain. This property is commented out as cadi SHOULD find your machine name. With version 1.2.1 of cadi, 
+#it appears to resolve Mac machine names as well, now. But, this can be somewhat inconsistent depending on your specific working envrironment.
+hostname=mywebserver.att.com
+
+#Setting csp_domain to PROD will allow for testing using your attuid and password through GLO.
+csp_domain=PROD
+csp_devl_localhost=true
+
+basic_realm=csp.att.com
+#basic_realm=aaf.att.com
+basic_warn=TRUE
+
+cadi_loglevel=WARN
+cadi_keyfile=target/swm/package/nix/dist_files/appl/model-loader/etc/keyfile
+
+# Configure AAF
+#These are dummy values add appropriate values required
+aaf_url=url
+
+#AJSC - MECHID
+#These are dummy values add appropriate values required
+aaf_id=dummyid@ajsc.att.com
+aaf_password=enc:277edqJCjT0RlUI3BtbDQa-3Ha-CQGd
+aaf_timeout=5000
+aaf_clean_interval=30000
+aaf_user_expires=5000
+aaf_high_count=1000
+
+
diff --git a/src/main/docker/startup.sh b/src/main/config/jul-redirect.properties
similarity index 67%
copy from src/main/docker/startup.sh
copy to src/main/config/jul-redirect.properties
index c4a4d5f..b94397e 100644
--- a/src/main/docker/startup.sh
+++ b/src/main/config/jul-redirect.properties
@@ -1,27 +1,32 @@
-###
+###
 # ============LICENSE_START=======================================================
 # MODEL LOADER SERVICE
 # ================================================================================
 # Copyright (C) 2017 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.
-# You may obtain a copy of the License at
-# 
-#      http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+#      http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
 # limitations under the License.
-# ============LICENSE_END=========================================================
-###
-
-BIN_DIR=`dirname $0`
-
-echo "Checking environment for configuration options"
-$BIN_DIR/update_config.sh
-
-echo "Starting up model loader..."
-$BIN_DIR/jetty.sh run > /dev/null 2>&1
+# ============LICENSE_END=========================================================
+###
+
+#  	Bridge JUL->slf4j Logging Configuration File
+#
+# This file bridges the JUL logging infrastructure into
+# SLF4J so JUL logs go to logback implementation provided
+# in this project.  SLF4J also captures log4j and has 
+# other framework options as well providing a common
+# logging infrastructure for capturing all logs from different
+# libraries using different frameworks in one place.
+
+#  	Global properties
+handlers=org.slf4j.bridge.SLF4JBridgeHandler
+.level= ALL
diff --git a/src/main/config/keyfile b/src/main/config/keyfile
new file mode 100644
index 0000000..882e86a
--- /dev/null
+++ b/src/main/config/keyfile
@@ -0,0 +1,27 @@
+ZuIwp0TkyVPDeX1Up-8JtkMWvjsCpoiu1_VKeWrtrvxunvAke8_tiFyHPPyb2nkhepFYj6tXzpfS
+rGz5XF_TH9NbsKaP8u0HV5clz2WriYQRvHS85vjY7hXxkpFuLb7zkLAPqTyIDpj7FiW61NzsRUAq
+TM8jH16jr7mBNnb56w24mNGOwznMPcIZKcjgZU1ekaPDFpWyhQElU7Y0q_94P_Gkk45r66Hj22sU
+OiOaaftmudZlswLw8-8Zaakqf2yW9HjMVfuYCwSodBHCW5rdB3Ctb5W36rnD_AQco3Ky2PgPmqvk
+QkJYuUHpbuDqVHqLOajlKSIGMTIqAIBg51fRaaONtD-Q5xzY8E5wO1YWTLKcP5tsNvUpzM8Wu3NS
+ynpGpUcvlTqWWsGzTbzOyamyKkdNdx97sSqjM25Zh1-ps48h6cddGYWpab7SUvqRCS11QBUyLTry
+2iwTEHMhHRIbo7PO99ALQfuq9gI1zKGfurJdvLBeBaFs5SCF0AiCZ3WcDO8Rv3HpxVZ2_ShbDxb0
+eMoO6SotXu51fj8Y3-WqsfZziQyEsHyqpg5uQ6yUtz01h5YHLEoVuotF1U4agmQR6kEkYk-wNOiZ
+v-8gaA9gtbLoAdKhuKFxQgQLNMf6GzVzZNujbmDzLoZAP_mXAv29aBPaf64Ugzv-Oa5GZdBgD-Xd
+_pahML-ionw99r0TnkpShYmDqMKhMdjaP3m87WIAZkIB-L-VTyKcEsJ4340VSzCOsv3waiM0S89u
+4cMcG5y-PLY8IoipIlLUPTWD3SjcQ9DV1Dt3T5KjdWLsj48D3W4K4e9PB8yxs0gtUjgVUR2_xEir
+G5eDO9Ac1eHFWGDFFP0SgG-TbHJUKlvy9mwLzmU0fC3xPjhqmIr-v0HxF7HN-tmb1LHDorno8tSN
+u7kUGcKSchIiFfvkd066crUb2mH7PnXTaWmAjyVj9VsBExFUYEdpHMAV4sAP9-RxZGDRt46UhrDK
+QZvvNhBVyOEjHPHWI4vl1r1v8HNH1_2jZu5DVJWyHWR56aCo1lhFH9_X6UAHUHbnXViDONZOVXlT
+9-WD0tk2zJGuwrhdZDAnPnAmjfwbwbpnr5Hmex1i1JiD7WVyP1kbfoej2TmdiYbxr9oBYaGQ29JI
+aHod7MQCLtvL1z5XgnDPLZ4y3_9SbqHKYbNa8UgZkTLF5EacGThYVFDLA9cbafHDtR1kMGE3vv4D
+EJ-0pAYTOGmKlVI7DwNyKsY9JTyudrxTqhOxi9jgcJNWiUaNe9yhL8Pyc2YBqUTTYhh_a2d1rvkZ
+0Gh1crviVxqBrIkRKaMRXZ4f1vDLz-3NvG_vwPOo8WRFo5nGmSdTw7CjBaigJ_cYCfDhoP11pEnw
+cndsZNcHs-v05LlxeIIMDD_f5Bvz-il_DLA4eK2HqgLdxh8ziSDl2azk14MJY4amzz6reEXUuKLV
+RsZGf_jbDGKhE2HuDQ5ovoLOi4OqE1oRuqh-dGxitrYouP2SN1l_1tCEMRth86FMV-6AQtZsvdUo
+y9MtQ7e35atjA8nHtgADlDTmJBKQiUHUsOZ77p1qp17HAFMovUkc739opfEYnKUn6Itpw5Ipm_Is
+ra6chJUfMpOFof5rb5OjqFAN27c_-mPo1lQU3ndYlKGh_n5V8ufX6v2Yri8WzOPf6hjVYotkmoMP
+NPAICDCB8W5ddBjsopzLVVEtaXDu9Qj6-zf77hT4iQ7rBd2Ner8iLqN3Kis0dvkNM3_uH8onau1G
+Y_YYw7PPSZyd2S_7Dd6G-IG4ayO6e5DD6oUwwekyiQI_3rTXNa_wldGxqW9u818010ekE4Qdlfcj
+beIn7fAeaOjReZ87hRgWyMs-EgTVHw8RL3yI_O6VvRTVRONRF1Y4C_-IYa8z-bfrwXx3BBd9TTgb
+EnS9wVOyC2OgUN6BhPLGLhxzkJ05nEjizXEc9t5EPYoSRwesajGGrrG_0-qWbuU5hKLPLkyeJLHb
+5HXOTVsrUR59Vov2M3_EswkxcImblox3k3VS2yihZMGyfqLzZIUXgd8ufkevKKU6DxwacGTb
\ No newline at end of file
diff --git a/src/main/config/runner-web.xml b/src/main/config/runner-web.xml
new file mode 100644
index 0000000..99d9191
--- /dev/null
+++ b/src/main/config/runner-web.xml
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+  ============LICENSE_START=======================================================
+  MODEL LOADER SERVICE
+  ================================================================================
+  Copyright (C) 2017 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.
+  You may obtain a copy of the License at
+  
+       http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  ============LICENSE_END=========================================================
+  -->
+
+<!-- 
+ Copyright (c) 2016 AT&T Intellectual Property. All rights reserved.
+-->
+<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
+	metadata-complete="false" version="3.0">
+
+	<context-param>
+		<param-name>contextConfigLocation</param-name>
+		<param-value>/WEB-INF/spring-servlet.xml,
+					classpath:applicationContext.xml
+		</param-value>
+  	</context-param>
+  	
+  	<context-param>
+        <param-name>spring.profiles.default</param-name>
+        <param-value>nooauth</param-value>
+    </context-param>
+    
+	<listener>
+		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
+	</listener>
+	
+	<servlet>
+		<servlet-name>ManagementServlet</servlet-name>
+		<servlet-class>ajsc.ManagementServlet</servlet-class>
+	</servlet>
+
+    
+  	<filter> 
+		<filter-name>InterceptorFilter</filter-name>
+		<filter-class>ajsc.filters.InterceptorFilter</filter-class>
+		<init-param>
+                <param-name>preProcessor_interceptor_config_file</param-name>
+                <param-value>/etc/PreProcessorInterceptors.properties</param-value>
+        </init-param>
+        <init-param>
+                <param-name>postProcessor_interceptor_config_file</param-name>
+                <param-value>/etc/PostProcessorInterceptors.properties</param-value>
+        </init-param>
+        
+	</filter>
+
+	 <servlet>
+		<servlet-name>RestletServlet</servlet-name>
+		<servlet-class>ajsc.restlet.RestletSpringServlet</servlet-class>
+		<init-param>
+				<param-name>org.restlet.component</param-name>
+				<param-value>restletComponent</param-value>
+		</init-param>
+	</servlet>
+	
+	<servlet>
+		<servlet-name>CamelServlet</servlet-name>
+		<servlet-class>ajsc.servlet.AjscCamelServlet</servlet-class>
+	</servlet>
+
+
+	<filter>
+		<filter-name>springSecurityFilterChain</filter-name>
+		<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
+	</filter>
+
+	<servlet>
+		<servlet-name>spring</servlet-name>
+		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
+		<load-on-startup>1</load-on-startup>
+	</servlet>	
+	
+<!--	<servlet-mapping>
+		<servlet-name>spring</servlet-name>
+		<url-pattern>/</url-pattern>
+	</servlet-mapping>-->
+
+<!-- BEGIN jsp -->
+
+  <servlet id="jsp">
+    <servlet-name>jsp</servlet-name>
+    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
+  </servlet>
+
+	
+	
+
+	  
+	<!-- BEGIN static content -->
+	<servlet>
+ 	   <servlet-name>default</servlet-name>
+	    <servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class>
+	    <init-param>
+	        <param-name>dirAllowed</param-name>
+	        <param-value>true</param-value>
+	    </init-param>
+	</servlet>
+	<!-- END static content --> 	
+</web-app>
diff --git a/src/main/docker/.dockerignore b/src/main/docker/.dockerignore
deleted file mode 100644
index 1128374..0000000
--- a/src/main/docker/.dockerignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.war
-*.jsonld
\ No newline at end of file
diff --git a/src/main/docker/Dockerfile b/src/main/docker/Dockerfile
index 99c34fd..6f187d5 100644
--- a/src/main/docker/Dockerfile
+++ b/src/main/docker/Dockerfile
@@ -1,53 +1,24 @@
-###
-# ============LICENSE_START=======================================================
-# MODEL LOADER SERVICE
-# ================================================================================
-# Copyright (C) 2017 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.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ============LICENSE_END=========================================================
-###
-
 FROM ubuntu:14.04
-ARG jettyrel=9.3.9.v20160517
-ARG jettydist=jetty-distribution-${jettyrel}
-ARG jettybase=/opt/jetty
 
-RUN apt-get update && apt-get --force-yes -y -f install wget
+ARG MICRO_HOME=/opt/app/model-loader
+ARG BIN_HOME=$MICRO_HOME/bin
 
-# Install java8
-RUN apt-get install -y software-properties-common
+RUN apt-get update
 
-# sudo -E is required to preserve the environment
-# If you remove that line, it will most like freeze at this step
-
-RUN apt-get install --reinstall ca-certificates && \
-		sudo -E add-apt-repository ppa:openjdk-r/ppa && apt-get update && apt-get install -y openjdk-8-jdk
-
-# Setup JAVA_HOME, this is useful for docker commandline
-
+# Install and setup java8
+RUN apt-get update && apt-get install -y software-properties-common
+## sudo -E is required to preserve the environment. If you remove that line, it will most like freeze at this step
+RUN sudo -E add-apt-repository ppa:openjdk-r/ppa && apt-get update && apt-get install -y openjdk-8-jdk
+## Setup JAVA_HOME, this is useful for docker commandline
 ENV JAVA_HOME usr/lib/jvm/java-8-openjdk-amd64
 RUN export JAVA_HOME
 
-RUN wget http://central.maven.org/maven2/org/eclipse/jetty/jetty-distribution/${jettyrel}/${jettydist}.tar.gz
-RUN gunzip ${jettydist}.tar.gz && tar xvf ${jettydist}.tar
+# Build up the deployment folder structure
+RUN mkdir -p $MICRO_HOME
+ADD swm/package/nix/dist_files/appl/model-loader/* $MICRO_HOME/
+RUN mkdir -p $BIN_HOME
+COPY *.sh $BIN_HOME
+RUN chmod 755 $BIN_HOME/*
+RUN ln -s /logs $MICRO_HOME/logs
 
-COPY model-loader* $jettydist/webapps/model-loader/
-
-COPY startup.sh update_config.sh ${jettydist}/bin/
-RUN chmod 700 ${jettydist}/bin/startup.sh && chmod 700 ${jettydist}/bin/update_config.sh
-RUN mkdir -p ${jettybase}
-RUN mv ${jettydist} ${jettybase}/${jettydist}
-RUN rm -rf $jettybase/$jettydist/demo-base
-
-CMD /opt/jetty/*/bin/startup.sh
+CMD /opt/app/model-loader/bin/start.sh
diff --git a/src/main/docker/update_config.sh b/src/main/docker/update_config.sh
deleted file mode 100644
index 77916ed..0000000
--- a/src/main/docker/update_config.sh
+++ /dev/null
@@ -1,151 +0,0 @@
-#!/bin/bash
-
-###
-# ============LICENSE_START=======================================================
-# MODEL LOADER SERVICE
-# ================================================================================
-# Copyright (C) 2017 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.
-# You may obtain a copy of the License at
-# 
-#      http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ============LICENSE_END=========================================================
-###
-
-#
-# This script will update the config file, with config values supplied
-# through environment variables, if set
-# 
-
-CONFIG_FILE=`dirname $0`/../webapps/model-loader/WEB-INF/classes/model-loader.properties
-
-# Distribution client configuration
-ENVVAR=DISTR_CLIENT_ACTIVE_SERVER_TLS_AUTH
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.distribution.ACTIVE_SERVER_TLS_AUTH/s/.*/ml.distribution.ACTIVE_SERVER_TLS_AUTH=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=DISTR_CLIENT_ASDC_ADDRESS 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.distribution.ASDC_ADDRESS/s/.*/ml.distribution.ASDC_ADDRESS=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=DISTR_CLIENT_CONSUMER_GROUP
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.distribution.CONSUMER_GROUP/s/.*/ml.distribution.CONSUMER_GROUP=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=DISTR_CLIENT_CONSUMER_ID
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.distribution.CONSUMER_ID/s/.*/ml.distribution.CONSUMER_ID=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=DISTR_CLIENT_ENVIRONMENT_NAME
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.distribution.ENVIRONMENT_NAME/s/.*/ml.distribution.ENVIRONMENT_NAME=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=DISTR_CLIENT_KEYSTORE_PASSWORD
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.distribution.KEYSTORE_PASSWORD/s/.*/ml.distribution.KEYSTORE_PASSWORD=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=DISTR_CLIENT_KEYSTORE_FILE 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.distribution.KEYSTORE_FILE/s/.*/ml.distribution.KEYSTORE_FILE=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=DISTR_CLIENT_PASSWORD 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.distribution.PASSWORD/s/.*/ml.distribution.PASSWORD=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=DISTR_CLIENT_POLLING_INTERVAL 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.distribution.POLLING_INTERVAL/s/.*/ml.distribution.POLLING_INTERVAL=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=DISTR_CLIENT_POLLING_TIMEOUT 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.distribution.POLLING_TIMEOUT/s/.*/ml.distribution.POLLING_TIMEOUT=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=DISTR_CLIENT_USER 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.distribution.USER/s/.*/ml.distribution.USER=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=DISTR_CLIENT_ARTIFACT_TYPES 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.distribution.ARTIFACT_TYPES/s/.*/ml.distribution.ARTIFACT_TYPES=$ENVVALUE/" $CONFIG_FILE;
-
-  
-# Model Loader Application Server REST Client Configuration
-ENVVAR=APP_SERVER_BASE_URL
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.aai.BASE_URL/s/.*/ml.aai.BASE_URL=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=APP_SERVER_MODEL_URL 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.aai.MODEL_URL/s/.*/ml.aai.MODEL_URL=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=APP_SERVER_NAMED_QUERY_URL 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.aai.NAMED_QUERY_URL/s/.*/ml.aai.NAMED_QUERY_URL=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=APP_SERVER_VNF_IMAGE_URL 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.aai.VNF_IMAGE_URL/s/.*/ml.aai.VNF_IMAGE_URL=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=APP_SERVER_KEYSTORE_FILE 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.aai.KEYSTORE_FILE/s/.*/ml.aai.KEYSTORE_FILE=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=APP_SERVER_KEYSTORE_PASSWORD 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.aai.KEYSTORE_PASSWORD/s/.*/ml.aai.KEYSTORE_PASSWORD=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=APP_SERVER_AUTH_USER 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.aai.AUTH_USER/s/.*/ml.aai.AUTH_USER=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=APP_SERVER_AUTH_PASSWORD
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.aai.AUTH_PASSWORD/s/.*/ml.aai.AUTH_PASSWORD=$ENVVALUE/" $CONFIG_FILE;
diff --git a/src/main/java/org/openecomp/modelloader/config/ModelLoaderConfig.java b/src/main/java/org/openecomp/modelloader/config/ModelLoaderConfig.java
index 26f13ad..407b015 100644
--- a/src/main/java/org/openecomp/modelloader/config/ModelLoaderConfig.java
+++ b/src/main/java/org/openecomp/modelloader/config/ModelLoaderConfig.java
@@ -1,235 +1,232 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 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.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.config;
-
-import org.eclipse.jetty.util.security.Password;
-import org.openecomp.sdc.api.consumer.IConfiguration;
-
-import java.io.File;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-
-public class ModelLoaderConfig implements IConfiguration {
-
-  // Configuration file structure
-  public static final String PREFIX_MODEL_LOADER_CONFIG = "ml";
-  public static final String PREFIX_DISTRIBUTION_CLIENT = 
-      PREFIX_MODEL_LOADER_CONFIG + ".distribution.";
-  public static final String PREFIX_AAI = PREFIX_MODEL_LOADER_CONFIG + ".aai.";
-  public static final String PREFIX_DEBUG = PREFIX_MODEL_LOADER_CONFIG + ".debug.";
-
-  // Configuration file properties
-  protected static final String PROP_ML_DISTRIBUTION_ACTIVE_SERVER_TLS_AUTH = 
-      PREFIX_DISTRIBUTION_CLIENT + "ACTIVE_SERVER_TLS_AUTH";
-  protected static final String PROP_ML_DISTRIBUTION_ASDC_ADDRESS = PREFIX_DISTRIBUTION_CLIENT
-      + "ASDC_ADDRESS";
-  protected static final String PROP_ML_DISTRIBUTION_CONSUMER_GROUP = PREFIX_DISTRIBUTION_CLIENT
-      + "CONSUMER_GROUP";
-  protected static final String PROP_ML_DISTRIBUTION_CONSUMER_ID = PREFIX_DISTRIBUTION_CLIENT
-      + "CONSUMER_ID";
-  protected static final String PROP_ML_DISTRIBUTION_ENVIRONMENT_NAME = PREFIX_DISTRIBUTION_CLIENT
-      + "ENVIRONMENT_NAME";
-  protected static final String PROP_ML_DISTRIBUTION_KEYSTORE_PASSWORD = PREFIX_DISTRIBUTION_CLIENT
-      + "KEYSTORE_PASSWORD";
-  protected static final String PROP_ML_DISTRIBUTION_KEYSTORE_FILE = PREFIX_DISTRIBUTION_CLIENT
-      + "KEYSTORE_FILE";
-  protected static final String PROP_ML_DISTRIBUTION_PASSWORD = PREFIX_DISTRIBUTION_CLIENT
-      + "PASSWORD";
-  protected static final String PROP_ML_DISTRIBUTION_POLLING_INTERVAL = PREFIX_DISTRIBUTION_CLIENT
-      + "POLLING_INTERVAL";
-  protected static final String PROP_ML_DISTRIBUTION_POLLING_TIMEOUT = PREFIX_DISTRIBUTION_CLIENT
-      + "POLLING_TIMEOUT";
-  protected static final String PROP_ML_DISTRIBUTION_USER = PREFIX_DISTRIBUTION_CLIENT + "USER";
-  protected static final String PROP_ML_DISTRIBUTION_ARTIFACT_TYPES = PREFIX_DISTRIBUTION_CLIENT
-      + "ARTIFACT_TYPES";
-
-  protected static final String PROP_AAI_BASE_URL = PREFIX_AAI + "BASE_URL";
-  protected static final String PROP_AAI_KEYSTORE_FILE = PREFIX_AAI + "KEYSTORE_FILE";
-  protected static final String PROP_AAI_KEYSTORE_PASSWORD = PREFIX_AAI + "KEYSTORE_PASSWORD";
-  protected static final String PROP_AAI_MODEL_RESOURCE_URL = PREFIX_AAI + "MODEL_URL";
-  protected static final String PROP_AAI_NAMED_QUERY_RESOURCE_URL = PREFIX_AAI + "NAMED_QUERY_URL";
-  protected static final String PROP_AAI_VNF_IMAGE_RESOURCE_URL = PREFIX_AAI + "VNF_IMAGE_URL";
-  protected static final String PROP_AAI_AUTHENTICATION_USER = PREFIX_AAI + "AUTH_USER";
-  protected static final String PROP_AAI_AUTHENTICATION_PASSWORD = PREFIX_AAI + "AUTH_PASSWORD";
-
-  protected static final String PROP_DEBUG_INGEST_SIMULATOR = PREFIX_DEBUG + "INGEST_SIMULATOR";
-
-  private Properties modelLoaderProperties = null;
-
-  private String certLocation = ".";
-
-  private List<String> artifactTypes = null;
-
-  /**
-   * This is the class constructor.
-   * 
-   * @param modelLoaderProperties properties needed to be configured for the model loader
-   * @param certLocation location of the certificate
-   */
-  public ModelLoaderConfig(Properties modelLoaderProperties) {
-    this.modelLoaderProperties = modelLoaderProperties;
-    
-    String aaiKeystoreFile = modelLoaderProperties.getProperty(PROP_AAI_KEYSTORE_FILE);
-    if(aaiKeystoreFile != null){
-	    URL keystoreURL = this.getClass().getClassLoader().getResource(aaiKeystoreFile);
-	    if(keystoreURL != null){
-	    	File fKeystoreLocation = new File(keystoreURL.getPath());
-	    	this.certLocation = fKeystoreLocation.getParent();
-	    }
-    }
-
-    // Get list of artifacts
-    artifactTypes = new ArrayList<String>();
-    if (modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ARTIFACT_TYPES) != null) {
-      String[] artTypeList = modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ARTIFACT_TYPES)
-          .split(",");
-      for (String artType : artTypeList) {
-        artifactTypes.add(artType);
-      }
-    }
-  }
-
-  @Override
-  public boolean activateServerTLSAuth() {
-    String value = modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ACTIVE_SERVER_TLS_AUTH);
-    return value == null ? false : Boolean.parseBoolean(value);
-  }
-
-  @Override
-  public String getAsdcAddress() {
-    return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ASDC_ADDRESS);
-  }
-
-  @Override
-  public String getConsumerGroup() {
-    return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_CONSUMER_GROUP);
-  }
-
-  @Override
-  public String getConsumerID() {
-    return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_CONSUMER_ID);
-  }
-
-  @Override
-  public String getEnvironmentName() {
-    return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ENVIRONMENT_NAME);
-  }
-
-  @Override
-  public String getKeyStorePassword() {
-    return Password
-        .deobfuscate(modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_KEYSTORE_PASSWORD));
-  }
-
-  @Override
-  public String getKeyStorePath() {
-    return certLocation + modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_KEYSTORE_FILE);
-  }
-
-  @Override
-  public String getPassword() {
-    return Password.deobfuscate(modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_PASSWORD));
-  }
-
-  @Override
-  public int getPollingInterval() {
-    return Integer
-        .parseInt(modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_POLLING_INTERVAL));
-  }
-
-  @Override
-  public int getPollingTimeout() {
-    return Integer
-        .parseInt(modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_POLLING_TIMEOUT));
-  }
-
-  @Override
-  public List<String> getRelevantArtifactTypes() {
-    return artifactTypes;
-  }
-
-  @Override
-  public String getUser() {
-    return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_USER);
-  }
-
-  public String getAaiKeyStorePath() {
-    return certLocation + "/" + modelLoaderProperties.getProperty(PROP_AAI_KEYSTORE_FILE);
-  }
-
-  public String getAaiKeyStorePassword() {
-    return Password.deobfuscate(modelLoaderProperties.getProperty(PROP_AAI_KEYSTORE_PASSWORD));
-  }
-
-  public String getAaiBaseUrl() {
-    return modelLoaderProperties.getProperty(PROP_AAI_BASE_URL);
-  }
-
-  public String getAaiModelUrl() {
-    return modelLoaderProperties.getProperty(PROP_AAI_MODEL_RESOURCE_URL);
-  }
-
-  public String getAaiNamedQueryUrl() {
-    return modelLoaderProperties.getProperty(PROP_AAI_NAMED_QUERY_RESOURCE_URL);
-  }
-
-  public String getAaiVnfImageUrl() {
-    return modelLoaderProperties.getProperty(PROP_AAI_VNF_IMAGE_RESOURCE_URL);
-  }
-
-  public String getAaiAuthenticationUser() {
-    return modelLoaderProperties.getProperty(PROP_AAI_AUTHENTICATION_USER);
-  }
-
-  /**
-   * @return password for AAI authentication that has been reverse-engineered
-   *         from its obfuscated form.
-   */
-  public String getAaiAuthenticationPassword() {
-    String password = Password
-        .deobfuscate(modelLoaderProperties.getProperty(PROP_AAI_AUTHENTICATION_PASSWORD));
-
-    if ((password != null) && (password.equals(""))) {
-      return null;
-    }
-
-    return password;
-  }
-
-  /**
-   * @return a boolean value indicating whether the simulator is enabled.
-   */
-  public boolean getIngestSimulatorEnabled() {
-    String propValue = modelLoaderProperties.getProperty(PROP_DEBUG_INGEST_SIMULATOR);
-
-    if (propValue == null) {
-      return false;
-    }
-
-    if (propValue.compareToIgnoreCase("enabled") == 0) {
-      return true;
-    }
-
-    return false;
-  }
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.config;
+
+import org.eclipse.jetty.util.security.Password;
+import org.openecomp.sdc.api.consumer.IConfiguration;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+public class ModelLoaderConfig implements IConfiguration {
+	
+  // Configuration file structure
+  public static final String PREFIX_MODEL_LOADER_CONFIG = "ml";
+  public static final String PREFIX_DISTRIBUTION_CLIENT = 
+      PREFIX_MODEL_LOADER_CONFIG + ".distribution.";
+  public static final String PREFIX_AAI = PREFIX_MODEL_LOADER_CONFIG + ".aai.";
+  public static final String PREFIX_DEBUG = PREFIX_MODEL_LOADER_CONFIG + ".debug.";
+
+  // Configuration file properties
+  protected static final String PROP_ML_DISTRIBUTION_ACTIVE_SERVER_TLS_AUTH = 
+      PREFIX_DISTRIBUTION_CLIENT + "ACTIVE_SERVER_TLS_AUTH";
+  protected static final String PROP_ML_DISTRIBUTION_ASDC_ADDRESS = PREFIX_DISTRIBUTION_CLIENT
+      + "ASDC_ADDRESS";
+  protected static final String PROP_ML_DISTRIBUTION_CONSUMER_GROUP = PREFIX_DISTRIBUTION_CLIENT
+      + "CONSUMER_GROUP";
+  protected static final String PROP_ML_DISTRIBUTION_CONSUMER_ID = PREFIX_DISTRIBUTION_CLIENT
+      + "CONSUMER_ID";
+  protected static final String PROP_ML_DISTRIBUTION_ENVIRONMENT_NAME = PREFIX_DISTRIBUTION_CLIENT
+      + "ENVIRONMENT_NAME";
+  protected static final String PROP_ML_DISTRIBUTION_KEYSTORE_PASSWORD = PREFIX_DISTRIBUTION_CLIENT
+      + "KEYSTORE_PASSWORD";
+  protected static final String PROP_ML_DISTRIBUTION_KEYSTORE_FILE = PREFIX_DISTRIBUTION_CLIENT
+      + "KEYSTORE_FILE";
+  protected static final String PROP_ML_DISTRIBUTION_PASSWORD = PREFIX_DISTRIBUTION_CLIENT
+      + "PASSWORD";
+  protected static final String PROP_ML_DISTRIBUTION_POLLING_INTERVAL = PREFIX_DISTRIBUTION_CLIENT
+      + "POLLING_INTERVAL";
+  protected static final String PROP_ML_DISTRIBUTION_POLLING_TIMEOUT = PREFIX_DISTRIBUTION_CLIENT
+      + "POLLING_TIMEOUT";
+  protected static final String PROP_ML_DISTRIBUTION_USER = PREFIX_DISTRIBUTION_CLIENT + "USER";
+  protected static final String PROP_ML_DISTRIBUTION_ARTIFACT_TYPES = PREFIX_DISTRIBUTION_CLIENT
+      + "ARTIFACT_TYPES";
+
+  protected static final String PROP_AAI_BASE_URL = PREFIX_AAI + "BASE_URL";
+  protected static final String PROP_AAI_KEYSTORE_FILE = PREFIX_AAI + "KEYSTORE_FILE";
+  protected static final String PROP_AAI_KEYSTORE_PASSWORD = PREFIX_AAI + "KEYSTORE_PASSWORD";
+  protected static final String PROP_AAI_MODEL_RESOURCE_URL = PREFIX_AAI + "MODEL_URL";
+  protected static final String PROP_AAI_NAMED_QUERY_RESOURCE_URL = PREFIX_AAI + "NAMED_QUERY_URL";
+  protected static final String PROP_AAI_VNF_IMAGE_RESOURCE_URL = PREFIX_AAI + "VNF_IMAGE_URL";
+  protected static final String PROP_AAI_AUTHENTICATION_USER = PREFIX_AAI + "AUTH_USER";
+  protected static final String PROP_AAI_AUTHENTICATION_PASSWORD = PREFIX_AAI + "AUTH_PASSWORD";
+
+  protected static final String PROP_DEBUG_INGEST_SIMULATOR = PREFIX_DEBUG + "INGEST_SIMULATOR";
+
+  private Properties modelLoaderProperties = null;
+
+  private String certLocation = ".";
+
+  private List<String> artifactTypes = null;
+
+  /**
+   * This is the class constructor.
+   * 
+   * @param modelLoaderProperties properties needed to be configured for the model loader
+   * @param certLocation location of the certificate
+   */
+  public ModelLoaderConfig(Properties modelLoaderProperties, String certLocation) {
+    this.modelLoaderProperties = modelLoaderProperties;
+    this.certLocation = certLocation;
+
+    // Get list of artifacts
+    artifactTypes = new ArrayList<String>();
+    if (modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ARTIFACT_TYPES) != null) {
+      String[] artTypeList = modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ARTIFACT_TYPES)
+          .split(",");
+      for (String artType : artTypeList) {
+        artifactTypes.add(artType);
+      }
+    }
+  }
+
+  @Override
+  public boolean activateServerTLSAuth() {
+    String value = modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ACTIVE_SERVER_TLS_AUTH);
+    return value == null ? false : Boolean.parseBoolean(value);
+  }
+
+  @Override
+  public String getAsdcAddress() {
+    return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ASDC_ADDRESS);
+  }
+
+  @Override
+  public String getConsumerGroup() {
+    return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_CONSUMER_GROUP);
+  }
+
+  @Override
+  public String getConsumerID() {
+    return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_CONSUMER_ID);
+  }
+
+  @Override
+  public String getEnvironmentName() {
+    return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ENVIRONMENT_NAME);
+  }
+
+  @Override
+  public String getKeyStorePassword() {
+    return Password
+        .deobfuscate(modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_KEYSTORE_PASSWORD));
+  }
+
+  @Override
+  public String getKeyStorePath() {
+    return certLocation + modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_KEYSTORE_FILE);
+  }
+
+  @Override
+  public String getPassword() {
+    return Password.deobfuscate(modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_PASSWORD));
+  }
+
+  @Override
+  public int getPollingInterval() {
+    return Integer
+        .parseInt(modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_POLLING_INTERVAL));
+  }
+
+  @Override
+  public int getPollingTimeout() {
+    return Integer
+        .parseInt(modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_POLLING_TIMEOUT));
+  }
+
+  @Override
+  public List<String> getRelevantArtifactTypes() {
+    return artifactTypes;
+  }
+
+  @Override
+  public String getUser() {
+    return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_USER);
+  }
+
+  public String getAaiKeyStorePath() {
+    return certLocation + "/" + modelLoaderProperties.getProperty(PROP_AAI_KEYSTORE_FILE);
+  }
+
+  public String getAaiKeyStorePassword() {
+    return Password.deobfuscate(modelLoaderProperties.getProperty(PROP_AAI_KEYSTORE_PASSWORD));
+  }
+
+  public String getAaiBaseUrl() {
+    return modelLoaderProperties.getProperty(PROP_AAI_BASE_URL);
+  }
+
+  public String getAaiModelUrl() {
+    return modelLoaderProperties.getProperty(PROP_AAI_MODEL_RESOURCE_URL);
+  }
+
+  public String getAaiNamedQueryUrl() {
+    return modelLoaderProperties.getProperty(PROP_AAI_NAMED_QUERY_RESOURCE_URL);
+  }
+
+  public String getAaiVnfImageUrl() {
+    return modelLoaderProperties.getProperty(PROP_AAI_VNF_IMAGE_RESOURCE_URL);
+  }
+
+  public String getAaiAuthenticationUser() {
+    return modelLoaderProperties.getProperty(PROP_AAI_AUTHENTICATION_USER);
+  }
+
+  /**
+   * @return password for AAI authentication that has been reverse-engineered
+   *         from its obfuscated form.
+   */
+  public String getAaiAuthenticationPassword() {
+    String password = Password
+        .deobfuscate(modelLoaderProperties.getProperty(PROP_AAI_AUTHENTICATION_PASSWORD));
+
+    if ((password != null) && (password.equals(""))) {
+      return null;
+    }
+
+    return password;
+  }
+
+  /**
+   * @return a boolean value indicating whether the simulator is enabled.
+   */
+  public boolean getIngestSimulatorEnabled() {
+    String propValue = modelLoaderProperties.getProperty(PROP_DEBUG_INGEST_SIMULATOR);
+
+    if (propValue == null) {
+      return false;
+    }
+
+    if (propValue.compareToIgnoreCase("enabled") == 0) {
+      return true;
+    }
+
+    return false;
+  }
+
+  public boolean isFilterInEmptyResources() {
+	  return false;
+  }
+
+}
diff --git a/src/main/java/org/openecomp/modelloader/entity/Artifact.java b/src/main/java/org/openecomp/modelloader/entity/Artifact.java
index fb0ec9f..30709ae 100644
--- a/src/main/java/org/openecomp/modelloader/entity/Artifact.java
+++ b/src/main/java/org/openecomp/modelloader/entity/Artifact.java
@@ -1,44 +1,46 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 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.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.entity;
-
-public abstract class Artifact {
-
-  private String payload;
-  private ArtifactType type;
-
-  public ArtifactType getType() {
-    return type;
-  }
-
-  public void setType(ArtifactType type) {
-    this.type = type;
-  }
-
-  public String getPayload() {
-    return payload;
-  }
-
-  public void setPayload(String payload) {
-    this.payload = payload;
-  }
-
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.entity;
+
+public abstract class Artifact {
+
+  private String payload;
+  private ArtifactType type;
+
+  public ArtifactType getType() {
+    return type;
+  }
+
+  public void setType(ArtifactType type) {
+    this.type = type;
+  }
+
+  public String getPayload() {
+    return payload;
+  }
+
+  public void setPayload(String payload) {
+    this.payload = payload;
+  }
+
+}
diff --git a/src/main/java/org/openecomp/modelloader/entity/ArtifactHandler.java b/src/main/java/org/openecomp/modelloader/entity/ArtifactHandler.java
index 16f2c87..bd6a861 100644
--- a/src/main/java/org/openecomp/modelloader/entity/ArtifactHandler.java
+++ b/src/main/java/org/openecomp/modelloader/entity/ArtifactHandler.java
@@ -1,37 +1,39 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 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.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.entity;
-
-import org.openecomp.modelloader.config.ModelLoaderConfig;
-
-import java.util.List;
-
-public abstract class ArtifactHandler {
-
-  protected ModelLoaderConfig config;
-
-  public ArtifactHandler(ModelLoaderConfig config) {
-    this.config = config;
-  }
-
-  public abstract boolean pushArtifacts(List<Artifact> artifacts, String distributionId);
-
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.entity;
+
+import org.openecomp.modelloader.config.ModelLoaderConfig;
+
+import java.util.List;
+
+public abstract class ArtifactHandler {
+
+  protected ModelLoaderConfig config;
+
+  public ArtifactHandler(ModelLoaderConfig config) {
+    this.config = config;
+  }
+
+  public abstract boolean pushArtifacts(List<Artifact> artifacts, String distributionId);
+
+}
diff --git a/src/main/java/org/openecomp/modelloader/entity/ArtifactType.java b/src/main/java/org/openecomp/modelloader/entity/ArtifactType.java
index 8977e3c..ae556bc 100644
--- a/src/main/java/org/openecomp/modelloader/entity/ArtifactType.java
+++ b/src/main/java/org/openecomp/modelloader/entity/ArtifactType.java
@@ -1,25 +1,27 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 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.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.entity;
-
-public enum ArtifactType {
-  MODEL, NAMED_QUERY, VNF_CATALOG;
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.entity;
+
+public enum ArtifactType {
+  MODEL, NAMED_QUERY, VNF_CATALOG;
+}
diff --git a/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifact.java b/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifact.java
index b2e1fdb..a15ed3c 100644
--- a/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifact.java
+++ b/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifact.java
@@ -1,31 +1,33 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 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.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.entity.catalog;
-
-import org.openecomp.modelloader.entity.Artifact;
-import org.openecomp.modelloader.entity.ArtifactType;
-
-public class VnfCatalogArtifact extends Artifact {
-  public VnfCatalogArtifact(String payload) {
-    setPayload(payload);
-    setType(ArtifactType.VNF_CATALOG);
-  }
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.entity.catalog;
+
+import org.openecomp.modelloader.entity.Artifact;
+import org.openecomp.modelloader.entity.ArtifactType;
+
+public class VnfCatalogArtifact extends Artifact {
+  public VnfCatalogArtifact(String payload) {
+    setPayload(payload);
+    setType(ArtifactType.VNF_CATALOG);
+  }
+}
diff --git a/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifactHandler.java b/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifactHandler.java
index 189b069..5c526a6 100644
--- a/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifactHandler.java
+++ b/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifactHandler.java
@@ -1,184 +1,192 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 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.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.entity.catalog;
-
-import com.sun.jersey.api.client.ClientResponse;
-
-import generated.VnfCatalog;
-import generated.VnfCatalog.PartNumberList;
-
-import inventory.aai.openecomp.org.v8.VnfImage;
-
-import org.eclipse.persistence.jaxb.MarshallerProperties;
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.modelloader.config.ModelLoaderConfig;
-import org.openecomp.modelloader.entity.Artifact;
-import org.openecomp.modelloader.entity.ArtifactHandler;
-import org.openecomp.modelloader.restclient.AaiRestClient;
-import org.openecomp.modelloader.restclient.AaiRestClient.MimeType;
-import org.openecomp.modelloader.service.ModelLoaderMsgs;
-
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-import javax.ws.rs.core.Response;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Marshaller;
-import javax.xml.bind.Unmarshaller;
-
-
-public class VnfCatalogArtifactHandler extends ArtifactHandler {
-
-  private static Logger logger = LoggerFactory.getInstance()
-      .getLogger(VnfCatalogArtifactHandler.class.getName());
-
-  public VnfCatalogArtifactHandler(ModelLoaderConfig config) {
-    super(config);
-  }
-
-  @Override
-  public boolean pushArtifacts(List<Artifact> artifacts, String distributionId) {
-    for (Artifact art : artifacts) {
-      VnfCatalogArtifact vnfCatalog = (VnfCatalogArtifact) art;
-      String artifactPayload = vnfCatalog.getPayload();
-
-      AaiRestClient restClient = new AaiRestClient(this.config);
-      List<VnfImage> putImages = new ArrayList<VnfImage>();
-
-      try {
-        JAXBContext inputContext = JAXBContext.newInstance(VnfCatalog.class);
-        Unmarshaller unmarshaller = inputContext.createUnmarshaller();
-        StringReader reader = new StringReader(artifactPayload);
-        VnfCatalog cat = (VnfCatalog) unmarshaller.unmarshal(reader);
-
-        int numParts = cat.getPartNumberList().size();
-
-        for (int i = 0; i < numParts; i++) {
-
-          PartNumberList pnl = cat.getPartNumberList().get(i);
-
-          String application = pnl.getVendorInfo().getVendorModel();
-          String applicationVendor = pnl.getVendorInfo().getVendorName();
-
-          int numVersions = pnl.getSoftwareVersionList().size();
-
-          for (int j = 0; j < numVersions; j++) {
-            String applicationVersion = pnl.getSoftwareVersionList().get(j).getSoftwareVersion();
-
-            String imageId = "vnf image " + applicationVendor + " " + application + " "
-                + applicationVersion;
-
-            String getUrl = config.getAaiBaseUrl() + config.getAaiVnfImageUrl()
-                + "?application-vendor=" + applicationVendor + "&application=" + application
-                + "&application-version=" + applicationVersion;
-
-            ClientResponse tryGet = restClient.getResource(getUrl, distributionId, MimeType.JSON);
-            if (tryGet == null) {
-              logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-                  "Ingestion failed on " + imageId + ". Rolling back distribution.");
-              failureCleanup(putImages, restClient, distributionId);
-              return false;
-            }
-            if (tryGet.getStatus() == Response.Status.NOT_FOUND.getStatusCode()) {
-              // this vnf-image not already in the db, need to add
-              // only do this on 404 bc other error responses could mean there
-              // are problems that
-              // you might not want to try to PUT against
-
-              VnfImage image = new VnfImage();
-              image.setApplication(application);
-              image.setApplicationVendor(applicationVendor);
-              image.setApplicationVersion(applicationVersion);
-              String uuid = UUID.randomUUID().toString();
-              image.setUuid(uuid); // need to create uuid
-
-              System.setProperty("javax.xml.bind.context.factory",
-                  "org.eclipse.persistence.jaxb.JAXBContextFactory");
-              JAXBContext jaxbContext = JAXBContext.newInstance(VnfImage.class);
-              Marshaller marshaller = jaxbContext.createMarshaller();
-              marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");
-              marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);
-              marshaller.setProperty(MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);
-              marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false);
-              StringWriter writer = new StringWriter();
-              marshaller.marshal(image, writer);
-              String payload = writer.toString();
-
-              String putUrl = config.getAaiBaseUrl() + config.getAaiVnfImageUrl() + "/vnf-image/"
-                  + uuid;
-
-              ClientResponse putResp = restClient.putResource(putUrl, payload, distributionId,
-                  MimeType.JSON);
-              if (putResp == null
-                  || putResp.getStatus() != Response.Status.CREATED.getStatusCode()) {
-                logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-                    "Ingestion failed on vnf-image " + imageId + ". Rolling back distribution.");
-                failureCleanup(putImages, restClient, distributionId);
-                return false;
-              }
-              putImages.add(image);
-              logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, imageId + " successfully ingested.");
-            } else if (tryGet.getStatus() == Response.Status.OK.getStatusCode()) {
-              logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
-                  imageId + " already exists.  Skipping ingestion.");
-            } else {
-              // if other than 404 or 200, something went wrong
-              logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-                  "Ingestion failed on vnf-image " + imageId + " with status " + tryGet.getStatus()
-                      + ". Rolling back distribution.");
-              failureCleanup(putImages, restClient, distributionId);
-              return false;
-            }
-          }
-        }
-
-      } catch (JAXBException e) {
-        logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-            "Ingestion failed. " + e.getMessage() + ". Rolling back distribution.");
-        failureCleanup(putImages, restClient, distributionId);
-        return false;
-      }
-    }
-
-    return true;
-  }
-
-  /*
-   * if something fails in the middle of ingesting the catalog we want to
-   * rollback any changes to the db
-   */
-  private void failureCleanup(List<VnfImage> putImages, AaiRestClient restClient, String transId) {
-    for (VnfImage image : putImages) {
-      String url = config.getAaiBaseUrl() + config.getAaiVnfImageUrl() + "/vnf-image/"
-          + image.getUuid();
-      restClient.getAndDeleteResource(url, transId); // try to delete the image,
-                                                     // if something goes wrong
-                                                     // we can't really do
-                                                     // anything here
-    }
-  }
-
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.entity.catalog;
+
+import com.sun.jersey.api.client.ClientResponse;
+
+import generated.VnfCatalog;
+import generated.VnfCatalog.PartNumberList;
+
+import inventory.aai.openecomp.org.v8.VnfImage;
+
+import org.eclipse.persistence.jaxb.MarshallerProperties;
+import org.openecomp.cl.api.Logger;
+import org.openecomp.cl.eelf.LoggerFactory;
+import org.openecomp.modelloader.config.ModelLoaderConfig;
+import org.openecomp.modelloader.entity.Artifact;
+import org.openecomp.modelloader.entity.ArtifactHandler;
+import org.openecomp.modelloader.restclient.AaiRestClient;
+import org.openecomp.modelloader.restclient.AaiRestClient.MimeType;
+import org.openecomp.modelloader.service.ModelLoaderMsgs;
+import org.springframework.web.util.UriUtils;
+
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import javax.ws.rs.core.Response;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+
+
+public class VnfCatalogArtifactHandler extends ArtifactHandler {
+
+  private static Logger logger = LoggerFactory.getInstance()
+      .getLogger(VnfCatalogArtifactHandler.class.getName());
+
+  public VnfCatalogArtifactHandler(ModelLoaderConfig config) {
+    super(config);
+  }
+
+  @Override
+  public boolean pushArtifacts(List<Artifact> artifacts, String distributionId) {
+    for (Artifact art : artifacts) {
+      VnfCatalogArtifact vnfCatalog = (VnfCatalogArtifact) art;
+      String artifactPayload = vnfCatalog.getPayload();
+
+      AaiRestClient restClient = new AaiRestClient(this.config);
+      List<VnfImage> putImages = new ArrayList<VnfImage>();
+
+      try {
+        JAXBContext inputContext = JAXBContext.newInstance(VnfCatalog.class);
+        Unmarshaller unmarshaller = inputContext.createUnmarshaller();
+        StringReader reader = new StringReader(artifactPayload);
+        VnfCatalog cat = (VnfCatalog) unmarshaller.unmarshal(reader);
+
+        int numParts = cat.getPartNumberList().size();
+
+        for (int i = 0; i < numParts; i++) {
+
+          PartNumberList pnl = cat.getPartNumberList().get(i);
+
+          String application = pnl.getVendorInfo().getVendorModel();
+          String applicationVendor = pnl.getVendorInfo().getVendorName();
+
+          int numVersions = pnl.getSoftwareVersionList().size();
+
+          for (int j = 0; j < numVersions; j++) {
+            String applicationVersion = pnl.getSoftwareVersionList().get(j).getSoftwareVersion();
+
+            String imageId = "vnf image " + applicationVendor + " " + application + " "
+                + applicationVersion;
+
+			String queryURI = "application-vendor=" + applicationVendor + "&application=" + application + "&application-version=" + applicationVersion;
+			
+			String getUrl = config.getAaiBaseUrl() + config.getAaiVnfImageUrl() + "?" + UriUtils.encodePath(queryURI, "UTF-8");
+
+            ClientResponse tryGet = restClient.getResource(getUrl, distributionId, MimeType.JSON);
+            if (tryGet == null) {
+              logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
+                  "Ingestion failed on " + imageId + ". Rolling back distribution.");
+              failureCleanup(putImages, restClient, distributionId);
+              return false;
+            }
+            if (tryGet.getStatus() == Response.Status.NOT_FOUND.getStatusCode()) {
+              // this vnf-image not already in the db, need to add
+              // only do this on 404 bc other error responses could mean there
+              // are problems that
+              // you might not want to try to PUT against
+
+              VnfImage image = new VnfImage();
+              image.setApplication(application);
+              image.setApplicationVendor(applicationVendor);
+              image.setApplicationVersion(applicationVersion);
+              String uuid = UUID.randomUUID().toString();
+              image.setUuid(uuid); // need to create uuid
+
+              System.setProperty("javax.xml.bind.context.factory",
+                  "org.eclipse.persistence.jaxb.JAXBContextFactory");
+              JAXBContext jaxbContext = JAXBContext.newInstance(VnfImage.class);
+              Marshaller marshaller = jaxbContext.createMarshaller();
+              marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");
+              marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);
+              marshaller.setProperty(MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);
+              marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false);
+              StringWriter writer = new StringWriter();
+              marshaller.marshal(image, writer);
+              String payload = writer.toString();
+
+              String putUrl = config.getAaiBaseUrl() + config.getAaiVnfImageUrl() + "/vnf-image/"
+                  + uuid;
+
+              ClientResponse putResp = restClient.putResource(putUrl, payload, distributionId,
+                  MimeType.JSON);
+              if (putResp == null
+                  || putResp.getStatus() != Response.Status.CREATED.getStatusCode()) {
+                logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
+                    "Ingestion failed on vnf-image " + imageId + ". Rolling back distribution.");
+                failureCleanup(putImages, restClient, distributionId);
+                return false;
+              }
+              putImages.add(image);
+              logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, imageId + " successfully ingested.");
+            } else if (tryGet.getStatus() == Response.Status.OK.getStatusCode()) {
+              logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
+                  imageId + " already exists.  Skipping ingestion.");
+            } else {
+              // if other than 404 or 200, something went wrong
+              logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
+                  "Ingestion failed on vnf-image " + imageId + " with status " + tryGet.getStatus()
+                      + ". Rolling back distribution.");
+              failureCleanup(putImages, restClient, distributionId);
+              return false;
+            }
+          }
+        }
+
+      } catch (JAXBException e) {
+        logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
+            "Ingestion failed. " + e.getMessage() + ". Rolling back distribution.");
+        failureCleanup(putImages, restClient, distributionId);
+        return false;
+      } catch (UnsupportedEncodingException e) {
+    	  logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, "Ingestion failed. " + e.getMessage() + ". Rolling back distribution.");
+    	  failureCleanup(putImages, restClient, distributionId);
+    	  return false;
+      }
+    }
+
+    return true;
+  }
+
+  /*
+   * if something fails in the middle of ingesting the catalog we want to
+   * rollback any changes to the db
+   */
+  private void failureCleanup(List<VnfImage> putImages, AaiRestClient restClient, String transId) {
+    for (VnfImage image : putImages) {
+      String url = config.getAaiBaseUrl() + config.getAaiVnfImageUrl() + "/vnf-image/"
+          + image.getUuid();
+      restClient.getAndDeleteResource(url, transId); // try to delete the image,
+                                                     // if something goes wrong
+                                                     // we can't really do
+                                                     // anything here
+    }
+  }
+
+}
diff --git a/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifact.java b/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifact.java
index 904dba9..14749e5 100644
--- a/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifact.java
+++ b/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifact.java
@@ -1,60 +1,134 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 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.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.entity.model;
-
-import org.openecomp.modelloader.entity.Artifact;
-
-import java.util.HashSet;
-import java.util.Set;
-
-public class ModelArtifact extends Artifact {
-
-  String nameVersionId;
-  Set<String> referencedModelIds = new HashSet<String>();
-
-  public String getNameVersionId() {
-    return nameVersionId;
-  }
-
-  public void setNameVersionId(String nameVersionId) {
-    this.nameVersionId = nameVersionId;
-  }
-
-  public Set<String> getDependentModelIds() {
-    return referencedModelIds;
-  }
-
-  public void addDependentModelId(String dependentModelId) {
-    this.referencedModelIds.add(dependentModelId);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("NameVersId=" + nameVersionId + "(" + getType().toString() + ") ==> ");
-    for (String dep : referencedModelIds) {
-      sb.append(dep + "  ");
-    }
-
-    return sb.toString();
-  }
-
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.entity.model;
+
+import org.openecomp.modelloader.entity.Artifact;
+import org.w3c.dom.Node;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class ModelArtifact extends Artifact {
+
+	String modelVerId;
+	String modelInvariantId;
+	String nameVersionId;
+	String modelModelVerCombinedKey;
+	String modelVerModelVersionId;
+	String modelModelInvariantId;
+	String modelNamespace;
+	Set<String> referencedModelIds = new HashSet<String>(); 
+	Node modelVer;
+	boolean isV9Artifact = true;
+	
+	public boolean isV9Artifact() {
+		return isV9Artifact;
+	}
+	
+	public void setV9Artifact(boolean isV9Artifact) {
+		this.isV9Artifact = isV9Artifact;
+	}
+
+	public String getModelVerModelVersionId() {
+		return modelVerModelVersionId;
+	}
+	
+	public void setModelVerModelVersionId(String modelVerModelVersionId) {
+		this.modelVerModelVersionId = modelVerModelVersionId;
+	}
+	
+	public String getModelModelInvariantId() {
+		return modelModelInvariantId;
+	}
+	
+	public void setModelModelInvariantId(String modelModelInvariantId) {
+		this.modelModelInvariantId = modelModelInvariantId;
+	}
+	
+	public String getNameVersionId() {
+		return nameVersionId;
+	}
+
+	public void setNameVersionId(String nameVersionId) {
+		this.nameVersionId = nameVersionId;
+	}
+	
+	public String getModelNamespace() {
+		return modelNamespace;
+	}
+	
+	public void setModelNamespace(String modelNamespace) {
+		this.modelNamespace = modelNamespace;
+	}
+
+	public Set<String> getDependentModelIds() {
+		return referencedModelIds;
+	}
+
+	public void addDependentModelId(String dependentModelId) {
+		this.referencedModelIds.add(dependentModelId);
+	}
+
+	@Override
+	public String toString() {
+		StringBuilder sb = new StringBuilder();
+		sb.append("ModelInvariantId=" + modelInvariantId + "(" + getType().toString() + ") ==> ");
+		for (String dep : referencedModelIds) {
+			sb.append(dep + "  ");
+		}
+
+		return sb.toString();
+	}
+
+	public String getModelVerId() {
+		return modelVerId;
+	}
+	
+	public void setModelVerId(String modelVerId) {
+		this.modelVerId = modelVerId;
+	}
+	
+	public String getModelInvariantId() {
+		return modelInvariantId;
+	}
+	
+	public void setModelInvariantId(String modelInvariantId) {
+		this.modelInvariantId = modelInvariantId;
+	}
+	
+	public Node getModelVer() {
+		return modelVer;
+	}
+	
+	public void setModelVer(Node modelVer) {
+		this.modelVer = modelVer;
+	}
+	
+	public String getModelModelVerCombinedKey() {
+		return getModelInvariantId() + "|" + getModelVerId();
+	}
+	
+	public void setModelModelVerCombinedKey(String modelModelVerCombinedKey) {
+		this.modelModelVerCombinedKey = getModelInvariantId() + "|" + getModelVerId();
+	}
+}
diff --git a/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactHandler.java b/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactHandler.java
index fb269b1..ce6d986 100644
--- a/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactHandler.java
+++ b/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactHandler.java
@@ -1,133 +1,228 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 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.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.entity.model;
-
-import com.sun.jersey.api.client.ClientResponse;
-
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.modelloader.config.ModelLoaderConfig;
-import org.openecomp.modelloader.entity.Artifact;
-import org.openecomp.modelloader.entity.ArtifactHandler;
-import org.openecomp.modelloader.entity.ArtifactType;
-import org.openecomp.modelloader.restclient.AaiRestClient;
-import org.openecomp.modelloader.service.ModelLoaderMsgs;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.ws.rs.core.Response;
-
-public class ModelArtifactHandler extends ArtifactHandler {
-
-  private static Logger logger = LoggerFactory.getInstance()
-      .getLogger(ArtifactHandler.class.getName());
-
-  public ModelArtifactHandler(ModelLoaderConfig config) {
-    super(config);
-  }
-
-  @Override
-  public boolean pushArtifacts(List<Artifact> artifacts, String distributionId) {
-    ModelSorter modelSorter = new ModelSorter();
-    List<Artifact> sortedModelArtifacts = modelSorter.sort(artifacts);
-
-    // Push the ordered list of model artifacts to A&AI. If one fails, we need
-    // to roll back
-    // the changes.
-    List<ModelArtifact> completedModels = new ArrayList<ModelArtifact>();
-    AaiRestClient aaiClient = new AaiRestClient(config);
-
-    for (Artifact art : sortedModelArtifacts) {
-      ModelArtifact model = (ModelArtifact) art;
-      ClientResponse getResponse = aaiClient.getResource(getUrl(model), distributionId,
-          AaiRestClient.MimeType.XML);
-      if ((getResponse == null)
-          || (getResponse.getStatus() != Response.Status.OK.getStatusCode())) {
-        // Only attempt the PUT if the model doesn't already exist
-        ClientResponse putResponse = aaiClient.putResource(getUrl(model), model.getPayload(),
-            distributionId, AaiRestClient.MimeType.XML);
-        if ((putResponse != null)
-            && (putResponse.getStatus() == Response.Status.CREATED.getStatusCode())) {
-          completedModels.add(model);
-          logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, model.getType().toString() + " "
-              + model.getNameVersionId() + " successfully ingested.");
-        } else {
-          logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-              "Ingestion failed for " + model.getType().toString() + " " + model.getNameVersionId()
-                  + ". Rolling back distribution.");
-
-          for (ModelArtifact modelToDelete : completedModels) {
-            // Best effort to delete. Nothing we can do in the event this fails.
-            aaiClient.getAndDeleteResource(getUrl(modelToDelete), distributionId);
-          }
-
-          return false;
-        }
-      } else {
-        logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, model.getType().toString() + " "
-            + model.getNameVersionId() + " already exists.  Skipping ingestion.");
-      }
-    }
-
-    return true;
-  }
-
-  private String getUrl(ModelArtifact model) {
-    String baseUrl = config.getAaiBaseUrl().trim();
-    String subUrl = null;
-    if (model.getType().equals(ArtifactType.MODEL)) {
-      subUrl = config.getAaiModelUrl().trim();
-    } else {
-      subUrl = config.getAaiNamedQueryUrl().trim();
-    }
-
-    if ((!baseUrl.endsWith("/")) && (!subUrl.startsWith("/"))) {
-      baseUrl = baseUrl + "/";
-    }
-
-    if (baseUrl.endsWith("/") && subUrl.startsWith("/")) {
-      baseUrl = baseUrl.substring(0, baseUrl.length() - 1);
-    }
-
-    if (!subUrl.endsWith("/")) {
-      subUrl = subUrl + "/";
-    }
-
-    String url = baseUrl + subUrl + model.getNameVersionId();
-    return url;
-  }
-
-  /**
-   * This method is used for the test REST interface to load models without an
-   * ASDC.
-   * 
-   * @param payload content of the request
-   */
-  public void loadModelTest(byte[] payload) {
-    List<Artifact> modelArtifacts = new ArrayList<Artifact>();
-    ModelArtifactParser parser = new ModelArtifactParser();
-    modelArtifacts.addAll(parser.parse(payload, "Test-Artifact"));
-    ModelSorter modelSorter = new ModelSorter();
-    List<Artifact> sortedModelArtifacts = modelSorter.sort(modelArtifacts);
-    pushArtifacts(sortedModelArtifacts, "Test-Distribution");
-  }
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.entity.model;
+
+import com.sun.jersey.api.client.ClientResponse;
+
+import org.openecomp.cl.api.Logger;
+import org.openecomp.cl.eelf.LoggerFactory;
+import org.openecomp.modelloader.config.ModelLoaderConfig;
+import org.openecomp.modelloader.entity.Artifact;
+import org.openecomp.modelloader.entity.ArtifactHandler;
+import org.openecomp.modelloader.entity.ArtifactType;
+import org.openecomp.modelloader.restclient.AaiRestClient;
+import org.openecomp.modelloader.service.ModelLoaderMsgs;
+
+import org.w3c.dom.Node;
+
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.ws.rs.core.Response;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+
+public class ModelArtifactHandler extends ArtifactHandler {
+
+  private static final String AAI_MODEL_VER = "/model-vers/model-ver";
+  private static Logger logger = LoggerFactory.getInstance().getLogger(ArtifactHandler.class.getName());
+
+
+  public ModelArtifactHandler(ModelLoaderConfig config) {
+    super(config);
+  }
+
+  @Override
+  public boolean pushArtifacts(List<Artifact> artifacts, String distributionID) {
+    ModelSorter modelSorter = new ModelSorter();
+    List<Artifact> sortedModelArtifacts = modelSorter.sort(artifacts);
+
+    // Push the ordered list of model artifacts to A&AI.  If one fails, we need to roll back
+    // the changes.
+    List<ModelArtifact> completedModels = new ArrayList<ModelArtifact>();
+    AaiRestClient aaiClient = new AaiRestClient(config);
+
+    for (Artifact art : sortedModelArtifacts) {
+      ModelArtifact model = (ModelArtifact)art;
+
+      boolean version = model.isV9Artifact();
+      //Non - V9 version for models
+      if(version == false){
+        ClientResponse getResponse = aaiClient.getResource(getModelVerURL(model), distributionID, AaiRestClient.MimeType.XML);
+        if ( (getResponse == null) || (getResponse.getStatus() != Response.Status.OK.getStatusCode()) ) {
+          logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, " Artifact format not valid for " + 
+              model.getType().toString() + "- model-invariant-id[model-id]: " + 
+              model.getModelInvariantId() + " and model-version-id[model-name-version-id]: "+ 
+              model.getModelVerId()+ " . Rolling back distribution.");
+          return false;
+        }
+        else{
+          completedModels.add(model);
+          logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, model.getType().toString() + 
+              " " + model.getModelInvariantId() + " successfully ingested.");
+        }
+      }
+      else
+      {
+        ClientResponse getResponse  = aaiClient.getResource(getURL(model), distributionID, AaiRestClient.MimeType.XML);
+        if ( (getResponse == null) || (getResponse.getStatus() != Response.Status.OK.getStatusCode()) ) {
+          // Only attempt the PUT if the model doesn't already exist
+          ClientResponse putResponse = aaiClient.putResource(getURL(model), model.getPayload(), distributionID, AaiRestClient.MimeType.XML);
+          if ( (putResponse != null) && (putResponse.getStatus() == Response.Status.CREATED.getStatusCode()) ) {
+            completedModels.add(model);
+            logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, model.getType().toString() + 
+                " " + model.getModelInvariantId() + " successfully ingested.");
+          }
+          else {
+            logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, "Ingestion failed for " + 
+                model.getType().toString() + " " + model.getModelInvariantId() + ". Rolling back distribution.");
+
+            for (ModelArtifact modelToDelete : completedModels) {
+              // Best effort to delete.  Nothing we can do in the event this fails.
+              aaiClient.getAndDeleteResource(getURL(modelToDelete), distributionID);
+            }
+
+            return false;
+          }
+        }
+        else {
+          logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, model.getType().toString() + " " + model.getModelInvariantId() + 
+              " already exists.  Skipping ingestion.");
+          getResponse  = aaiClient.getResource(getModelVerURL(model), distributionID, AaiRestClient.MimeType.XML);
+          if ( (getResponse == null) || (getResponse.getStatus() != Response.Status.OK.getStatusCode()) ) {
+            // Only attempt the PUT if the model-ver doesn't already exist
+            ClientResponse putResponse = null;
+
+            try {
+              putResponse = aaiClient.putResource(getModelVerURL(model), nodeToString(model.getModelVer()), distributionID, AaiRestClient.MimeType.XML);
+            } catch (TransformerException e) {
+              // TODO Auto-generated catch block
+              e.printStackTrace();
+            }
+            if ( (putResponse != null) && (putResponse.getStatus() == Response.Status.CREATED.getStatusCode()) ) {
+              completedModels.add(model);
+              logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, model.getType().toString() + " " + 
+                  model.getNameVersionId() + " successfully ingested.");
+            }
+            else {
+              logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, "Ingestion failed for " + 
+                  model.getType().toString() + " " + model.getNameVersionId() + ". Rolling back distribution.");
+
+              for (ModelArtifact modelToDelete : completedModels) {
+                // Best effort to delete.  Nothing we can do in the event this fails.
+                aaiClient.getAndDeleteResource(getModelVerURL(modelToDelete), distributionID);
+              }
+
+              return false;
+            }
+          }
+          else {
+            logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, model.getType().toString() + " " + 
+                model.getModelInvariantId() + " already exists.  Skipping ingestion.");
+          }
+        }
+      }
+    }
+
+    return true;
+  }
+
+
+  private String nodeToString(Node node) throws TransformerException {
+    StringWriter sw = new StringWriter();
+    Transformer t = TransformerFactory.newInstance().newTransformer();
+    t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
+    t.transform(new DOMSource(node), new StreamResult(sw));
+    System.out.println(sw.toString());
+    return sw.toString();
+  }
+
+  private String getURL(ModelArtifact model) {
+    String baseURL = config.getAaiBaseUrl().trim();
+    String subURL = null;
+    if (model.getType().equals(ArtifactType.MODEL)) {
+      subURL = config.getAaiModelUrl().trim();
+    }
+    else {
+      subURL = config.getAaiNamedQueryUrl().trim();
+    }
+
+    if ( (!baseURL.endsWith("/")) && (!subURL.startsWith("/")) ) {
+      baseURL = baseURL + "/";
+    }
+
+    if ( baseURL.endsWith("/") && subURL.startsWith("/") ) {
+      baseURL = baseURL.substring(0, baseURL.length()-1);
+    }
+
+    if (!subURL.endsWith("/")) {
+      subURL = subURL + "/";
+    }
+
+    String url = baseURL + subURL + model.getModelInvariantId();
+    return url;
+  }
+
+  private String getModelVerURL(ModelArtifact model) {
+    String baseURL = config.getAaiBaseUrl().trim();
+    String subURL = null;
+    if (model.getType().equals(ArtifactType.MODEL)) {
+      subURL = config.getAaiModelUrl().trim() + model.getModelInvariantId() + AAI_MODEL_VER;
+    }
+    else {
+      subURL = config.getAaiNamedQueryUrl().trim();
+    }
+
+    if ( (!baseURL.endsWith("/")) && (!subURL.startsWith("/")) ) {
+      baseURL = baseURL + "/";
+    }
+
+    if ( baseURL.endsWith("/") && subURL.startsWith("/") ) {
+      baseURL = baseURL.substring(0, baseURL.length()-1);
+    }
+
+    if (!subURL.endsWith("/")) {
+      subURL = subURL + "/";
+    }
+
+    String url = baseURL + subURL + model.getModelVerId();
+    System.out.println(url);
+    return url;
+  }
+
+  // This method is used for the test REST interface to load models without an ASDC
+  public void loadModelTest(byte[] payload) {
+    List<Artifact> modelArtifacts = new ArrayList<Artifact>();
+    ModelArtifactParser parser = new ModelArtifactParser();
+    modelArtifacts.addAll(parser.parse(payload, "Test-Artifact"));
+    ModelSorter modelSorter = new ModelSorter();
+    List<Artifact> sortedModelArtifacts = modelSorter.sort(modelArtifacts);
+    pushArtifacts(sortedModelArtifacts, "Test-Distribution");
+  }
+}
diff --git a/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactParser.java b/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactParser.java
index 625145f..de27924 100644
--- a/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactParser.java
+++ b/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactParser.java
@@ -1,197 +1,265 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 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.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.entity.model;
-
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.modelloader.entity.Artifact;
-import org.openecomp.modelloader.entity.ArtifactType;
-import org.openecomp.modelloader.service.ModelLoaderMsgs;
-import org.openecomp.modelloader.util.JsonXmlConverter;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.InputSource;
-
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-public class ModelArtifactParser {
-
-  private static String MODELS_ELEMENT = "models";
-  private static String MODEL_ELEMENT = "model";
-  private static String NAMED_QUERIES_ELEMENT = "named-queries";
-  private static String NAMED_QUERY_ELEMENT = "named-query";
-  private static String MODEL_NAME_VERSION_ID = "model-name-version-id";
-  private static String NAMED_QUERY_VERSION_ID = "named-query-uuid";
-  private static String RELATIONSHIP_DATA = "relationship-data";
-  private static String RELATIONSHIP_KEY = "relationship-key";
-  private static String RELATIONSHIP_VALUE = "relationship-value";
-  private static String MODEL_ELEMENT_RELATIONSHIP_KEY = "model.model-name-version-id";
-
-  private static Logger logger = LoggerFactory.getInstance()
-      .getLogger(ModelArtifactParser.class.getName());
-
-  /**
-   * This method parses the given artifact payload in byte array format and
-   * generates a list of model artifacts according to the content.
-   * 
-   * @param artifactPayload
-   *          artifact content to be parsed
-   * @param artifactName
-   *          name of the artifact
-   * @return a list of model artifacts
-   */
-  public List<Artifact> parse(byte[] artifactPayload, String artifactName) {
-    String payload = new String(artifactPayload);
-    List<Artifact> modelList = new ArrayList<Artifact>();
-
-    try {
-      // Artifact could be JSON or XML
-      if (JsonXmlConverter.isValidJson(payload)) {
-        payload = JsonXmlConverter.convertJsonToXml(payload);
-      }
-
-      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-      DocumentBuilder builder = factory.newDocumentBuilder();
-      InputSource is = new InputSource(new StringReader(payload));
-      Document doc = builder.parse(is);
-
-      if ((doc.getDocumentElement().getNodeName().equalsIgnoreCase(MODEL_ELEMENT))
-          || (doc.getDocumentElement().getNodeName().equalsIgnoreCase(NAMED_QUERY_ELEMENT))) {
-        ModelArtifact model = parseModel(doc.getDocumentElement(), payload);
-        if (model != null) {
-          modelList.add(model);
-        } else {
-          // TODO: A WARN message?
-          logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
-              "Unable to parse artifact " + artifactName);
-        }
-      } else if ((doc.getDocumentElement().getNodeName().equalsIgnoreCase(MODELS_ELEMENT))
-          || (doc.getDocumentElement().getNodeName().equalsIgnoreCase(NAMED_QUERIES_ELEMENT))) {
-        // The complete set of models/named-queries were contained in this
-        // artifact
-        NodeList nodeList = doc.getDocumentElement().getChildNodes();
-        for (int i = 0; i < nodeList.getLength(); i++) {
-          Node childNode = nodeList.item(i);
-          if ((childNode.getNodeName().equalsIgnoreCase(MODEL_ELEMENT))
-              || (childNode.getNodeName().equalsIgnoreCase(NAMED_QUERY_ELEMENT))) {
-            String modelPayload = nodeToString(childNode);
-            ModelArtifact model = parseModel(childNode, modelPayload);
-            if (model != null) {
-              modelList.add(model);
-            } else {
-              // TODO: A WARN message?
-              logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
-                  "Unable to parse artifact " + artifactName);
-              modelList.clear();
-              break;
-            }
-          }
-        }
-      }
-    } catch (Exception ex) {
-      // This may not be an error. We may be receiving an artifact that is
-      // unrelated
-      // to models. In this case, we just ignore it.
-      // TODO: A WARN message?
-      logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
-          "Unable to parse artifact " + artifactName + ": " + ex.getLocalizedMessage());
-    }
-
-    return modelList;
-  }
-
-  private ModelArtifact parseModel(Node modelNode, String payload) {
-    ModelArtifact model = new ModelArtifact();
-    model.setPayload(payload);
-
-    if (modelNode.getNodeName().equalsIgnoreCase(MODEL_ELEMENT)) {
-      model.setType(ArtifactType.MODEL);
-    } else {
-      model.setType(ArtifactType.NAMED_QUERY);
-    }
-
-    parseNode(modelNode, model);
-
-    if (model.getNameVersionId() == null) {
-      return null;
-    }
-
-    return model;
-  }
-
-  private void parseNode(Node node, ModelArtifact model) {
-    if (node.getNodeName().equalsIgnoreCase(MODEL_NAME_VERSION_ID)) {
-      model.setNameVersionId(node.getTextContent().trim());
-    } else if (node.getNodeName().equalsIgnoreCase(NAMED_QUERY_VERSION_ID)) {
-      model.setNameVersionId(node.getTextContent().trim());
-    } else if (node.getNodeName().equalsIgnoreCase(RELATIONSHIP_DATA)) {
-      parseRelationshipNode(node, model);
-    } else {
-      NodeList nodeList = node.getChildNodes();
-      for (int i = 0; i < nodeList.getLength(); i++) {
-        Node childNode = nodeList.item(i);
-        parseNode(childNode, model);
-      }
-    }
-  }
-
-  private void parseRelationshipNode(Node node, ModelArtifact model) {
-    String key = null;
-    String value = null;
-
-    NodeList nodeList = node.getChildNodes();
-    for (int i = 0; i < nodeList.getLength(); i++) {
-      Node childNode = nodeList.item(i);
-      if (childNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_KEY)) {
-        key = childNode.getTextContent().trim();
-      } else if (childNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_VALUE)) {
-        value = childNode.getTextContent().trim();
-      }
-    }
-
-    if ((key != null) && (key.equalsIgnoreCase(MODEL_ELEMENT_RELATIONSHIP_KEY))) {
-      if (value != null) {
-        model.addDependentModelId(value);
-      }
-    }
-  }
-
-  private String nodeToString(Node node) throws TransformerException {
-    StringWriter sw = new StringWriter();
-    Transformer transfomer = TransformerFactory.newInstance().newTransformer();
-    transfomer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
-    transfomer.transform(new DOMSource(node), new StreamResult(sw));
-    return sw.toString();
-  }
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.entity.model;
+
+import org.openecomp.cl.api.Logger;
+import org.openecomp.cl.eelf.LoggerFactory;
+import org.openecomp.modelloader.entity.Artifact;
+import org.openecomp.modelloader.entity.ArtifactType;
+import org.openecomp.modelloader.service.ModelLoaderMsgs;
+import org.openecomp.modelloader.util.JsonXmlConverter;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.XMLConstants;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+
+public class ModelArtifactParser {
+
+	private static String MODELS_ELEMENT = "models";
+	private static String MODEL_ELEMENT = "model";
+	private static String NAMED_QUERIES_ELEMENT = "named-queries";
+	private static String NAMED_QUERY_ELEMENT = "named-query";
+	private static String MODEL_NAME_VERSION_ID = "model-name-version-id";
+	private static String MODEL_VER = "model-ver";
+	private static String MODEL_VERSION_ID = "model-version-id";
+	private static String MODEL_INVARIANT_ID = "model-invariant-id";
+	private static String NAMED_QUERY_VERSION_ID = "named-query-uuid";
+	private static String RELATIONSHIP_DATA = "relationship-data";
+	private static String RELATIONSHIP_KEY = "relationship-key";
+	private static String RELATIONSHIP_VALUE = "relationship-value";
+	private static String MODEL_ELEMENT_RELATIONSHIP_KEY = "model.model-invariant-id";
+	private static String MODEL_VER_ELEMENT_RELATIONSHIP_KEY = "model-ver.model-version-id";
+	
+	private  static Logger logger = LoggerFactory.getInstance().getLogger(ModelArtifactParser.class.getName());
+	
+	public List<Artifact> parse(byte[] artifactPayload, String artifactName) {
+	  String payload = new String(artifactPayload);
+	  List<Artifact> modelList = new ArrayList<Artifact>();
+
+	  try {
+	    // Artifact could be JSON or XML
+	    if (JsonXmlConverter.isValidJson(payload)) {
+	      payload = JsonXmlConverter.convertJsonToXml(payload);
+	    }
+
+	    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+	    DocumentBuilder builder = factory.newDocumentBuilder();
+	    InputSource is = new InputSource(new StringReader(payload));
+	    Document doc = builder.parse(is);
+
+	    if ( (doc.getDocumentElement().getNodeName().equalsIgnoreCase(MODEL_ELEMENT)) || 
+	        (doc.getDocumentElement().getNodeName().equalsIgnoreCase(NAMED_QUERY_ELEMENT)) ) {
+
+	      ModelArtifact model = parseModel(doc.getDocumentElement(), payload);
+
+	      if (model != null) {
+	        if ( ArtifactType.MODEL.equals(model.getType())) {
+	          logger.info( ModelLoaderMsgs.DISTRIBUTION_EVENT, "Model parsed =====>>>> "
+	              + "Model-invariant-Id: "+ model.getModelInvariantId()
+	              + " Model-Version-Id: "+ model.getModelVerId());
+	        }
+	        modelList.add(model);
+	      }
+	      else {
+	        logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse artifact " + artifactName);
+	        return null;
+	      }
+	    }
+	    else if ( (doc.getDocumentElement().getNodeName().equalsIgnoreCase(MODELS_ELEMENT)) ||
+	        (doc.getDocumentElement().getNodeName().equalsIgnoreCase(NAMED_QUERIES_ELEMENT)) ) {
+	      // The complete set of models/named-queries were contained in this artifact
+	      NodeList nodeList = doc.getDocumentElement().getChildNodes();
+	      for (int i = 0; i < nodeList.getLength(); i++) {
+	        Node childNode = nodeList.item(i);
+	        if ( (childNode.getNodeName().equalsIgnoreCase(MODEL_ELEMENT)) || 
+	            (childNode.getNodeName().equalsIgnoreCase(NAMED_QUERY_ELEMENT)) ) {
+	          String modelPayload = nodeToString(childNode);
+	          ModelArtifact model = parseModel(childNode, modelPayload);
+	          if (model != null) {
+	            modelList.add(model);
+	          }
+	          else {
+	            logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse artifact " + artifactName);
+	            modelList.clear();
+	            break;
+	          }
+	        }
+	      }
+	    }
+	  }
+	  catch (Exception ex) {
+	    logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse artifact " + artifactName + ": " + ex.getLocalizedMessage());
+	  }
+
+	  return modelList;
+	}
+
+	private void printDetails(Node modelVer) throws TransformerException {
+	  logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, nodeToString(modelVer));
+	}
+
+	private ModelArtifact parseModel(Node modelNode, String payload) {
+	  ModelArtifact model = new ModelArtifact();
+	  model.setPayload(payload);
+
+	  if (modelNode.getNodeName().equalsIgnoreCase(MODEL_ELEMENT)) {
+	    //compare with Model-ver
+	    model.setType(ArtifactType.MODEL);
+	  }
+	  else {
+	    model.setType(ArtifactType.NAMED_QUERY);
+	  }
+
+	  Element e = (Element)modelNode;
+	  model.setModelNamespace(e.getAttribute("xmlns"));
+
+	  parseNode(modelNode, model);
+
+	  if (model.getModelInvariantId() == null  && model.getNameVersionId() == null) {
+	    return null;
+	  }
+
+	  return model;
+	}
+
+	private void parseNode(Node node, ModelArtifact model) {
+
+	  if(node.getNodeName().equalsIgnoreCase(MODEL_NAME_VERSION_ID)){
+	    model.setModelVerId(node.getTextContent().trim());
+	    model.setV9Artifact(false);
+	  }
+	  else if(node.getNodeName().equalsIgnoreCase("model-id")){
+	    model.setModelInvariantId(node.getTextContent().trim());
+	    model.setV9Artifact(false);
+	  }
+
+	  else if (node.getNodeName().equalsIgnoreCase(MODEL_INVARIANT_ID)) {
+	    model.setModelInvariantId(node.getTextContent().trim());
+	  }
+	  else if (node.getNodeName().equalsIgnoreCase(MODEL_VERSION_ID)) {
+	    model.setModelVerId(node.getTextContent().trim());
+	    //Change to Model Invariant Id
+	  }
+	  else if (node.getNodeName().equalsIgnoreCase(NAMED_QUERY_VERSION_ID)) {
+	    model.setNameVersionId(node.getTextContent().trim());
+	  }
+	  else if (node.getNodeName().equalsIgnoreCase(RELATIONSHIP_DATA)) {
+	    parseRelationshipNode(node, model);
+	    if(model.getModelModelInvariantId()!=null && model.getModelVerModelVersionId()!=null && !model.getModelModelInvariantId().isEmpty() && !model.getModelVerModelVersionId().isEmpty()){
+	      model.addDependentModelId(model.getModelModelInvariantId() + "|" + model.getModelVerModelVersionId());
+	      model.setModelModelInvariantId("");
+	      model.setModelVerModelVersionId("");
+	    }
+	  }
+	  else {
+
+	    if (node.getNodeName().equalsIgnoreCase(MODEL_VER)) {
+	      model.setModelVer(node);
+	      if ( (model.getModelNamespace() != null) && (!model.getModelNamespace().isEmpty()) ) {
+	        Element e = (Element) node;
+	        e.setAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, "xmlns", model.getModelNamespace());
+	        System.out.println("Setting NS: " + e.getAttribute("xmlns"));
+	      }
+	    }
+
+	    NodeList nodeList = node.getChildNodes();
+
+	    for (int i = 0; i < nodeList.getLength(); i++) {
+	      Node childNode = nodeList.item(i); 
+	      parseNode(childNode, model);
+	    }
+	  }
+	}
+
+	private void parseRelationshipNode(Node node, ModelArtifact model) {
+
+	  //invariant-id comes before model-version-id .. create a list of values
+	  String key = null;
+	  String value = null;
+	  String modelVersionIdKey=null;
+	  String modelInvariantIdIdKey=null;
+	  String modelVersionIdValue=null;
+	  String modelInvariantIdIdValue=null;
+
+	  NodeList nodeList = node.getChildNodes();
+	  for (int i = 0; i < nodeList.getLength(); i++) {
+	    Node childNode = nodeList.item(i);
+
+
+	    if (childNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_KEY)) {
+	      key = childNode.getTextContent().trim();
+	      if(key.equalsIgnoreCase(MODEL_VER_ELEMENT_RELATIONSHIP_KEY)){
+	        modelVersionIdKey = key;
+	      }
+	      else if(key.equalsIgnoreCase(MODEL_ELEMENT_RELATIONSHIP_KEY)){
+	        modelInvariantIdIdKey = key;
+	      }
+	    }
+	    else if (childNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_VALUE)) {
+	      value = childNode.getTextContent().trim();
+	      if(modelVersionIdKey!=null){
+	        modelVersionIdValue = value;
+	        model.setModelVerModelVersionId(modelVersionIdValue);
+	      }
+	      else if(modelInvariantIdIdKey!=null){
+	        modelInvariantIdIdValue = value;
+	        model.setModelModelInvariantId(modelInvariantIdIdValue);
+	      } 
+
+	    }
+	  }
+
+	  if ( (key != null) && (key.equalsIgnoreCase(MODEL_ELEMENT_RELATIONSHIP_KEY )) && 
+	      (model.isV9Artifact == false ||ArtifactType.NAMED_QUERY.equals(model.getType())) ) {
+	    if (value != null) {
+	      model.addDependentModelId(value);
+	    }
+	  }
+	}
+
+	private String nodeToString(Node node) throws TransformerException {
+	  StringWriter sw = new StringWriter();
+	  Transformer t = TransformerFactory.newInstance().newTransformer();
+	  t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
+	  t.transform(new DOMSource(node), new StreamResult(sw));
+	  return sw.toString();
+	}
+}
diff --git a/src/main/java/org/openecomp/modelloader/entity/model/ModelSorter.java b/src/main/java/org/openecomp/modelloader/entity/model/ModelSorter.java
index 4dcda71..79f1c29 100644
--- a/src/main/java/org/openecomp/modelloader/entity/model/ModelSorter.java
+++ b/src/main/java/org/openecomp/modelloader/entity/model/ModelSorter.java
@@ -1,233 +1,235 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 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.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.entity.model;
-
-import jline.internal.Log;
-
-import org.openecomp.modelloader.entity.Artifact;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Utility class to sort the given Models according to their dependencies.
- * Example: Given a list of Models [A, B, C] where B depends on A, and A depends
- * on C, the sorted result will be [C, A, B]
- */
-public class ModelSorter {
-
-  /**
-   * Wraps a Model object to form dependencies other Models using Edges.
-   */
-  static class Node {
-    private final ModelArtifact model;
-    private final HashSet<Edge> inEdges;
-    private final HashSet<Edge> outEdges;
-
-    public Node(ModelArtifact model) {
-      this.model = model;
-      inEdges = new HashSet<Edge>();
-      outEdges = new HashSet<Edge>();
-    }
-
-    public Node addEdge(Node node) {
-      Edge edge = new Edge(this, node);
-      outEdges.add(edge);
-      node.inEdges.add(edge);
-      return this;
-    }
-
-    @Override
-    public String toString() {
-      return model.getNameVersionId();
-    }
-
-    @Override
-    public boolean equals(Object other) {
-      ModelArtifact otherModel = ((Node) other).model;
-      return this.model.getNameVersionId().equals(otherModel.getNameVersionId());
-    }
-
-    @Override
-    public int hashCode() {
-      return this.model.getNameVersionId().hashCode();
-
-    }
-  }
-
-  /**
-   * Represents a dependency between two Nodes.
-   */
-  static class Edge {
-    public final Node from;
-    public final Node to;
-
-    public Edge(Node from, Node to) {
-      this.from = from;
-      this.to = to;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-      Edge edge = (Edge) obj;
-      return edge.from == from && edge.to == to;
-    }
-  }
-
-  /**
-   * Returns the list of models sorted by order of dependency.
-   * 
-   * @param originalList
-   *          the list that needs to be sorted
-   * @return a list of sorted models
-   */
-  public List<Artifact> sort(List<Artifact> originalList) {
-
-    if (originalList.size() <= 1) {
-      return originalList;
-    }
-
-    Collection<Node> nodes = createNodes(originalList);
-    Collection<Node> sortedNodes = sortNodes(nodes);
-
-    List<Artifact> sortedModelsList = new ArrayList<Artifact>(sortedNodes.size());
-    for (Node node : sortedNodes) {
-      sortedModelsList.add(node.model);
-    }
-
-    return sortedModelsList;
-  }
-
-  /**
-   * Create nodes from the list of models and their dependencies.
-   * 
-   * @param models
-   *          what the nodes creation is based upon
-   * @return Collection of Node objects
-   */
-  private Collection<Node> createNodes(Collection<Artifact> models) {
-
-    // load list of models into a map, so we can later replace referenceIds with
-    // real Models
-    HashMap<String, ModelArtifact> versionIdToModelMap = new HashMap<String, ModelArtifact>();
-    for (Artifact art : models) {
-      ModelArtifact ma = (ModelArtifact) art;
-      versionIdToModelMap.put(ma.getNameVersionId(), ma);
-    }
-
-    HashMap<String, Node> nodes = new HashMap<String, Node>();
-    // create a node for each model and its referenced models
-    for (Artifact art : models) {
-      ModelArtifact model = (ModelArtifact) art;
-
-      // node might have been created by another model referencing it
-      Node node = nodes.get(model.getNameVersionId());
-
-      if (null == node) {
-        node = new Node(model);
-        nodes.put(model.getNameVersionId(), node);
-      }
-
-      for (String referencedModelId : model.getDependentModelIds()) {
-        // node might have been created by another model referencing it
-        Node referencedNode = nodes.get(referencedModelId);
-
-        if (null == referencedNode) {
-          // create node
-          ModelArtifact referencedModel = versionIdToModelMap.get(referencedModelId);
-          if (referencedModel == null) {
-            Log.debug("ignoring " + referencedModelId);
-            continue; // referenced model not supplied, no need to sort it
-          }
-          referencedNode = new Node(referencedModel);
-          nodes.put(referencedModelId, referencedNode);
-        }
-        referencedNode.addEdge(node);
-      }
-    }
-
-    return nodes.values();
-  }
-
-  /**
-   * Sorts the given Nodes by order of dependency.
-   * 
-   * @param originalList
-   *          the collection of nodes to be sorted
-   * @return a sorted collection of the given nodes
-   */
-  private Collection<Node> sortNodes(Collection<Node> unsortedNodes) {
-
-    // L <- Empty list that will contain the sorted elements
-    ArrayList<Node> nodeList = new ArrayList<Node>();
-
-    // S <- Set of all nodes with no incoming edges
-    HashSet<Node> nodeSet = new HashSet<Node>();
-    for (Node unsortedNode : unsortedNodes) {
-      if (unsortedNode.inEdges.size() == 0) {
-        nodeSet.add(unsortedNode);
-      }
-    }
-
-    // while S is non-empty do
-    while (!nodeSet.isEmpty()) {
-      // remove a node n from S
-      Node node = nodeSet.iterator().next();
-      nodeSet.remove(node);
-
-      // insert n into L
-      nodeList.add(node);
-
-      // for each node m with an edge e from n to m do
-      for (Iterator<Edge> it = node.outEdges.iterator(); it.hasNext();) {
-        // remove edge e from the graph
-        Edge edge = it.next();
-        Node to = edge.to;
-        it.remove();// Remove edge from n
-        to.inEdges.remove(edge);// Remove edge from m
-
-        // if m has no other incoming edges then insert m into S
-        if (to.inEdges.isEmpty()) {
-          nodeSet.add(to);
-        }
-      }
-    }
-    // Check to see if all edges are removed
-    boolean cycle = false;
-    for (Node node : unsortedNodes) {
-      if (!node.inEdges.isEmpty()) {
-        cycle = true;
-        break;
-      }
-    }
-    if (cycle) {
-      throw new RuntimeException(
-          "Circular dependency present between models, topological sort not possible");
-    }
-
-    return nodeList;
-  }
-
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.entity.model;
+
+import jline.internal.Log;
+
+import org.openecomp.modelloader.entity.Artifact;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Utility class to sort the given Models according to their dependencies.
+ * Example: Given a list of Models [A, B, C] where B depends on A, and A depends
+ * on C, the sorted result will be [C, A, B]
+ */
+public class ModelSorter {
+
+  /**
+   * Wraps a Model object to form dependencies other Models using Edges.
+   */
+  static class Node {
+    private final ModelArtifact model;
+    private final HashSet<Edge> inEdges;
+    private final HashSet<Edge> outEdges;
+
+    public Node(ModelArtifact model) {
+      this.model = model;
+      inEdges = new HashSet<Edge>();
+      outEdges = new HashSet<Edge>();
+    }
+
+    public Node addEdge(Node node) {
+      Edge edge = new Edge(this, node);
+      outEdges.add(edge);
+      node.inEdges.add(edge);
+      return this;
+    }
+
+    @Override
+    public String toString() {
+      return model.getModelInvariantId();
+    }
+
+    @Override
+    public boolean equals(Object other) {
+      ModelArtifact otherModel = ((Node) other).model;
+      return this.model.getModelInvariantId().equals(otherModel.getModelInvariantId());
+    }
+
+    @Override
+    public int hashCode() {
+      return this.model.getModelInvariantId().hashCode();
+
+    }
+  }
+
+  /**
+   * Represents a dependency between two Nodes.
+   */
+  static class Edge {
+    public final Node from;
+    public final Node to;
+
+    public Edge(Node from, Node to) {
+      this.from = from;
+      this.to = to;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+      Edge edge = (Edge) obj;
+      return edge.from == from && edge.to == to;
+    }
+  }
+
+  /**
+   * Returns the list of models sorted by order of dependency.
+   * 
+   * @param originalList
+   *          the list that needs to be sorted
+   * @return a list of sorted models
+   */
+  public List<Artifact> sort(List<Artifact> originalList) {
+
+    if (originalList.size() <= 1) {
+      return originalList;
+    }
+
+    Collection<Node> nodes = createNodes(originalList);
+    Collection<Node> sortedNodes = sortNodes(nodes);
+
+    List<Artifact> sortedModelsList = new ArrayList<Artifact>(sortedNodes.size());
+    for (Node node : sortedNodes) {
+      sortedModelsList.add(node.model);
+    }
+
+    return sortedModelsList;
+  }
+
+  /**
+   * Create nodes from the list of models and their dependencies.
+   * 
+   * @param models
+   *          what the nodes creation is based upon
+   * @return Collection of Node objects
+   */
+  private Collection<Node> createNodes(Collection<Artifact> models) {
+
+    // load list of models into a map, so we can later replace referenceIds with
+    // real Models
+    HashMap<String, ModelArtifact> versionIdToModelMap = new HashMap<String, ModelArtifact>();
+    for (Artifact art : models) {
+      ModelArtifact ma = (ModelArtifact) art;
+      versionIdToModelMap.put(ma.getModelModelVerCombinedKey(), ma);
+    }
+
+    HashMap<String, Node> nodes = new HashMap<String, Node>();
+    // create a node for each model and its referenced models
+    for (Artifact art : models) {
+      ModelArtifact model = (ModelArtifact) art;
+
+      // node might have been created by another model referencing it
+      Node node = nodes.get(model.getModelModelVerCombinedKey());
+
+      if (null == node) {
+        node = new Node(model);
+        nodes.put(model.getModelModelVerCombinedKey(), node);
+      }
+
+      for (String referencedModelId : model.getDependentModelIds()) {
+        // node might have been created by another model referencing it
+        Node referencedNode = nodes.get(referencedModelId);
+
+        if (null == referencedNode) {
+          // create node
+          ModelArtifact referencedModel = versionIdToModelMap.get(referencedModelId);
+          if (referencedModel == null) {
+            Log.debug("ignoring " + referencedModelId);
+            continue; // referenced model not supplied, no need to sort it
+          }
+          referencedNode = new Node(referencedModel);
+          nodes.put(referencedModelId, referencedNode);
+        }
+        referencedNode.addEdge(node);
+      }
+    }
+
+    return nodes.values();
+  }
+
+  /**
+   * Sorts the given Nodes by order of dependency.
+   * 
+   * @param originalList
+   *          the collection of nodes to be sorted
+   * @return a sorted collection of the given nodes
+   */
+  private Collection<Node> sortNodes(Collection<Node> unsortedNodes) {
+
+    // L <- Empty list that will contain the sorted elements
+    ArrayList<Node> nodeList = new ArrayList<Node>();
+
+    // S <- Set of all nodes with no incoming edges
+    HashSet<Node> nodeSet = new HashSet<Node>();
+    for (Node unsortedNode : unsortedNodes) {
+      if (unsortedNode.inEdges.size() == 0) {
+        nodeSet.add(unsortedNode);
+      }
+    }
+
+    // while S is non-empty do
+    while (!nodeSet.isEmpty()) {
+      // remove a node n from S
+      Node node = nodeSet.iterator().next();
+      nodeSet.remove(node);
+
+      // insert n into L
+      nodeList.add(node);
+
+      // for each node m with an edge e from n to m do
+      for (Iterator<Edge> it = node.outEdges.iterator(); it.hasNext();) {
+        // remove edge e from the graph
+        Edge edge = it.next();
+        Node to = edge.to;
+        it.remove();// Remove edge from n
+        to.inEdges.remove(edge);// Remove edge from m
+
+        // if m has no other incoming edges then insert m into S
+        if (to.inEdges.isEmpty()) {
+          nodeSet.add(to);
+        }
+      }
+    }
+    // Check to see if all edges are removed
+    boolean cycle = false;
+    for (Node node : unsortedNodes) {
+      if (!node.inEdges.isEmpty()) {
+        cycle = true;
+        break;
+      }
+    }
+    if (cycle) {
+      throw new RuntimeException(
+          "Circular dependency present between models, topological sort not possible");
+    }
+
+    return nodeList;
+  }
+
+}
diff --git a/src/main/java/org/openecomp/modelloader/notification/DistributionStatusMsg.java b/src/main/java/org/openecomp/modelloader/notification/DistributionStatusMsg.java
index 6079d5d..0ef2a42 100644
--- a/src/main/java/org/openecomp/modelloader/notification/DistributionStatusMsg.java
+++ b/src/main/java/org/openecomp/modelloader/notification/DistributionStatusMsg.java
@@ -1,75 +1,77 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 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.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.notification;
-
-import org.openecomp.sdc.api.consumer.IDistributionStatusMessage;
-import org.openecomp.sdc.utils.DistributionStatusEnum;
-
-public class DistributionStatusMsg implements IDistributionStatusMessage {
-  private DistributionStatusEnum status;
-  private String distributionId;
-  private String consumerId;
-  private String artifactUrl;
-
-  /**
-   * Creates a new DistributionStatusMsg instance.
-   * 
-   * @param status         - The distribution status to be reported.
-   * @param distributionId - The identifier of the distribution who's status is being rported on.
-   * @param consumerId     - Identifier of the consumer associated with the distribution.
-   * @param artifactUrl    - Resource identifier for the artifact.
-   */
-  public DistributionStatusMsg(DistributionStatusEnum status, 
-                               String distributionId,
-                               String consumerId, 
-                               String artifactUrl) {
-    this.status = status;
-    this.distributionId = distributionId;
-    this.consumerId = consumerId;
-    this.artifactUrl = artifactUrl;
-  }
-
-  @Override
-  public long getTimestamp() {
-    long currentTimeMillis = System.currentTimeMillis();
-    return currentTimeMillis;
-  }
-
-  @Override
-  public DistributionStatusEnum getStatus() {
-    return status;
-  }
-
-  @Override
-  public String getDistributionID() {
-    return distributionId;
-  }
-
-  @Override
-  public String getConsumerID() {
-    return consumerId;
-  }
-  
-  @Override
-  public String getArtifactURL() {
-    return artifactUrl;
-  }
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.notification;
+
+import org.openecomp.sdc.api.consumer.IDistributionStatusMessage;
+import org.openecomp.sdc.utils.DistributionStatusEnum;
+
+public class DistributionStatusMsg implements IDistributionStatusMessage {
+  private DistributionStatusEnum status;
+  private String distributionId;
+  private String consumerId;
+  private String artifactUrl;
+
+  /**
+   * Creates a new DistributionStatusMsg instance.
+   * 
+   * @param status         - The distribution status to be reported.
+   * @param distributionId - The identifier of the distribution who's status is being rported on.
+   * @param consumerId     - Identifier of the consumer associated with the distribution.
+   * @param artifactUrl    - Resource identifier for the artifact.
+   */
+  public DistributionStatusMsg(DistributionStatusEnum status, 
+                               String distributionId,
+                               String consumerId, 
+                               String artifactUrl) {
+    this.status = status;
+    this.distributionId = distributionId;
+    this.consumerId = consumerId;
+    this.artifactUrl = artifactUrl;
+  }
+
+  @Override
+  public long getTimestamp() {
+    long currentTimeMillis = System.currentTimeMillis();
+    return currentTimeMillis;
+  }
+
+  @Override
+  public DistributionStatusEnum getStatus() {
+    return status;
+  }
+
+  @Override
+  public String getDistributionID() {
+    return distributionId;
+  }
+
+  @Override
+  public String getConsumerID() {
+    return consumerId;
+  }
+  
+  @Override
+  public String getArtifactURL() {
+    return artifactUrl;
+  }
+}
diff --git a/src/main/java/org/openecomp/modelloader/notification/EventCallback.java b/src/main/java/org/openecomp/modelloader/notification/EventCallback.java
index 3b32315..8634741 100644
--- a/src/main/java/org/openecomp/modelloader/notification/EventCallback.java
+++ b/src/main/java/org/openecomp/modelloader/notification/EventCallback.java
@@ -1,286 +1,294 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 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.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.notification;
-
-import org.openecomp.sdc.api.IDistributionClient;
-import org.openecomp.sdc.api.consumer.IDistributionStatusMessage;
-import org.openecomp.sdc.api.consumer.INotificationCallback;
-import org.openecomp.sdc.api.notification.IArtifactInfo;
-import org.openecomp.sdc.api.notification.INotificationData;
-import org.openecomp.sdc.api.notification.IResourceInstance;
-import org.openecomp.sdc.api.results.IDistributionClientDownloadResult;
-import org.openecomp.sdc.api.results.IDistributionClientResult;
-import org.openecomp.sdc.utils.ArtifactTypeEnum;
-import org.openecomp.sdc.utils.DistributionActionResultEnum;
-import org.openecomp.sdc.utils.DistributionStatusEnum;
-
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.cl.mdc.MdcContext;
-import org.openecomp.cl.mdc.MdcOverride;
-import org.openecomp.modelloader.config.ModelLoaderConfig;
-import org.openecomp.modelloader.entity.Artifact;
-import org.openecomp.modelloader.entity.catalog.VnfCatalogArtifact;
-import org.openecomp.modelloader.entity.catalog.VnfCatalogArtifactHandler;
-import org.openecomp.modelloader.entity.model.ModelArtifactHandler;
-import org.openecomp.modelloader.entity.model.ModelArtifactParser;
-import org.openecomp.modelloader.service.ModelLoaderMsgs;
-import org.slf4j.MDC;
-
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.List;
-
-public class EventCallback implements INotificationCallback {
-
-  private IDistributionClient client;
-  private ModelLoaderConfig config;
-  private static Logger logger = LoggerFactory.getInstance()
-      .getLogger(EventCallback.class.getName());
-  private static Logger auditLogger = LoggerFactory.getInstance()
-      .getAuditLogger(EventCallback.class.getName());
-  private static Logger metricsLogger = LoggerFactory.getInstance()
-      .getMetricsLogger(EventCallback.class.getName());
-
-  private static SimpleDateFormat dateFormatter = new SimpleDateFormat(
-      "yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
-
-  public EventCallback(IDistributionClient client, ModelLoaderConfig config) {
-    this.client = client;
-    this.config = config;
-  }
-
-  @Override
-  public void activateCallback(INotificationData data) {
-    // Init MDC
-    MdcContext.initialize(data.getDistributionID(), "ModelLoader", "", "Event-Bus", "");
-
-    logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
-        "Received distribution " + data.getDistributionID());
-
-    boolean success = true;
-    List<IArtifactInfo> artifacts = getArtifacts(data);
-    List<Artifact> modelArtifacts = new ArrayList<Artifact>();
-    List<Artifact> catalogArtifacts = new ArrayList<Artifact>();
-    ModelArtifactParser modelArtParser = new ModelArtifactParser();
-
-    for (IArtifactInfo artifact : artifacts) {
-      // Grab the current time so we can measure the download time for the
-      // metrics log
-      long startTimeInMs = System.currentTimeMillis();
-      MdcOverride override = new MdcOverride();
-      override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
-
-      // Download Artifact
-      IDistributionClientDownloadResult downloadResult = client.download(artifact);
-
-      // Generate metrics log
-      metricsLogger.info(ModelLoaderMsgs.DOWNLOAD_COMPLETE, null, override,
-          artifact.getArtifactName(), downloadResult.getDistributionActionResult().toString());
-
-      if (downloadResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-        publishDownloadFailure(data, artifact, downloadResult.getDistributionMessageResult());
-        success = false;
-        break;
-      }
-
-      logger.debug("Artifact: " + artifact.getArtifactName() + "  Payload:\n" + new String(downloadResult.getArtifactPayload()));
-      
-      publishDownloadSuccess(data, artifact, downloadResult);
-
-      if ((artifact.getArtifactType()
-          .compareToIgnoreCase(ArtifactTypeEnum.MODEL_INVENTORY_PROFILE.toString()) == 0)
-          || (artifact.getArtifactType()
-              .compareToIgnoreCase(ArtifactTypeEnum.MODEL_QUERY_SPEC.toString()) == 0)) {
-        modelArtifacts.addAll(modelArtParser.parse(downloadResult.getArtifactPayload(),
-            downloadResult.getArtifactName()));
-      } else if (artifact.getArtifactType()
-          .compareToIgnoreCase(ArtifactTypeEnum.VNF_CATALOG.toString()) == 0) {
-        catalogArtifacts
-            .add(new VnfCatalogArtifact(new String(downloadResult.getArtifactPayload())));
-      }
-    }
-
-    String statusString = "SUCCESS";
-    if (success) {
-      ModelArtifactHandler modelHandler = new ModelArtifactHandler(config);
-      boolean modelDeploySuccess = modelHandler.pushArtifacts(modelArtifacts,
-          data.getDistributionID());
-
-      VnfCatalogArtifactHandler catalogHandler = new VnfCatalogArtifactHandler(config);
-      boolean catalogDeploySuccess = catalogHandler.pushArtifacts(catalogArtifacts,
-          data.getDistributionID());
-
-      for (IArtifactInfo artifact : artifacts) {
-        if ((artifact.getArtifactType()
-            .compareToIgnoreCase(ArtifactTypeEnum.MODEL_INVENTORY_PROFILE.toString()) == 0)
-            || (artifact.getArtifactType()
-                .compareToIgnoreCase(ArtifactTypeEnum.MODEL_QUERY_SPEC.toString()) == 0)) {
-          if (modelDeploySuccess) {
-            publishDeploySuccess(data, artifact);
-          } else {
-            publishDeployFailure(data, artifact);
-            statusString = "FAILURE";
-          }
-        } else if (artifact.getArtifactType()
-            .compareToIgnoreCase(ArtifactTypeEnum.VNF_CATALOG.toString()) == 0) {
-          if (catalogDeploySuccess) {
-            publishDeploySuccess(data, artifact);
-          } else {
-            publishDeployFailure(data, artifact);
-            statusString = "FAILURE";
-          }
-        }
-      }
-    }
-
-    auditLogger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
-        "Processed distribution " + data.getDistributionID() + "  (" + statusString + ")");
-    MDC.clear();
-  }
-
-  private List<IArtifactInfo> getArtifacts(INotificationData data) {
-    List<IArtifactInfo> artifacts = new ArrayList<IArtifactInfo>();
-    List<IResourceInstance> resources = data.getResources();
-
-    if (data.getServiceArtifacts() != null) {
-      artifacts.addAll(data.getServiceArtifacts());
-    }
-
-    if (resources != null) {
-      for (IResourceInstance resource : resources) {
-        if (resource.getArtifacts() != null) {
-          artifacts.addAll(resource.getArtifacts());
-        }
-      }
-    }
-
-    return artifacts;
-  }
-
-  private void publishDownloadFailure(INotificationData data, IArtifactInfo artifact,
-      String errorMessage) {
-    // Grab the current time so we can measure the download time for the metrics
-    // log
-    long startTimeInMs = System.currentTimeMillis();
-    MdcOverride override = new MdcOverride();
-    override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
-
-    IDistributionClientResult sendDownloadStatus = client.sendDownloadStatus(
-        buildStatusMessage(client, data, artifact, DistributionStatusEnum.DOWNLOAD_ERROR));
-    metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "download failure",
-        artifact.getArtifactName(), sendDownloadStatus.getDistributionActionResult().toString());
-
-    if (sendDownloadStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-          "Failed to publish download failure status: "
-              + sendDownloadStatus.getDistributionMessageResult());
-    }
-
-    logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-        "Failed to download artifact " + artifact.getArtifactName() + ": " + errorMessage);
-  }
-
-  private void publishDownloadSuccess(INotificationData data, IArtifactInfo artifact,
-      IDistributionClientDownloadResult downloadResult) {
-    // Grab the current time so we can measure the download time for the metrics
-    // log
-    long startTimeInMs = System.currentTimeMillis();
-    MdcOverride override = new MdcOverride();
-    override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
-
-    IDistributionClientResult sendDownloadStatus = client.sendDownloadStatus(
-        buildStatusMessage(client, data, artifact, DistributionStatusEnum.DOWNLOAD_OK));
-    metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "download success",
-        artifact.getArtifactName(), sendDownloadStatus.getDistributionActionResult().toString());
-
-    logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
-        "Downloaded artifact: " + artifact.getArtifactName());
-
-    if (sendDownloadStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-          "Failed to publish download success status: "
-              + sendDownloadStatus.getDistributionMessageResult());
-    }
-
-    if (logger.isDebugEnabled()) {
-      StringBuilder sb = new StringBuilder();
-      sb.append("Downloaded artifact:\n");
-      sb.append("ArtInfo_Art_Name: " + artifact.getArtifactName());
-      sb.append("\nArtInfo_Art_description: " + artifact.getArtifactDescription());
-      sb.append("\nArtInfo_Art_CheckSum: " + artifact.getArtifactChecksum());
-      sb.append("\nArtInfo_Art_Url: " + artifact.getArtifactURL());
-      sb.append("\nArtInfo_Art_Type: " + artifact.getArtifactType());
-      sb.append("\nArtInfo_Serv_description: " + data.getServiceDescription());
-      sb.append("\nArtInfo_Serv_Name: " + data.getServiceName());
-      sb.append("\nGet_serviceVersion: " + data.getServiceVersion());
-      sb.append("\nGet_Service_UUID: " + data.getServiceUUID());
-      sb.append("\nArtInfo_DistributionId: " + data.getDistributionID());
-      logger.debug(sb.toString());
-    }
-  }
-
-  private void publishDeployFailure(INotificationData data, IArtifactInfo artifact) {
-    // Grab the current time so we can measure the download time for the metrics
-    // log
-    long startTimeInMs = System.currentTimeMillis();
-    MdcOverride override = new MdcOverride();
-    override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
-
-    IDistributionClientResult sendStatus = client.sendDeploymentStatus(
-        buildStatusMessage(client, data, artifact, DistributionStatusEnum.DEPLOY_ERROR));
-    metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "deploy failure",
-        artifact.getArtifactName(), sendStatus.getDistributionActionResult().toString());
-
-    if (sendStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-          "Failed to publish deploy failure status: " + sendStatus.getDistributionMessageResult());
-    }
-  }
-
-  private void publishDeploySuccess(INotificationData data, IArtifactInfo artifact) {
-    // Grab the current time so we can measure the download time for the metrics
-    // log
-    long startTimeInMs = System.currentTimeMillis();
-    MdcOverride override = new MdcOverride();
-    override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
-
-    IDistributionClientResult sendStatus = client.sendDownloadStatus(
-        buildStatusMessage(client, data, artifact, DistributionStatusEnum.DEPLOY_OK));
-    metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "deploy success",
-        artifact.getArtifactName(), sendStatus.getDistributionActionResult().toString());
-
-    if (sendStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-          "Failed to publish deploy success status: " + sendStatus.getDistributionMessageResult());
-    }
-  }
-
-  private IDistributionStatusMessage buildStatusMessage(IDistributionClient client,
-      INotificationData data, IArtifactInfo artifact, DistributionStatusEnum status) {
-    IDistributionStatusMessage statusMessage = new DistributionStatusMsg(status,
-        data.getDistributionID(), client.getConfiguration().getConsumerID(),
-        artifact.getArtifactURL());
-
-    return statusMessage;
-  }
-
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.notification;
+
+import org.openecomp.sdc.api.IDistributionClient;
+import org.openecomp.sdc.api.consumer.IDistributionStatusMessage;
+import org.openecomp.sdc.api.consumer.INotificationCallback;
+import org.openecomp.sdc.api.notification.IArtifactInfo;
+import org.openecomp.sdc.api.notification.INotificationData;
+import org.openecomp.sdc.api.notification.IResourceInstance;
+import org.openecomp.sdc.api.results.IDistributionClientDownloadResult;
+import org.openecomp.sdc.api.results.IDistributionClientResult;
+import org.openecomp.sdc.utils.ArtifactTypeEnum;
+import org.openecomp.sdc.utils.DistributionActionResultEnum;
+import org.openecomp.sdc.utils.DistributionStatusEnum;
+
+import org.openecomp.cl.api.Logger;
+import org.openecomp.cl.eelf.LoggerFactory;
+import org.openecomp.cl.mdc.MdcContext;
+import org.openecomp.cl.mdc.MdcOverride;
+import org.openecomp.modelloader.config.ModelLoaderConfig;
+import org.openecomp.modelloader.entity.Artifact;
+import org.openecomp.modelloader.entity.catalog.VnfCatalogArtifact;
+import org.openecomp.modelloader.entity.catalog.VnfCatalogArtifactHandler;
+import org.openecomp.modelloader.entity.model.ModelArtifactHandler;
+import org.openecomp.modelloader.entity.model.ModelArtifactParser;
+import org.openecomp.modelloader.service.ModelLoaderMsgs;
+import org.slf4j.MDC;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+public class EventCallback implements INotificationCallback {
+
+  private IDistributionClient client;
+  private ModelLoaderConfig config;
+  private static Logger logger = LoggerFactory.getInstance()
+      .getLogger(EventCallback.class.getName());
+  private static Logger auditLogger = LoggerFactory.getInstance()
+      .getAuditLogger(EventCallback.class.getName());
+  private static Logger metricsLogger = LoggerFactory.getInstance()
+      .getMetricsLogger(EventCallback.class.getName());
+
+  private static SimpleDateFormat dateFormatter = new SimpleDateFormat(
+      "yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
+
+  public EventCallback(IDistributionClient client, ModelLoaderConfig config) {
+    this.client = client;
+    this.config = config;
+  }
+
+  @Override
+  public void activateCallback(INotificationData data) {
+    // Init MDC
+    MdcContext.initialize(data.getDistributionID(), "ModelLoader", "", "Event-Bus", "");
+
+    logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
+        "Received distribution " + data.getDistributionID());
+
+    boolean success = true;
+    List<IArtifactInfo> artifacts = getArtifacts(data);
+    List<Artifact> modelArtifacts = new ArrayList<Artifact>();
+    List<Artifact> catalogArtifacts = new ArrayList<Artifact>();
+    ModelArtifactParser modelArtParser = new ModelArtifactParser();
+
+    for (IArtifactInfo artifact : artifacts) {
+      // Grab the current time so we can measure the download time for the
+      // metrics log
+      long startTimeInMs = System.currentTimeMillis();
+      MdcOverride override = new MdcOverride();
+      override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
+
+      // Download Artifact
+      IDistributionClientDownloadResult downloadResult = client.download(artifact);
+
+      // Generate metrics log
+      metricsLogger.info(ModelLoaderMsgs.DOWNLOAD_COMPLETE, null, override,
+          artifact.getArtifactName(), downloadResult.getDistributionActionResult().toString());
+
+      if (downloadResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
+        publishDownloadFailure(data, artifact, downloadResult.getDistributionMessageResult());
+        success = false;
+        break;
+      }
+
+      logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
+    	        "Downloaded artifact: " + artifact.getArtifactName() + "  Payload:\n" + new String(downloadResult.getArtifactPayload()));
+      
+      publishDownloadSuccess(data, artifact, downloadResult);
+
+      if ((artifact.getArtifactType()
+          .compareToIgnoreCase(ArtifactTypeEnum.MODEL_INVENTORY_PROFILE.toString()) == 0)
+          || (artifact.getArtifactType()
+              .compareToIgnoreCase(ArtifactTypeEnum.MODEL_QUERY_SPEC.toString()) == 0)) {
+        List<Artifact> parsedArtifacts = modelArtParser.parse(downloadResult.getArtifactPayload(), downloadResult.getArtifactName());
+        if (parsedArtifacts != null && !parsedArtifacts.isEmpty()) {
+          modelArtifacts.addAll(parsedArtifacts);
+        } else {
+          success = false;
+          publishDeployFailure(data, artifact);
+          break;
+        }
+      } else if (artifact.getArtifactType()
+          .compareToIgnoreCase(ArtifactTypeEnum.VNF_CATALOG.toString()) == 0) {
+        catalogArtifacts
+            .add(new VnfCatalogArtifact(new String(downloadResult.getArtifactPayload())));
+      }
+    }
+
+    String statusString = "SUCCESS";
+    if (success) {
+      ModelArtifactHandler modelHandler = new ModelArtifactHandler(config);
+      boolean modelDeploySuccess = modelHandler.pushArtifacts(modelArtifacts,
+          data.getDistributionID());
+
+      VnfCatalogArtifactHandler catalogHandler = new VnfCatalogArtifactHandler(config);
+      boolean catalogDeploySuccess = catalogHandler.pushArtifacts(catalogArtifacts,
+          data.getDistributionID());
+
+      for (IArtifactInfo artifact : artifacts) {
+        if ((artifact.getArtifactType()
+            .compareToIgnoreCase(ArtifactTypeEnum.MODEL_INVENTORY_PROFILE.toString()) == 0)
+            || (artifact.getArtifactType()
+                .compareToIgnoreCase(ArtifactTypeEnum.MODEL_QUERY_SPEC.toString()) == 0)) {
+          if (modelDeploySuccess) {
+            publishDeploySuccess(data, artifact);
+          } else {
+            publishDeployFailure(data, artifact);
+            statusString = "FAILURE";
+          }
+        } else if (artifact.getArtifactType()
+            .compareToIgnoreCase(ArtifactTypeEnum.VNF_CATALOG.toString()) == 0) {
+          if (catalogDeploySuccess) {
+            publishDeploySuccess(data, artifact);
+          } else {
+            publishDeployFailure(data, artifact);
+            statusString = "FAILURE";
+          }
+        }
+      }
+    } else {
+      statusString = "FAILURE";
+    }
+
+    auditLogger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
+        "Processed distribution " + data.getDistributionID() + "  (" + statusString + ")");
+    MDC.clear();
+  }
+
+  private List<IArtifactInfo> getArtifacts(INotificationData data) {
+    List<IArtifactInfo> artifacts = new ArrayList<IArtifactInfo>();
+    List<IResourceInstance> resources = data.getResources();
+
+    if (data.getServiceArtifacts() != null) {
+      artifacts.addAll(data.getServiceArtifacts());
+    }
+
+    if (resources != null) {
+      for (IResourceInstance resource : resources) {
+        if (resource.getArtifacts() != null) {
+          artifacts.addAll(resource.getArtifacts());
+        }
+      }
+    }
+
+    return artifacts;
+  }
+
+  private void publishDownloadFailure(INotificationData data, IArtifactInfo artifact,
+      String errorMessage) {
+    // Grab the current time so we can measure the download time for the metrics
+    // log
+    long startTimeInMs = System.currentTimeMillis();
+    MdcOverride override = new MdcOverride();
+    override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
+
+    IDistributionClientResult sendDownloadStatus = client.sendDownloadStatus(
+        buildStatusMessage(client, data, artifact, DistributionStatusEnum.DOWNLOAD_ERROR));
+    metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "download failure",
+        artifact.getArtifactName(), sendDownloadStatus.getDistributionActionResult().toString());
+
+    if (sendDownloadStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
+      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
+          "Failed to publish download failure status: "
+              + sendDownloadStatus.getDistributionMessageResult());
+    }
+
+    logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
+        "Failed to download artifact " + artifact.getArtifactName() + ": " + errorMessage);
+  }
+
+  private void publishDownloadSuccess(INotificationData data, IArtifactInfo artifact,
+      IDistributionClientDownloadResult downloadResult) {
+    // Grab the current time so we can measure the download time for the metrics
+    // log
+    long startTimeInMs = System.currentTimeMillis();
+    MdcOverride override = new MdcOverride();
+    override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
+
+    IDistributionClientResult sendDownloadStatus = client.sendDownloadStatus(
+        buildStatusMessage(client, data, artifact, DistributionStatusEnum.DOWNLOAD_OK));
+    metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "download success",
+        artifact.getArtifactName(), sendDownloadStatus.getDistributionActionResult().toString());
+
+    if (sendDownloadStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
+      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
+          "Failed to publish download success status: "
+              + sendDownloadStatus.getDistributionMessageResult());
+    }
+
+    if (logger.isDebugEnabled()) {
+      StringBuilder sb = new StringBuilder();
+      sb.append("Downloaded artifact:\n");
+      sb.append("ArtInfo_Art_Name: " + artifact.getArtifactName());
+      sb.append("\nArtInfo_Art_description: " + artifact.getArtifactDescription());
+      sb.append("\nArtInfo_Art_CheckSum: " + artifact.getArtifactChecksum());
+      sb.append("\nArtInfo_Art_Url: " + artifact.getArtifactURL());
+      sb.append("\nArtInfo_Art_Type: " + artifact.getArtifactType());
+      sb.append("\nArtInfo_Serv_description: " + data.getServiceDescription());
+      sb.append("\nArtInfo_Serv_Name: " + data.getServiceName());
+      sb.append("\nGet_serviceVersion: " + data.getServiceVersion());
+      sb.append("\nGet_Service_UUID: " + data.getServiceUUID());
+      sb.append("\nArtInfo_DistributionId: " + data.getDistributionID());
+      logger.debug(sb.toString());
+    }
+  }
+
+  private void publishDeployFailure(INotificationData data, IArtifactInfo artifact) {
+    // Grab the current time so we can measure the download time for the metrics
+    // log
+    long startTimeInMs = System.currentTimeMillis();
+    MdcOverride override = new MdcOverride();
+    override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
+
+    IDistributionClientResult sendStatus = client.sendDeploymentStatus(
+        buildStatusMessage(client, data, artifact, DistributionStatusEnum.DEPLOY_ERROR));
+    metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "deploy failure",
+        artifact.getArtifactName(), sendStatus.getDistributionActionResult().toString());
+
+    if (sendStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
+      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
+          "Failed to publish deploy failure status: " + sendStatus.getDistributionMessageResult());
+    }
+  }
+
+  private void publishDeploySuccess(INotificationData data, IArtifactInfo artifact) {
+    // Grab the current time so we can measure the download time for the metrics
+    // log
+    long startTimeInMs = System.currentTimeMillis();
+    MdcOverride override = new MdcOverride();
+    override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
+
+    IDistributionClientResult sendStatus = client.sendDownloadStatus(
+        buildStatusMessage(client, data, artifact, DistributionStatusEnum.DEPLOY_OK));
+    metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "deploy success",
+        artifact.getArtifactName(), sendStatus.getDistributionActionResult().toString());
+
+    if (sendStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
+      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
+          "Failed to publish deploy success status: " + sendStatus.getDistributionMessageResult());
+    }
+  }
+
+  private IDistributionStatusMessage buildStatusMessage(IDistributionClient client,
+      INotificationData data, IArtifactInfo artifact, DistributionStatusEnum status) {
+    IDistributionStatusMessage statusMessage = new DistributionStatusMsg(status,
+        data.getDistributionID(), client.getConfiguration().getConsumerID(),
+        artifact.getArtifactURL());
+
+    return statusMessage;
+  }
+
+}
diff --git a/src/main/java/org/openecomp/modelloader/restclient/AaiRestClient.java b/src/main/java/org/openecomp/modelloader/restclient/AaiRestClient.java
index e13bdbd..d4ee738 100644
--- a/src/main/java/org/openecomp/modelloader/restclient/AaiRestClient.java
+++ b/src/main/java/org/openecomp/modelloader/restclient/AaiRestClient.java
@@ -1,400 +1,402 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 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.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.restclient;
-
-import com.sun.jersey.api.client.Client;
-import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.client.config.ClientConfig;
-import com.sun.jersey.api.client.config.DefaultClientConfig;
-import com.sun.jersey.api.client.filter.LoggingFilter;
-import com.sun.jersey.client.urlconnection.HTTPSProperties;
-import org.openecomp.cl.api.LogFields;
-import org.openecomp.cl.api.LogLine;
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.cl.mdc.MdcContext;
-import org.openecomp.cl.mdc.MdcOverride;
-import org.openecomp.modelloader.config.ModelLoaderConfig;
-import org.openecomp.modelloader.service.ModelLoaderMsgs;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-import java.io.ByteArrayOutputStream;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.io.StringReader;
-import java.security.GeneralSecurityException;
-import java.security.KeyStore;
-import java.security.cert.X509Certificate;
-import java.text.SimpleDateFormat;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.KeyManagerFactory;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSession;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
-import javax.ws.rs.core.Response;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
-public class AaiRestClient {
-  public enum MimeType {
-    XML("application/xml"), JSON("application/json");
-
-    private String httpType;
-
-    MimeType(String httpType) {
-      this.httpType = httpType;
-    }
-
-    String getHttpHeaderType() {
-      return httpType;
-    }
-  }
-
-  private static String HEADER_TRANS_ID = "X-TransactionId";
-  private static String HEADER_FROM_APP_ID = "X-FromAppId";
-  private static String HEADER_AUTHORIZATION = "Authorization";
-  private static String ML_APP_NAME = "ModelLoader";
-  private static String RESOURCE_VERSION_PARAM = "resource-version";
-
-  private static SimpleDateFormat dateFormatter = new SimpleDateFormat(
-      "yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
-
-  private static Logger logger = LoggerFactory.getInstance()
-      .getLogger(AaiRestClient.class.getName());
-  private static Logger metricsLogger = LoggerFactory.getInstance()
-      .getMetricsLogger(AaiRestClient.class.getName());
-
-  private ModelLoaderConfig config = null;
-
-  public AaiRestClient(ModelLoaderConfig config) {
-    this.config = config;
-  }
-
-  /**
-   * Send a PUT request to the A&AI.
-   *
-   * @param url
-   *          - the url
-   * @param transId
-   *          - transaction ID
-   * @param payload
-   *          - the XML or JSON payload for the request
-   * @param mimeType
-   *          - the content type (XML or JSON)
-   * @return ClientResponse
-   */
-  public ClientResponse putResource(String url, String payload, String transId, MimeType mimeType) {
-    ClientResponse result = null;
-    ByteArrayOutputStream baos = new ByteArrayOutputStream();
-    long startTimeInMs = 0;
-    MdcOverride override = new MdcOverride();
-
-    try {
-      Client client = setupClient();
-
-      baos = new ByteArrayOutputStream();
-      PrintStream ps = new PrintStream(baos);
-      if (logger.isDebugEnabled()) {
-        client.addFilter(new LoggingFilter(ps));
-      }
-
-      // Grab the current time so that we can use it for metrics purposes later.
-      startTimeInMs = System.currentTimeMillis();
-      override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
-
-      if (useBasicAuth()) {
-        result = client.resource(url).header(HEADER_TRANS_ID, transId)
-            .header(HEADER_FROM_APP_ID, ML_APP_NAME)
-            .header(HEADER_AUTHORIZATION, getAuthenticationCredentials())
-            .type(mimeType.getHttpHeaderType()).put(ClientResponse.class, payload);
-      } else {
-        result = client.resource(url).header(HEADER_TRANS_ID, transId)
-            .header(HEADER_FROM_APP_ID, ML_APP_NAME).type(mimeType.getHttpHeaderType())
-            .put(ClientResponse.class, payload);
-      }
-    } catch (Exception ex) {
-      logger.error(ModelLoaderMsgs.AAI_REST_REQUEST_ERROR, "PUT", url, ex.getLocalizedMessage());
-      return null;
-    } finally {
-      if (logger.isDebugEnabled()) {
-        logger.debug(baos.toString());
-      }
-    }
-
-    if ((result != null) && ((result.getStatus() == Response.Status.CREATED.getStatusCode())
-        || (result.getStatus() == Response.Status.OK.getStatusCode()))) {
-      logger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS, "PUT", url,
-          Integer.toString(result.getStatus()));
-      metricsLogger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS,
-          new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, result.getStatus())
-              .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION,
-                  result.getResponseStatus().toString()),
-          override, "PUT", url, Integer.toString(result.getStatus()));
-    } else {
-      // If response is not 200 OK, then additionally log the reason
-      String respMsg = result.getEntity(String.class);
-      if (respMsg == null) {
-        respMsg = result.getStatusInfo().getReasonPhrase();
-      }
-      logger.info(ModelLoaderMsgs.AAI_REST_REQUEST_UNSUCCESSFUL, "PUT", url,
-          Integer.toString(result.getStatus()), respMsg);
-      metricsLogger.info(ModelLoaderMsgs.AAI_REST_REQUEST_UNSUCCESSFUL,
-          new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, result.getStatus())
-              .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION,
-                  result.getResponseStatus().toString()),
-          override, "PUT", url, Integer.toString(result.getStatus()), respMsg);
-    }
-
-    return result;
-  }
-
-  /**
-   * Send a DELETE request to the A&AI.
-   *
-   * @param url
-   *          - the url
-   * @param resourceVersion
-   *          - the resource-version of the model to delete
-   * @param transId
-   *          - transaction ID
-   * @return ClientResponse
-   */
-  public ClientResponse deleteResource(String url, String resourceVersion, String transId) {
-    ClientResponse result = null;
-    ByteArrayOutputStream baos = new ByteArrayOutputStream();
-    long startTimeInMs = 0;
-    MdcOverride override = new MdcOverride();
-
-    try {
-      Client client = setupClient();
-
-      baos = new ByteArrayOutputStream();
-      PrintStream ps = new PrintStream(baos);
-      if (logger.isDebugEnabled()) {
-        client.addFilter(new LoggingFilter(ps));
-      }
-
-      // Grab the current time so that we can use it for metrics purposes later.
-      startTimeInMs = System.currentTimeMillis();
-      override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
-
-      if (useBasicAuth()) {
-        result = client.resource(url).queryParam(RESOURCE_VERSION_PARAM, resourceVersion)
-            .header(HEADER_TRANS_ID, transId).header(HEADER_FROM_APP_ID, ML_APP_NAME)
-            .header(HEADER_AUTHORIZATION, getAuthenticationCredentials())
-            .delete(ClientResponse.class);
-      } else {
-        result = client.resource(url).queryParam(RESOURCE_VERSION_PARAM, resourceVersion)
-            .header(HEADER_TRANS_ID, transId).header(HEADER_FROM_APP_ID, ML_APP_NAME)
-            .delete(ClientResponse.class);
-      }
-    } catch (Exception ex) {
-      logger.error(ModelLoaderMsgs.AAI_REST_REQUEST_ERROR, "DELETE", url, ex.getLocalizedMessage());
-      return null;
-    } finally {
-      if (logger.isDebugEnabled()) {
-        logger.debug(baos.toString());
-      }
-    }
-
-    logger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS, "DELETE", url,
-        Integer.toString(result.getStatus()));
-    metricsLogger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS,
-        new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, result.getStatus()).setField(
-            LogLine.DefinedFields.RESPONSE_DESCRIPTION, result.getResponseStatus().toString()),
-        override, "DELETE", url, Integer.toString(result.getStatus()));
-
-    return result;
-  }
-
-  /**
-   * Send a GET request to the A&AI for a resource.
-   *
-   * @param url
-   *          - the url to use
-   * @param transId
-   *          - transaction ID
-   * @return ClientResponse
-   */
-  public ClientResponse getResource(String url, String transId, MimeType mimeType) {
-    ClientResponse result = null;
-    ByteArrayOutputStream baos = new ByteArrayOutputStream();
-    long startTimeInMs = 0;
-    MdcOverride override = new MdcOverride();
-
-    try {
-      Client client = setupClient();
-
-      baos = new ByteArrayOutputStream();
-      PrintStream ps = new PrintStream(baos);
-      if (logger.isDebugEnabled()) {
-        client.addFilter(new LoggingFilter(ps));
-      }
-
-      // Grab the current time so that we can use it for metrics purposes later.
-      startTimeInMs = System.currentTimeMillis();
-      override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
-
-      if (useBasicAuth()) {
-        result = client.resource(url).header(HEADER_TRANS_ID, transId)
-            .header(HEADER_FROM_APP_ID, ML_APP_NAME).accept(mimeType.getHttpHeaderType())
-            .header(HEADER_AUTHORIZATION, getAuthenticationCredentials()).get(ClientResponse.class);
-      } else {
-        result = client.resource(url).header(HEADER_TRANS_ID, transId)
-            .header(HEADER_FROM_APP_ID, ML_APP_NAME).accept(mimeType.getHttpHeaderType())
-            .get(ClientResponse.class);
-
-      }
-    } catch (Exception ex) {
-      logger.error(ModelLoaderMsgs.AAI_REST_REQUEST_ERROR, "GET", url, ex.getLocalizedMessage());
-      return null;
-    } finally {
-      if (logger.isDebugEnabled()) {
-        logger.debug(baos.toString());
-      }
-    }
-
-    logger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS, "GET", url,
-        Integer.toString(result.getStatus()));
-    metricsLogger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS,
-        new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, result.getStatus()).setField(
-            LogLine.DefinedFields.RESPONSE_DESCRIPTION, result.getResponseStatus().toString()),
-        override, "GET", url, Integer.toString(result.getStatus()));
-
-    return result;
-  }
-
-  /**
-   * Does a GET on a resource to retrieve the resource version, and then DELETE
-   * that version.
-   *
-   * @param url
-   *          - the url
-   * @param transId
-   *          - transaction ID
-   * @return ClientResponse
-   */
-  public ClientResponse getAndDeleteResource(String url, String transId) {
-    // First, GET the model
-    ClientResponse getResponse = getResource(url, transId, MimeType.XML);
-    if ((getResponse == null) || (getResponse.getStatus() != Response.Status.OK.getStatusCode())) {
-      return getResponse;
-    }
-
-    // Delete the model using the resource version in the response
-    String resVersion = null;
-    try {
-      resVersion = getResourceVersion(getResponse);
-    } catch (Exception e) {
-      logger.error(ModelLoaderMsgs.AAI_REST_REQUEST_ERROR, "GET", url, e.getLocalizedMessage());
-      return null;
-    }
-
-    return deleteResource(url, resVersion, transId);
-  }
-
-  private Client setupClient() throws IOException, GeneralSecurityException {
-    ClientConfig clientConfig = new DefaultClientConfig();
-
-    HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
-      @Override
-      public boolean verify(String string, SSLSession ssls) {
-        return true;
-      }
-    });
-
-    // Create a trust manager that does not validate certificate chains
-    TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
-      @Override
-      public X509Certificate[] getAcceptedIssuers() {
-        return null;
-      }
-
-      @Override
-      public void checkClientTrusted(X509Certificate[] certs, String authType) {}
-
-      @Override
-      public void checkServerTrusted(X509Certificate[] certs, String authType) {}
-    } };
-
-    SSLContext ctx = SSLContext.getInstance("TLS");
-    KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
-    FileInputStream fin = new FileInputStream(config.getAaiKeyStorePath());
-    KeyStore ks = KeyStore.getInstance("PKCS12");
-    char[] pwd = config.getAaiKeyStorePassword().toCharArray();
-    ks.load(fin, pwd);
-    kmf.init(ks, pwd);
-
-    ctx.init(kmf.getKeyManagers(), trustAllCerts, null);
-    clientConfig.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES,
-        new HTTPSProperties(new HostnameVerifier() {
-          @Override
-          public boolean verify(String theString, SSLSession sslSession) {
-            return true;
-          }
-        }, ctx));
-
-    Client client = Client.create(clientConfig);
-
-    return client;
-  }
-
-  private String getResourceVersion(ClientResponse response)
-      throws ParserConfigurationException, SAXException, IOException {
-    String respData = response.getEntity(String.class);
-
-    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-    DocumentBuilder builder = factory.newDocumentBuilder();
-    InputSource is = new InputSource(new StringReader(respData));
-    Document doc = builder.parse(is);
-
-    NodeList nodeList = doc.getDocumentElement().getChildNodes();
-    for (int i = 0; i < nodeList.getLength(); i++) {
-      Node currentNode = nodeList.item(i);
-      if (currentNode.getNodeName().equals(RESOURCE_VERSION_PARAM)) {
-        return currentNode.getTextContent();
-      }
-    }
-
-    return null;
-  }
-
-  private String getAuthenticationCredentials() {
-
-    String usernameAndPassword = config.getAaiAuthenticationUser() + ":"
-        + config.getAaiAuthenticationPassword();
-    return "Basic " + java.util.Base64.getEncoder().encodeToString(usernameAndPassword.getBytes());
-  }
-
-  public boolean useBasicAuth() {
-    return (config.getAaiAuthenticationUser() != null)
-        && (config.getAaiAuthenticationPassword() != null);
-  }
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.restclient;
+
+import com.sun.jersey.api.client.Client;
+import com.sun.jersey.api.client.ClientResponse;
+import com.sun.jersey.api.client.config.ClientConfig;
+import com.sun.jersey.api.client.config.DefaultClientConfig;
+import com.sun.jersey.api.client.filter.LoggingFilter;
+import com.sun.jersey.client.urlconnection.HTTPSProperties;
+import org.openecomp.cl.api.LogFields;
+import org.openecomp.cl.api.LogLine;
+import org.openecomp.cl.api.Logger;
+import org.openecomp.cl.eelf.LoggerFactory;
+import org.openecomp.cl.mdc.MdcContext;
+import org.openecomp.cl.mdc.MdcOverride;
+import org.openecomp.modelloader.config.ModelLoaderConfig;
+import org.openecomp.modelloader.service.ModelLoaderMsgs;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+import java.io.ByteArrayOutputStream;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.io.StringReader;
+import java.security.GeneralSecurityException;
+import java.security.KeyStore;
+import java.security.cert.X509Certificate;
+import java.text.SimpleDateFormat;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import javax.ws.rs.core.Response;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+public class AaiRestClient {
+  public enum MimeType {
+    XML("application/xml"), JSON("application/json");
+
+    private String httpType;
+
+    MimeType(String httpType) {
+      this.httpType = httpType;
+    }
+
+    String getHttpHeaderType() {
+      return httpType;
+    }
+  }
+
+  private static String HEADER_TRANS_ID = "X-TransactionId";
+  private static String HEADER_FROM_APP_ID = "X-FromAppId";
+  private static String HEADER_AUTHORIZATION = "Authorization";
+  private static String ML_APP_NAME = "ModelLoader";
+  private static String RESOURCE_VERSION_PARAM = "resource-version";
+
+  private static SimpleDateFormat dateFormatter = new SimpleDateFormat(
+      "yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
+
+  private static Logger logger = LoggerFactory.getInstance()
+      .getLogger(AaiRestClient.class.getName());
+  private static Logger metricsLogger = LoggerFactory.getInstance()
+      .getMetricsLogger(AaiRestClient.class.getName());
+
+  private ModelLoaderConfig config = null;
+
+  public AaiRestClient(ModelLoaderConfig config) {
+    this.config = config;
+  }
+
+  /**
+   * Send a PUT request to the A&AI.
+   *
+   * @param url
+   *          - the url
+   * @param transId
+   *          - transaction ID
+   * @param payload
+   *          - the XML or JSON payload for the request
+   * @param mimeType
+   *          - the content type (XML or JSON)
+   * @return ClientResponse
+   */
+  public ClientResponse putResource(String url, String payload, String transId, MimeType mimeType) {
+    ClientResponse result = null;
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    long startTimeInMs = 0;
+    MdcOverride override = new MdcOverride();
+
+    try {
+      Client client = setupClient();
+
+      baos = new ByteArrayOutputStream();
+      PrintStream ps = new PrintStream(baos);
+      if (logger.isDebugEnabled()) {
+        client.addFilter(new LoggingFilter(ps));
+      }
+
+      // Grab the current time so that we can use it for metrics purposes later.
+      startTimeInMs = System.currentTimeMillis();
+      override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
+
+      if (useBasicAuth()) {
+        result = client.resource(url).header(HEADER_TRANS_ID, transId)
+            .header(HEADER_FROM_APP_ID, ML_APP_NAME)
+            .header(HEADER_AUTHORIZATION, getAuthenticationCredentials())
+            .type(mimeType.getHttpHeaderType()).put(ClientResponse.class, payload);
+      } else {
+        result = client.resource(url).header(HEADER_TRANS_ID, transId)
+            .header(HEADER_FROM_APP_ID, ML_APP_NAME).type(mimeType.getHttpHeaderType())
+            .put(ClientResponse.class, payload);
+      }
+    } catch (Exception ex) {
+      logger.error(ModelLoaderMsgs.AAI_REST_REQUEST_ERROR, "PUT", url, ex.getLocalizedMessage());
+      return null;
+    } finally {
+      if (logger.isDebugEnabled()) {
+        logger.debug(baos.toString());
+      }
+    }
+
+    if ((result != null) && ((result.getStatus() == Response.Status.CREATED.getStatusCode())
+        || (result.getStatus() == Response.Status.OK.getStatusCode()))) {
+      logger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS, "PUT", url,
+          Integer.toString(result.getStatus()));
+      metricsLogger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS,
+          new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, result.getStatus())
+              .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION,
+                  result.getResponseStatus().toString()),
+          override, "PUT", url, Integer.toString(result.getStatus()));
+    } else {
+      // If response is not 200 OK, then additionally log the reason
+      String respMsg = result.getEntity(String.class);
+      if (respMsg == null) {
+        respMsg = result.getStatusInfo().getReasonPhrase();
+      }
+      logger.info(ModelLoaderMsgs.AAI_REST_REQUEST_UNSUCCESSFUL, "PUT", url,
+          Integer.toString(result.getStatus()), respMsg);
+      metricsLogger.info(ModelLoaderMsgs.AAI_REST_REQUEST_UNSUCCESSFUL,
+          new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, result.getStatus())
+              .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION,
+                  result.getResponseStatus().toString()),
+          override, "PUT", url, Integer.toString(result.getStatus()), respMsg);
+    }
+
+    return result;
+  }
+
+  /**
+   * Send a DELETE request to the A&AI.
+   *
+   * @param url
+   *          - the url
+   * @param resourceVersion
+   *          - the resource-version of the model to delete
+   * @param transId
+   *          - transaction ID
+   * @return ClientResponse
+   */
+  public ClientResponse deleteResource(String url, String resourceVersion, String transId) {
+    ClientResponse result = null;
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    long startTimeInMs = 0;
+    MdcOverride override = new MdcOverride();
+
+    try {
+      Client client = setupClient();
+
+      baos = new ByteArrayOutputStream();
+      PrintStream ps = new PrintStream(baos);
+      if (logger.isDebugEnabled()) {
+        client.addFilter(new LoggingFilter(ps));
+      }
+
+      // Grab the current time so that we can use it for metrics purposes later.
+      startTimeInMs = System.currentTimeMillis();
+      override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
+
+      if (useBasicAuth()) {
+        result = client.resource(url).queryParam(RESOURCE_VERSION_PARAM, resourceVersion)
+            .header(HEADER_TRANS_ID, transId).header(HEADER_FROM_APP_ID, ML_APP_NAME)
+            .header(HEADER_AUTHORIZATION, getAuthenticationCredentials())
+            .delete(ClientResponse.class);
+      } else {
+        result = client.resource(url).queryParam(RESOURCE_VERSION_PARAM, resourceVersion)
+            .header(HEADER_TRANS_ID, transId).header(HEADER_FROM_APP_ID, ML_APP_NAME)
+            .delete(ClientResponse.class);
+      }
+    } catch (Exception ex) {
+      logger.error(ModelLoaderMsgs.AAI_REST_REQUEST_ERROR, "DELETE", url, ex.getLocalizedMessage());
+      return null;
+    } finally {
+      if (logger.isDebugEnabled()) {
+        logger.debug(baos.toString());
+      }
+    }
+
+    logger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS, "DELETE", url,
+        Integer.toString(result.getStatus()));
+    metricsLogger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS,
+        new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, result.getStatus()).setField(
+            LogLine.DefinedFields.RESPONSE_DESCRIPTION, result.getResponseStatus().toString()),
+        override, "DELETE", url, Integer.toString(result.getStatus()));
+
+    return result;
+  }
+
+  /**
+   * Send a GET request to the A&AI for a resource.
+   *
+   * @param url
+   *          - the url to use
+   * @param transId
+   *          - transaction ID
+   * @return ClientResponse
+   */
+  public ClientResponse getResource(String url, String transId, MimeType mimeType) {
+    ClientResponse result = null;
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    long startTimeInMs = 0;
+    MdcOverride override = new MdcOverride();
+
+    try {
+      Client client = setupClient();
+
+      baos = new ByteArrayOutputStream();
+      PrintStream ps = new PrintStream(baos);
+      if (logger.isDebugEnabled()) {
+        client.addFilter(new LoggingFilter(ps));
+      }
+
+      // Grab the current time so that we can use it for metrics purposes later.
+      startTimeInMs = System.currentTimeMillis();
+      override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
+
+      if (useBasicAuth()) {
+        result = client.resource(url).header(HEADER_TRANS_ID, transId)
+            .header(HEADER_FROM_APP_ID, ML_APP_NAME).accept(mimeType.getHttpHeaderType())
+            .header(HEADER_AUTHORIZATION, getAuthenticationCredentials()).get(ClientResponse.class);
+      } else {
+        result = client.resource(url).header(HEADER_TRANS_ID, transId)
+            .header(HEADER_FROM_APP_ID, ML_APP_NAME).accept(mimeType.getHttpHeaderType())
+            .get(ClientResponse.class);
+
+      }
+    } catch (Exception ex) {
+      logger.error(ModelLoaderMsgs.AAI_REST_REQUEST_ERROR, "GET", url, ex.getLocalizedMessage());
+      return null;
+    } finally {
+      if (logger.isDebugEnabled()) {
+        logger.debug(baos.toString());
+      }
+    }
+
+    logger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS, "GET", url,
+        Integer.toString(result.getStatus()));
+    metricsLogger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS,
+        new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, result.getStatus()).setField(
+            LogLine.DefinedFields.RESPONSE_DESCRIPTION, result.getResponseStatus().toString()),
+        override, "GET", url, Integer.toString(result.getStatus()));
+
+    return result;
+  }
+
+  /**
+   * Does a GET on a resource to retrieve the resource version, and then DELETE
+   * that version.
+   *
+   * @param url
+   *          - the url
+   * @param transId
+   *          - transaction ID
+   * @return ClientResponse
+   */
+  public ClientResponse getAndDeleteResource(String url, String transId) {
+    // First, GET the model
+    ClientResponse getResponse = getResource(url, transId, MimeType.XML);
+    if ((getResponse == null) || (getResponse.getStatus() != Response.Status.OK.getStatusCode())) {
+      return getResponse;
+    }
+
+    // Delete the model using the resource version in the response
+    String resVersion = null;
+    try {
+      resVersion = getResourceVersion(getResponse);
+    } catch (Exception e) {
+      logger.error(ModelLoaderMsgs.AAI_REST_REQUEST_ERROR, "GET", url, e.getLocalizedMessage());
+      return null;
+    }
+
+    return deleteResource(url, resVersion, transId);
+  }
+
+  private Client setupClient() throws IOException, GeneralSecurityException {
+    ClientConfig clientConfig = new DefaultClientConfig();
+
+    HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
+      @Override
+      public boolean verify(String string, SSLSession ssls) {
+        return true;
+      }
+    });
+
+    // Create a trust manager that does not validate certificate chains
+    TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
+      @Override
+      public X509Certificate[] getAcceptedIssuers() {
+        return null;
+      }
+
+      @Override
+      public void checkClientTrusted(X509Certificate[] certs, String authType) {}
+
+      @Override
+      public void checkServerTrusted(X509Certificate[] certs, String authType) {}
+    } };
+
+    SSLContext ctx = SSLContext.getInstance("TLS");
+    KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
+    FileInputStream fin = new FileInputStream(config.getAaiKeyStorePath());
+    KeyStore ks = KeyStore.getInstance("PKCS12");
+    char[] pwd = config.getAaiKeyStorePassword().toCharArray();
+    ks.load(fin, pwd);
+    kmf.init(ks, pwd);
+
+    ctx.init(kmf.getKeyManagers(), trustAllCerts, null);
+    clientConfig.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES,
+        new HTTPSProperties(new HostnameVerifier() {
+          @Override
+          public boolean verify(String theString, SSLSession sslSession) {
+            return true;
+          }
+        }, ctx));
+
+    Client client = Client.create(clientConfig);
+
+    return client;
+  }
+
+  private String getResourceVersion(ClientResponse response)
+      throws ParserConfigurationException, SAXException, IOException {
+    String respData = response.getEntity(String.class);
+
+    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+    DocumentBuilder builder = factory.newDocumentBuilder();
+    InputSource is = new InputSource(new StringReader(respData));
+    Document doc = builder.parse(is);
+
+    NodeList nodeList = doc.getDocumentElement().getChildNodes();
+    for (int i = 0; i < nodeList.getLength(); i++) {
+      Node currentNode = nodeList.item(i);
+      if (currentNode.getNodeName().equals(RESOURCE_VERSION_PARAM)) {
+        return currentNode.getTextContent();
+      }
+    }
+
+    return null;
+  }
+
+  private String getAuthenticationCredentials() {
+
+    String usernameAndPassword = config.getAaiAuthenticationUser() + ":"
+        + config.getAaiAuthenticationPassword();
+    return "Basic " + java.util.Base64.getEncoder().encodeToString(usernameAndPassword.getBytes());
+  }
+
+  public boolean useBasicAuth() {
+    return (config.getAaiAuthenticationUser() != null)
+        && (config.getAaiAuthenticationPassword() != null);
+  }
+}
diff --git a/src/main/java/org/openecomp/modelloader/service/ModelLoaderInterface.java b/src/main/java/org/openecomp/modelloader/service/ModelLoaderInterface.java
index 689115e..99c5735 100644
--- a/src/main/java/org/openecomp/modelloader/service/ModelLoaderInterface.java
+++ b/src/main/java/org/openecomp/modelloader/service/ModelLoaderInterface.java
@@ -1,53 +1,55 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 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.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.service;
-
-import java.io.IOException;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.Response;
-
-public interface ModelLoaderInterface {
-
-  @GET
-  @Path("/loadModel/{modelid}")
-  public Response loadModel(@PathParam("modelid") String modelid);
-
-  @PUT
-  @Path("/saveModel/{modelid}/{modelname}")
-  public Response saveModel(@PathParam("modelid") String modelid,
-      @PathParam("modelname") String modelname);
-
-  @POST
-  @Consumes("application/xml")
-  @Produces("application/xml")
-  @Path("/ingestModel/{modelid}")
-  public Response ingestModel(@PathParam("modelid") String modelid, @Context HttpServletRequest req,
-      String payload) throws IOException;
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.service;
+
+import java.io.IOException;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.Response;
+
+public interface ModelLoaderInterface {
+
+  @GET
+  @Path("/loadModel/{modelid}")
+  public Response loadModel(@PathParam("modelid") String modelid);
+
+  @PUT
+  @Path("/saveModel/{modelid}/{modelname}")
+  public Response saveModel(@PathParam("modelid") String modelid,
+      @PathParam("modelname") String modelname);
+
+  @POST
+  @Consumes("application/xml")
+  @Produces("application/xml")
+  @Path("/ingestModel/{modelid}")
+  public Response ingestModel(@PathParam("modelid") String modelid, @Context HttpServletRequest req,
+      String payload) throws IOException;
+}
diff --git a/src/main/java/org/openecomp/modelloader/service/ModelLoaderMsgs.java b/src/main/java/org/openecomp/modelloader/service/ModelLoaderMsgs.java
index b81c541..2d3137b 100644
--- a/src/main/java/org/openecomp/modelloader/service/ModelLoaderMsgs.java
+++ b/src/main/java/org/openecomp/modelloader/service/ModelLoaderMsgs.java
@@ -1,102 +1,110 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 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.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.service;
-
-import com.att.eelf.i18n.EELFResourceManager;
-
-import org.openecomp.cl.eelf.LogMessageEnum;
-
-public enum ModelLoaderMsgs implements LogMessageEnum {
-
-  /**
-   * Arguments: None.
-   */
-  LOADING_CONFIGURATION,
-
-  /**
-   * Arguments: None.
-   */
-  STOPPING_CLIENT,
-
-  /**
-   * Arguments: {0} = message.
-   */
-  INITIALIZING,
-
-  /**
-   * Arguments: {0} = reason.
-   */
-  ASDC_CONNECTION_ERROR,
-
-  /**
-   * Arguments: {0} = message.
-   */
-  DISTRIBUTION_EVENT,
-
-  /**
-   * Arguments: {0} = error message.
-   */
-  DISTRIBUTION_EVENT_ERROR, 
-  
-  /**
-    * Arguments: {0} = request type.
-    *            {1} = endpoint. 
-    *            {2} = result code.
-    */
-  AAI_REST_REQUEST_SUCCESS,
-
-  /**
-   * Arguments: {0} = request type. 
-   *            {1} = endpoint. 
-   *            {2} = result code. 
-   *            {3} = result.
-   * message
-   */
-  AAI_REST_REQUEST_UNSUCCESSFUL,
-
-  /**
-   * Arguments: {0} = request type. 
-   *            {1} = endpoint.
-   *            {2} = error message.
-   */
-  AAI_REST_REQUEST_ERROR,
-
-  /**
-   * Arguments: {0} = artifact name. 
-   *            {1} = result.
-   */
-  DOWNLOAD_COMPLETE,
-
-  /**
-   * Arguments: {0} = event. 
-   *            {1} = artifact name. 
-   *            {2} = result.
-   */
-  EVENT_PUBLISHED;
-
-  /**
-   * Load message bundle (ModelLoaderMsgs.properties file)
-   */
-  static {
-    EELFResourceManager.loadMessageBundle("org/openecomp/modelloader/service/ModelLoaderMsgs");
-  }
-
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.service;
+
+import com.att.eelf.i18n.EELFResourceManager;
+
+import org.openecomp.cl.eelf.LogMessageEnum;
+
+public enum ModelLoaderMsgs implements LogMessageEnum {
+
+  /**
+   * Arguments: None.
+   */
+  LOADING_CONFIGURATION,
+
+  /**
+   * Arguments: None.
+   */
+  STOPPING_CLIENT,
+
+  /**
+   * Arguments: {0} = message.
+   */
+  INITIALIZING,
+
+  /**
+   * Arguments: {0} = reason.
+   */
+  ASDC_CONNECTION_ERROR,
+
+  /**
+   * Arguments: {0} = message.
+   */
+  DISTRIBUTION_EVENT,
+
+  /**
+   * Arguments: {0} = error message.
+   */
+  DISTRIBUTION_EVENT_ERROR, 
+  
+  /**
+    * Arguments: {0} = request type.
+    *            {1} = endpoint. 
+    *            {2} = result code.
+    */
+  AAI_REST_REQUEST_SUCCESS,
+
+  /**
+   * Arguments: {0} = request type. 
+   *            {1} = endpoint. 
+   *            {2} = result code. 
+   *            {3} = result.
+   * message
+   */
+  AAI_REST_REQUEST_UNSUCCESSFUL,
+
+  /**
+   * Arguments: {0} = request type. 
+   *            {1} = endpoint.
+   *            {2} = error message.
+   */
+  AAI_REST_REQUEST_ERROR,
+
+  /**
+   * Arguments:
+   * {0} = artifact name
+   */
+  ARTIFACT_PARSE_ERROR,
+  
+  /**
+   * Arguments: {0} = artifact name. 
+   *            {1} = result.
+   */
+  DOWNLOAD_COMPLETE,
+
+  /**
+   * Arguments: {0} = event. 
+   *            {1} = artifact name. 
+   *            {2} = result.
+   */
+  EVENT_PUBLISHED;
+
+  /**
+   * Load message bundle (ModelLoaderMsgs.properties file)
+   */
+  static {
+    EELFResourceManager.loadMessageBundle("org/openecomp/modelloader/service/ModelLoaderMsgs");
+  }
+
+}
diff --git a/src/main/java/org/openecomp/modelloader/service/ModelLoaderService.java b/src/main/java/org/openecomp/modelloader/service/ModelLoaderService.java
index 16aba7e..118cd18 100644
--- a/src/main/java/org/openecomp/modelloader/service/ModelLoaderService.java
+++ b/src/main/java/org/openecomp/modelloader/service/ModelLoaderService.java
@@ -1,174 +1,188 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 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.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.service;
-
-import org.openecomp.sdc.api.IDistributionClient;
-import org.openecomp.sdc.api.results.IDistributionClientResult;
-import org.openecomp.sdc.impl.DistributionClientFactory;
-import org.openecomp.sdc.utils.DistributionActionResultEnum;
-
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.modelloader.config.ModelLoaderConfig;
-import org.openecomp.modelloader.entity.model.ModelArtifactHandler;
-import org.openecomp.modelloader.notification.EventCallback;
-
-import java.io.IOException;
-import java.util.Properties;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.core.Response;
-
-/**
- * Service class in charge of managing the negotiating model loading
- * capabilities between AAI and an ASDC.
- */
-public class ModelLoaderService implements ModelLoaderInterface {
-
-  protected static String CONFIG_FILE = "model-loader.properties";
-
-  private IDistributionClient client;
-  private ModelLoaderConfig config;
-
-  static Logger logger = LoggerFactory.getInstance().getLogger(ModelLoaderService.class.getName());
-
-  /**
-   * Responsible for loading configuration files and calling initialization.
-   */
-  @PostConstruct
-  protected void start() {
-    // Load model loader system configuration
-    logger.info(ModelLoaderMsgs.LOADING_CONFIGURATION);
-    Properties configProperties = new Properties();
-    try {
-      configProperties.load(this.getClass().getClassLoader().getResourceAsStream(CONFIG_FILE));
-    } catch (IOException e) {
-      String errorMsg = "Failed to load configuration: " + e.getMessage();
-      logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);
-      shutdown();
-    }
-    
-    config = new ModelLoaderConfig(configProperties);
-    init();
-  }
-
-  /**
-   * Responsible for stopping the connection to the distribution client before
-   * the resource is destroyed.
-   */
-  @PreDestroy
-  protected void preShutdownOperations() {
-    logger.info(ModelLoaderMsgs.STOPPING_CLIENT);
-    if (client != null) {
-      client.stop();
-    }
-  }
-
-  /**
-   * Responsible for loading configuration files, initializing model
-   * distribution clients, and starting them.
-   */
-  protected void init() {
-    // Initialize distribution client
-    logger.debug(ModelLoaderMsgs.INITIALIZING, "Initializing distribution client...");
-    client = DistributionClientFactory.createDistributionClient();
-    IDistributionClientResult initResult = client.init(config, new EventCallback(client, config));
-    if (initResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-      String errorMsg = "Failed to initialize distribution client: "
-          + initResult.getDistributionMessageResult();
-      logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);
-      shutdown();
-    }
-
-    // Start distribution client
-    logger.debug(ModelLoaderMsgs.INITIALIZING, "Starting distribution client...");
-    IDistributionClientResult startResult = client.start();
-    if (startResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-      String errorMsg = "Failed to start distribution client: "
-          + startResult.getDistributionMessageResult();
-      logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);
-      shutdown();
-    }
-
-    logger.debug(ModelLoaderMsgs.INITIALIZING,
-        "Succcessfully loaded service: " + this.getClass().getSimpleName());
-  }
-
-  /**
-   * Shut down the process.
-   */
-  private void shutdown() {
-    preShutdownOperations();
-
-    // TODO: Find a better way to shut down the model loader.
-    try {
-      // Give logs time to write to file
-      Thread.sleep(2000);
-    } catch (InterruptedException e) {
-      // Nothing we can do at this point
-    }
-
-    Runtime.getRuntime().halt(1);
-  }
-
-  /** (non-Javadoc)
-   * @see org.openecomp.modelloader.service.ModelLoaderInterface#loadModel(java.lang.String)
-   */
-  @Override
-  public Response loadModel(String modelid) {
-    Response response = Response.ok("{\"model_loaded\":\"" + modelid + "\"}").build();
-
-    return response;
-  }
-
-  /** (non-Javadoc)
-   * @see org.openecomp.modelloader.service.ModelLoaderInterface#saveModel(java.lang.String, java.lang.String)
-   */
-  @Override
-  public Response saveModel(String modelid, String modelname) {
-    Response response = Response.ok("{\"model_saved\":\"" + modelid + "-" + modelname + "\"}")
-        .build();
-
-    return response;
-  }
-
-  @Override
-  public Response ingestModel(String modelid, HttpServletRequest req, String payload)
-      throws IOException {
-    Response response;
-
-    if (config.getIngestSimulatorEnabled()) {
-      logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Received test artifact");
-
-      ModelArtifactHandler handler = new ModelArtifactHandler(config);
-      handler.loadModelTest(payload.getBytes());
-
-      response = Response.ok().build();
-    } else {
-      logger.debug("Simulation interface disabled");
-      response = Response.serverError().build();
-    }
-
-    return response;
-  }
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.service;
+
+import org.openecomp.sdc.api.IDistributionClient;
+import org.openecomp.sdc.api.results.IDistributionClientResult;
+import org.openecomp.sdc.impl.DistributionClientFactory;
+import org.openecomp.sdc.utils.DistributionActionResultEnum;
+
+import org.openecomp.cl.api.Logger;
+import org.openecomp.cl.eelf.LoggerFactory;
+import org.openecomp.modelloader.config.ModelLoaderConfig;
+import org.openecomp.modelloader.entity.model.ModelArtifactHandler;
+import org.openecomp.modelloader.notification.EventCallback;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Properties;
+
+import javax.annotation.PreDestroy;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.core.Response;
+
+/**
+ * Service class in charge of managing the negotiating model loading
+ * capabilities between AAI and an ASDC.
+ */
+public class ModelLoaderService implements ModelLoaderInterface {
+	
+	protected static final String FILESEP = (System.getProperty("file.separator") == null) ? "/"
+            : System.getProperty("file.separator");
+
+	protected static final String CONFIG_DIR = System.getProperty("CONFIG_HOME") + FILESEP;
+	protected static final String CONFIG_AUTH_LOCATION = CONFIG_DIR + "auth" + FILESEP;
+	protected static final String CONFIG_FILE = CONFIG_DIR + "model-loader.properties";
+
+	private IDistributionClient client;
+	private ModelLoaderConfig config;
+
+	static Logger logger = LoggerFactory.getInstance().getLogger(ModelLoaderService.class.getName());
+
+	/**
+	 * Responsible for loading configuration files and calling initialization.
+	 */
+	public ModelLoaderService() {
+		start();
+	}
+
+	protected void start() {
+		// Load model loader system configuration
+		logger.info(ModelLoaderMsgs.LOADING_CONFIGURATION);
+		Properties configProperties = new Properties();
+		try {
+			configProperties.load(new FileInputStream(CONFIG_FILE));
+		} catch (IOException e) {
+			String errorMsg = "Failed to load configuration: " + e.getMessage();
+			logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);
+			shutdown();
+		}
+
+		config = new ModelLoaderConfig(configProperties, CONFIG_AUTH_LOCATION);
+		init();
+	}
+
+	@Override
+	public void finalize() {
+		preShutdownOperations();
+	}
+	
+	/**
+	 * Responsible for stopping the connection to the distribution client before
+	 * the resource is destroyed.
+	 */
+	protected void preShutdownOperations() {
+		logger.info(ModelLoaderMsgs.STOPPING_CLIENT);
+		if (client != null) {
+			client.stop();
+		}
+	}
+
+	/**
+	 * Responsible for loading configuration files, initializing model
+	 * distribution clients, and starting them.
+	 */
+	protected void init() {
+		// Initialize distribution client
+		logger.debug(ModelLoaderMsgs.INITIALIZING, "Initializing distribution client...");
+		client = DistributionClientFactory.createDistributionClient();
+		IDistributionClientResult initResult = client.init(config, new EventCallback(client, config));
+		if (initResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
+			String errorMsg = "Failed to initialize distribution client: "
+					+ initResult.getDistributionMessageResult();
+			logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);
+			shutdown();
+		}
+
+		// Start distribution client
+		logger.debug(ModelLoaderMsgs.INITIALIZING, "Starting distribution client...");
+		IDistributionClientResult startResult = client.start();
+		if (startResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
+			String errorMsg = "Failed to start distribution client: "
+					+ startResult.getDistributionMessageResult();
+			logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);
+			shutdown();
+		}
+
+		logger.debug(ModelLoaderMsgs.INITIALIZING,
+				"Succcessfully loaded service: " + this.getClass().getSimpleName());
+	}
+
+	/**
+	 * Shut down the process.
+	 */
+	private void shutdown() {
+		preShutdownOperations();
+
+		// TODO: Find a better way to shut down the model loader.
+		try {
+			// Give logs time to write to file
+			Thread.sleep(2000);
+		} catch (InterruptedException e) {
+			// Nothing we can do at this point
+		}
+
+		Runtime.getRuntime().halt(1);
+	}
+
+	/** (non-Javadoc)
+	 * @see org.openecomp.modelloader.service.ModelLoaderInterface#loadModel(java.lang.String)
+	 */
+	@Override
+	public Response loadModel(String modelid) {
+		Response response = Response.ok("{\"model_loaded\":\"" + modelid + "\"}").build();
+
+		return response;
+	}
+
+	/** (non-Javadoc)
+	 * @see org.openecomp.modelloader.service.ModelLoaderInterface#saveModel(java.lang.String, java.lang.String)
+	 */
+	@Override
+	public Response saveModel(String modelid, String modelname) {
+		Response response = Response.ok("{\"model_saved\":\"" + modelid + "-" + modelname + "\"}")
+				.build();
+
+		return response;
+	}
+
+	@Override
+	public Response ingestModel(String modelid, HttpServletRequest req, String payload)
+			throws IOException {
+		Response response;
+
+		if (config.getIngestSimulatorEnabled()) {
+			logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Received test artifact");
+
+			ModelArtifactHandler handler = new ModelArtifactHandler(config);
+			handler.loadModelTest(payload.getBytes());
+
+			response = Response.ok().build();
+		} else {
+			logger.debug("Simulation interface disabled");
+			response = Response.serverError().build();
+		}
+
+		return response;
+	}
+}
diff --git a/src/main/java/org/openecomp/modelloader/util/JsonXmlConverter.java b/src/main/java/org/openecomp/modelloader/util/JsonXmlConverter.java
index ca63b23..621f704 100644
--- a/src/main/java/org/openecomp/modelloader/util/JsonXmlConverter.java
+++ b/src/main/java/org/openecomp/modelloader/util/JsonXmlConverter.java
@@ -1,79 +1,81 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 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.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.util;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-import org.json.XML;
-
-public class JsonXmlConverter {
-
-  /**
-   * Determines whether or not the supplied text string represents a valid
-   * JSON structure or not.
-   * 
-   * @param text - The text to be evaluated.
-   * 
-   * @return - true if the string represents a valid JSON object,
-   *           false, otherwise.
-   */
-  public static boolean isValidJson(String text) {
-    try {
-      new JSONObject(text);
-    } catch (JSONException ex) {
-      try {
-        new JSONArray(text);
-      } catch (JSONException ex1) {
-        return false;
-      }
-    }
-
-    return true;
-  }
-
-  /**
-   * Takes a text string representing a valid JSON structure and converts it to
-   * an equivalent XML string.
-   * 
-   * @param jsonText - The JSON string to convert to XML.
-   * 
-   * @return - An XML string representation of the supplied JSON string.
-   */
-  public static String convertJsonToXml(String jsonText) {
-    JSONObject jsonObj = new JSONObject(jsonText);
-    String xmlText = XML.toString(jsonObj);
-    return xmlText;
-  }
-
-  /**
-   * Takes a text string representing a valid XML structure and converts it to
-   * an equivalent JSON string.
-   * 
-   * @param xmlText - The XML string to convert to JSON.
-   * 
-   * @return - A JSON string representation of the supplied XML string.
-   */
-  public static String convertXmlToJson(String xmlText) {
-    JSONObject jsonObj = XML.toJSONObject(xmlText);
-    return jsonObj.toString();
-  }
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.util;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.json.XML;
+
+public class JsonXmlConverter {
+
+  /**
+   * Determines whether or not the supplied text string represents a valid
+   * JSON structure or not.
+   * 
+   * @param text - The text to be evaluated.
+   * 
+   * @return - true if the string represents a valid JSON object,
+   *           false, otherwise.
+   */
+  public static boolean isValidJson(String text) {
+    try {
+      new JSONObject(text);
+    } catch (JSONException ex) {
+      try {
+        new JSONArray(text);
+      } catch (JSONException ex1) {
+        return false;
+      }
+    }
+
+    return true;
+  }
+
+  /**
+   * Takes a text string representing a valid JSON structure and converts it to
+   * an equivalent XML string.
+   * 
+   * @param jsonText - The JSON string to convert to XML.
+   * 
+   * @return - An XML string representation of the supplied JSON string.
+   */
+  public static String convertJsonToXml(String jsonText) {
+    JSONObject jsonObj = new JSONObject(jsonText);
+    String xmlText = XML.toString(jsonObj);
+    return xmlText;
+  }
+
+  /**
+   * Takes a text string representing a valid XML structure and converts it to
+   * an equivalent JSON string.
+   * 
+   * @param xmlText - The XML string to convert to JSON.
+   * 
+   * @return - A JSON string representation of the supplied XML string.
+   */
+  public static String convertXmlToJson(String xmlText) {
+    JSONObject jsonObj = XML.toJSONObject(xmlText);
+    return jsonObj.toString();
+  }
+}
diff --git a/src/main/resources/aai-os-cert.p12 b/src/main/resources/aai-os-cert.p12
deleted file mode 100644
index ee57120..0000000
--- a/src/main/resources/aai-os-cert.p12
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
deleted file mode 100644
index 48233fe..0000000
--- a/src/main/resources/logback.xml
+++ /dev/null
@@ -1,195 +0,0 @@
-<!--
-  ============LICENSE_START=======================================================
-  MODEL LOADER SERVICE
-  ================================================================================
-  Copyright (C) 2017 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.
-  You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  ============LICENSE_END=========================================================
-  -->
-
-<configuration scan="true" scanPeriod="3 seconds" debug="false">
-	<!--<jmxConfigurator /> -->
-	<!-- directory path for all other type logs -->
-
-	<property name="logDir" value="logs" />
-
-
-	<!-- specify the component name <ECOMP-component-name>::= "MSO" | "DCAE" 
-		| "ASDC " | "AAI" |"Policy" | "SDNC" | "AC" -->
-	<property name="componentName" value="AAI-ML"></property>
-
-	<!-- default eelf log file names -->
-	<property name="generalLogName" value="error" />
-	<property name="metricsLogName" value="metrics" />
-	<property name="auditLogName" value="audit" />
-	<property name="debugLogName" value="debug" />
-
-	<property name="errorLogPattern"
-		value="%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%mdc{RequestId}|%thread|ModelLoader|%mdc{PartnerName}|%logger||%.-5level|%msg%n" />
-	<property name="auditMetricPattern" value="%m%n" />
-
-	<property name="logDirectory" value="${logDir}/${componentName}" />
-
-	<!-- Example evaluator filter applied against console appender -->
-	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
-		<encoder>
-			<pattern>${defaultPattern}</pattern>
-		</encoder>
-	</appender>
-
-	<!-- ============================================================================ -->
-	<!-- EELF Appenders -->
-	<!-- ============================================================================ -->
-
-	<!-- The EELFAppender is used to record events to the general application 
-		log -->
-
-	<appender name="EELF"
-		class="ch.qos.logback.core.rolling.RollingFileAppender">
-		<file>${logDirectory}/${generalLogName}.log</file>
-		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-			<fileNamePattern>${logDirectory}/${generalLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
-			<maxHistory>60</maxHistory>
-		</rollingPolicy>
-		<encoder>
-			<pattern>${errorLogPattern}</pattern>
-		</encoder>
-	</appender>
-	<appender name="asyncEELF" class="ch.qos.logback.classic.AsyncAppender">
-		<!-- deny all events with a level below INFO, that is TRACE and DEBUG -->
-		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-			<level>INFO</level>
-		</filter>
-		<queueSize>256</queueSize>
-		<appender-ref ref="EELF" />
-	</appender>
-
-
-	<appender name="EELFAudit"
-		class="ch.qos.logback.core.rolling.RollingFileAppender">
-		<file>${logDirectory}/${auditLogName}.log</file>
-		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-			<fileNamePattern>${logDirectory}/${auditLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
-			<maxHistory>60</maxHistory>
-		</rollingPolicy>
-		<encoder>
-			<pattern>${auditMetricPattern}</pattern>
-		</encoder>
-	</appender>
-	<appender name="asyncEELFAudit" class="ch.qos.logback.classic.AsyncAppender">
-		<queueSize>256</queueSize>
-		<appender-ref ref="EELFAudit" />
-	</appender>
-
-
-	<appender name="EELFMetrics"
-		class="ch.qos.logback.core.rolling.RollingFileAppender">
-		<file>${logDirectory}/${metricsLogName}.log</file>
-		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-			<fileNamePattern>${logDirectory}/${metricsLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
-			<maxHistory>60</maxHistory>
-		</rollingPolicy>
-		<encoder>
-			<pattern>${auditMetricPattern}</pattern>
-		</encoder>
-	</appender>
-	<appender name="asyncEELFMetrics" class="ch.qos.logback.classic.AsyncAppender">
-		<queueSize>256</queueSize>
-		<appender-ref ref="EELFMetrics" />
-	</appender>
-
-
-	<appender name="EELFDebug"
-		class="ch.qos.logback.core.rolling.RollingFileAppender">
-		<file>${logDirectory}/${debugLogName}.log</file>
-		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-			<fileNamePattern>${logDirectory}/${debugLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
-			<maxHistory>60</maxHistory>
-		</rollingPolicy>
-		<encoder>
-			<pattern>${errorLogPattern}</pattern>
-		</encoder>
-	</appender>
-	<appender name="asyncEELFDebug" class="ch.qos.logback.classic.AsyncAppender">
-		<queueSize>256</queueSize>
-		<appender-ref ref="EELFDebug" />
-		<includeCallerData>true</includeCallerData>
-	</appender>
-
-
-	<!-- ============================================================================ -->
-	<!-- EELF loggers -->
-	<!-- ============================================================================ -->
-	<logger name="com.att.eelf" level="info" additivity="false">
-		<appender-ref ref="asyncEELF" />
-		<appender-ref ref="asyncEELFDebug" />
-	</logger>
-
-	<logger name="com.att.eelf.security" level="info" additivity="false">
-		<appender-ref ref="asyncEELFSecurity" />
-	</logger>
-	<logger name="com.att.eelf.perf" level="info" additivity="false">
-		<appender-ref ref="asyncEELFPerformance" />
-	</logger>
-	<logger name="com.att.eelf.server" level="info" additivity="false">
-		<appender-ref ref="asyncEELFServer" />
-	</logger>
-	<logger name="com.att.eelf.policy" level="info" additivity="false">
-		<appender-ref ref="asyncEELFPolicy" />
-	</logger>
-	<logger name="com.att.eelf.audit" level="info" additivity="false">
-		<appender-ref ref="asyncEELFAudit" />
-	</logger>
-	<logger name="com.att.eelf.metrics" level="info" additivity="false">
-		<appender-ref ref="asyncEELFMetrics" />
-	</logger>
-
-	<!-- Spring related loggers -->
-	<logger name="org.springframework" level="WARN" />
-	<logger name="org.springframework.beans" level="WARN" />
-	<logger name="org.springframework.web" level="WARN" />
-	<logger name="com.blog.spring.jms" level="WARN" />
-
-	<logger name="com.att" level="INFO" />
-
-	<!-- Model Loader loggers -->
-	<logger name="org.openecomp.modelloader" level="INFO" />
-
-	<!-- Other Loggers that may help troubleshoot -->
-	<logger name="net.sf" level="WARN" />
-	<logger name="org.apache.commons.httpclient" level="WARN" />
-	<logger name="org.apache.commons" level="WARN" />
-	<logger name="org.apache.coyote" level="WARN" />
-	<logger name="org.apache.jasper" level="WARN" />
-
-	<!-- Camel Related Loggers (including restlet/servlet/jaxrs/cxf logging. 
-		May aid in troubleshooting) -->
-	<logger name="org.apache.camel" level="WARN" />
-	<logger name="org.apache.cxf" level="WARN" />
-	<logger name="org.apache.camel.processor.interceptor" level="WARN" />
-	<logger name="org.apache.cxf.jaxrs.interceptor" level="WARN" />
-	<logger name="org.apache.cxf.service" level="WARN" />
-	<logger name="org.restlet" level="WARN" />
-	<logger name="org.apache.camel.component.restlet" level="WARN" />
-
-	<!-- logback internals logging -->
-	<logger name="ch.qos.logback.classic" level="WARN" />
-	<logger name="ch.qos.logback.core" level="WARN" />
-
-	<root>
-		<appender-ref ref="asyncEELF" />
-		<!-- <appender-ref ref="asyncEELFDebug" /> -->
-	</root>
-
-</configuration>
diff --git a/src/main/resources/model-loader.properties b/src/main/resources/model-loader.properties
deleted file mode 100644
index 7b8f63d..0000000
--- a/src/main/resources/model-loader.properties
+++ /dev/null
@@ -1,43 +0,0 @@
-###
-# ============LICENSE_START=======================================================
-# MODEL LOADER SERVICE
-# ================================================================================
-# Copyright (C) 2017 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.
-# You may obtain a copy of the License at
-# 
-#      http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ============LICENSE_END=========================================================
-###
-
-# Model Loader Distribution Client Configuration
-ml.distribution.ACTIVE_SERVER_TLS_AUTH=false
-ml.distribution.ASDC_ADDRESS=
-ml.distribution.CONSUMER_GROUP=aai-ml-group
-ml.distribution.CONSUMER_ID=aai-ml
-ml.distribution.ENVIRONMENT_NAME=
-ml.distribution.KEYSTORE_PASSWORD=
-ml.distribution.KEYSTORE_FILE=asdc-client.jks
-ml.distribution.PASSWORD=
-ml.distribution.POLLING_INTERVAL=30
-ml.distribution.POLLING_TIMEOUT=20
-ml.distribution.USER=ci
-ml.distribution.ARTIFACT_TYPES=MODEL_INVENTORY_PROFILE,MODEL_QUERY_SPEC,VNF_CATALOG
-
-# Model Loader AAI REST Client Configuration
-ml.aai.BASE_URL=
-ml.aai.MODEL_URL=/aai/v8/service-design-and-creation/models/model/
-ml.aai.NAMED_QUERY_URL=/aai/v8/service-design-and-creation/named-queries/named-query/
-ml.aai.VNF_IMAGE_URL=/aai/v8/service-design-and-creation/vnf-images
-ml.aai.KEYSTORE_FILE=aai-os-cert.p12
-ml.aai.KEYSTORE_PASSWORD=
-ml.aai.AUTH_USER=ModelLoader
-ml.aai.AUTH_PASSWORD=
diff --git a/src/main/resources/org/openecomp/modelloader/filemonitor/FileMonitorMsgs.properties b/src/main/resources/org/openecomp/modelloader/filemonitor/FileMonitorMsgs.properties
deleted file mode 100644
index 9abd55c..0000000
--- a/src/main/resources/org/openecomp/modelloader/filemonitor/FileMonitorMsgs.properties
+++ /dev/null
@@ -1,81 +0,0 @@
-###
-# ============LICENSE_START=======================================================
-# MODEL LOADER SERVICE
-# ================================================================================
-# Copyright (C) 2017 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.
-# You may obtain a copy of the License at
-# 
-#      http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ============LICENSE_END=========================================================
-###
-
-#Resource key=Error Code|Message text|Resolution text |Description text
-#######
-#Newlines can be utilized to add some clarity ensuring continuing line
-#has atleast one leading space
-#ResourceKey=\
-#             ERR0000E\
-#             Sample error msg txt\
-#             Sample resolution msg\
-#             Sample description txt
-#
-######
-#Error code classification category
-#100    Permission errors
-#200    Availability errors/Timeouts
-#300    Data errors
-#400    Schema Interface type/validation errors
-#500    Business process errors
-#900    Unknown errors
-#
-########################################################################
-
-#AVAILABILITY ERRORS
-
-LOADING_FROM_FILE=\
-                  FILEMON2001I|\
-                  Loading service properties from file {0}|\
-                  None. Attempting to load file|\
-                  Attempting to load service properties from the given service file
-                  
-FILE_SUCCESSFULLY_LOADED=\
-                  FILEMON2002I|\
-                  File {0} is loaded into the map and the corresponding system properties have been refreshed|\
-                  None. Successfully loaded file|\
-                  The given service file and its properties were successfully loaded
-                  
-FILE_CANNOT_BE_LOADED=\
-                  FILEMON2003E|\
-                  File {0} cannot be loaded into the map|\
-                  Please check the file permissions and format of the file|\
-                  Unable to load the given service file due to an error
-                        
-CANNOT_READ_FILE_STREAM=\  
-                  FILEMON2004E|\
-                  Error reading the file stream for file {0}|\
-                  Please ensure that the file exists and the permissions are set correctly|\
-                  Unable to read the file stream for the given file
-                
-#UNKNOWN ERRORS                
-                
-FILE_LISTENER_ATTACH_FAILED=\
-                  FILEMON9002W|\
-                  Unable to attach file change listener to file {0} due to an internal error|\
-                  Failed to attach file change listener to the given file. Please check the reported exception for details|\
-                  The file will not be actively monitored for changes
-                
-                
-PROP_MAP_CREATION_FAILED=\
-                  FILEMON9001E|\
-                  Internal Error occurred while creating property map for service files|\
-                  Error occurred due to an internal issue. Please check the reported exception for details |\
-                  Failed to create a property map for the service files
diff --git a/src/main/resources/org/openecomp/modelloader/service/ModelLoaderMsgs.properties b/src/main/resources/org/openecomp/modelloader/service/ModelLoaderMsgs.properties
index 53c96dc..8e2d043 100644
--- a/src/main/resources/org/openecomp/modelloader/service/ModelLoaderMsgs.properties
+++ b/src/main/resources/org/openecomp/modelloader/service/ModelLoaderMsgs.properties
@@ -1,112 +1,118 @@
-###
+###
 # ============LICENSE_START=======================================================
 # MODEL LOADER SERVICE
 # ================================================================================
 # Copyright (C) 2017 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.
-# You may obtain a copy of the License at
-# 
-#      http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+#      http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
 # limitations under the License.
-# ============LICENSE_END=========================================================
-###
-
-#Resource key=Error Code|Message text|Resolution text |Description text
-#######
-#Newlines can be utilized to add some clarity ensuring continuing line
-#has at least one leading space
-#ResourceKey=\
-#             ERR0000E\
-#             Sample error msg txt\
-#             Sample resolution msg\
-#             Sample description txt
-#
-######
-#Error code classification category
-#000 Info/Debug
-#100 Permission errors
-#200 Availability errors/Timeouts
-#300 Data errors
-#400 Schema Interface type/validation errors
-#500 Business process errors
-#900 Unknown errors
-#
-########################################################################
-
-# INFO Level Logs
-LOADING_CONFIGURATION=\
-                  MDLSVC0001I|\
-                  Loading configuration |\
-                  None. Attempting to load configuration|\
-                  Attempting to load Model Loader Service configuration
-                  
-STOPPING_CLIENT=\
-                  MDLSVC0002I|\
-                  Stopping distribution client|\
-                  None. Stopping service|\
-                  Stopping the Model Service distribution client
-                  
-DISTRIBUTION_EVENT=\
-                  MDLSVC0003I|\
-                  Distribution event: {0}|\
-                  None. Processing distribution.|\
-                  A distribution event was received from the ASDC
-                  
-AAI_REST_REQUEST_SUCCESS=\
-                  MDLSVC0004I|\
-                  Sent {0} request to {1}.  Response: {2}|\
-                  None. Successfully sent REST request to AAI.|\
-                  The given request was sent to the specified endpoint.
-                  
-AAI_REST_REQUEST_UNSUCCESSFUL=\
-                  MDLSVC0005I|\
-                  Sent {0} request to {1}.  Response code: {2}, Response message: {3}|\
-                  REST request to AAI unsuccessful. Check response code, and message. |\
-                  The given request was unsuccessful.                                        
-
-DOWNLOAD_COMPLETE=\
-                  MDLSVC0006I|\
-                  Download of artifact {0} from ASDC complete.  Result: {1}|\
-                  None.|\
-                  An artifact was downloaded from the ASDC
-                  
-EVENT_PUBLISHED=\
-                  MDLSVC0007I|\
-                  Published {0} event for artifact {1}.  Result: {2}|\
-                  None.|\
-                  An event was published to the event bus
-                  
-# ERROR Level Logs                  
-ASDC_CONNECTION_ERROR=\
-                  MDLSVC2001E|\
-                  Unable to register with ASDC: {0}|\
-                  Check configuration.  Check network connection to ASDC|\
-                  During initialization, was not able to register with the configured ASDC instance
-                  
-DISTRIBUTION_EVENT_ERROR=\
-                  MDLSVC2002E|\
-                  Distribution event error: {0}|\
-                  Check configuration.  Check network connection to ASDC and UEB|\
-                  A failure occurred processing a distribution event
-                  
-AAI_REST_REQUEST_ERROR=\
-                  MDLSVC2003E|\
-                  Failed to send {0} request to {1}: {2}|\
-                  Check configuration.  Check network connection to AAI.|\
-                  A failure occurred attempting to send a request to the AAI
-                                  
-# DEBUG Level Logs                  
-INITIALIZING=\
-                  MDLSVC0001D|\
-                  init(): {0}|\
-                  None. Initializing service|\
-                  Debug information during model loader initialization
-                                  
-    
+# ============LICENSE_END=========================================================
+###
+
+#Resource key=Error Code|Message text|Resolution text |Description text
+#######
+#Newlines can be utilized to add some clarity ensuring continuing line
+#has at least one leading space
+#ResourceKey=\
+#             ERR0000E\
+#             Sample error msg txt\
+#             Sample resolution msg\
+#             Sample description txt
+#
+######
+#Error code classification category
+#000 Info/Debug
+#100 Permission errors
+#200 Availability errors/Timeouts
+#300 Data errors
+#400 Schema Interface type/validation errors
+#500 Business process errors
+#900 Unknown errors
+#
+########################################################################
+
+# INFO Level Logs
+LOADING_CONFIGURATION=\
+                  MDLSVC0001I|\
+                  Loading configuration |\
+                  None. Attempting to load configuration|\
+                  Attempting to load Model Loader Service configuration
+                  
+STOPPING_CLIENT=\
+                  MDLSVC0002I|\
+                  Stopping distribution client|\
+                  None. Stopping service|\
+                  Stopping the Model Service distribution client
+                  
+DISTRIBUTION_EVENT=\
+                  MDLSVC0003I|\
+                  Distribution event: {0}|\
+                  None. Processing distribution.|\
+                  A distribution event was received from the ASDC
+                  
+AAI_REST_REQUEST_SUCCESS=\
+                  MDLSVC0004I|\
+                  Sent {0} request to {1}.  Response: {2}|\
+                  None. Successfully sent REST request to AAI.|\
+                  The given request was sent to the specified endpoint.
+                  
+AAI_REST_REQUEST_UNSUCCESSFUL=\
+                  MDLSVC0005I|\
+                  Sent {0} request to {1}.  Response code: {2}, Response message: {3}|\
+                  REST request to AAI unsuccessful. Check response code, and message. |\
+                  The given request was unsuccessful.                                        
+
+DOWNLOAD_COMPLETE=\
+                  MDLSVC0006I|\
+                  Download of artifact {0} from ASDC complete.  Result: {1}|\
+                  None.|\
+                  An artifact was downloaded from the ASDC
+                  
+EVENT_PUBLISHED=\
+                  MDLSVC0007I|\
+                  Published {0} event for artifact {1}.  Result: {2}|\
+                  None.|\
+                  An event was published to the event bus
+                  
+# ERROR Level Logs                  
+ASDC_CONNECTION_ERROR=\
+                  MDLSVC2001E|\
+                  Unable to register with ASDC: {0}|\
+                  Check configuration.  Check network connection to ASDC|\
+                  During initialization, was not able to register with the configured ASDC instance
+                  
+DISTRIBUTION_EVENT_ERROR=\
+                  MDLSVC2002E|\
+                  Distribution event error: {0}|\
+                  Check configuration.  Check network connection to ASDC and UEB|\
+                  A failure occurred processing a distribution event
+                  
+AAI_REST_REQUEST_ERROR=\
+                  MDLSVC2003E|\
+                  Failed to send {0} request to {1}: {2}|\
+                  Check configuration.  Check network connection to AAI.|\
+                  A failure occurred attempting to send a request to the AAI
+
+ARTIFACT_PARSE_ERROR=\
+                  MDLSVC2004E|\
+                  Failed to parse artifact: {0}|\
+                  Check artifact. |\
+                  A failure occurred attempting to parse artifact from SDC
+                                                    
+# DEBUG Level Logs                  
+INITIALIZING=\
+                  MDLSVC0001D|\
+                  init(): {0}|\
+                  None. Initializing service|\
+                  Debug information during model loader initialization
+                                  
+    
diff --git a/src/main/resources/schema/aai_schema_v8.xsd b/src/main/resources/schema/aai_schema_v8.xsd
index 66bc3db..14f2610 100644
--- a/src/main/resources/schema/aai_schema_v8.xsd
+++ b/src/main/resources/schema/aai_schema_v8.xsd
@@ -1,2462 +1,2462 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!--
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
   ============LICENSE_START=======================================================
   MODEL LOADER SERVICE
   ================================================================================
   Copyright (C) 2017 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.
-  You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+  
+       http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
   limitations under the License.
-  ============LICENSE_END=========================================================
-  -->
-
-<xs:schema elementFormDefault="qualified" version="1.0"
-	targetNamespace="http://org.openecomp.aai.inventory/v8" xmlns:tns="http://org.openecomp.aai.inventory/v8"
-	xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
-	<xs:element name="inventory-item-data">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="property-name" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="property-value" type="xs:string"
-					minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="inventory-item">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="inventory-item-type" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="inventory-item-link" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:inventory-item-data" minOccurs="0"
-					maxOccurs="unbounded" />
-				<xs:element ref="tns:tagged-inventory-item-list"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="tagged-inventory-item-list">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:inventory-item" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="edge-tag-query-result">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:tagged-inventory-item-list"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="start-node-filter">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="property-name" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="property-value" type="xs:string"
-					minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="include-node-filter">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="include-node-type" type="xs:string"
-					minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="secondary-filter">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="property-name" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="filter-type" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="property-value" type="xs:string"
-					minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="edge-tag-query-request">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="edge-tag" type="xs:string" minOccurs="0" />
-				<xs:element name="result-detail" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="start-node-type" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:start-node-filter" minOccurs="0"
-					maxOccurs="unbounded" />
-				<xs:element ref="tns:include-node-filter" minOccurs="0"
-					maxOccurs="unbounded" />
-				<xs:element ref="tns:secondary-filter" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="result-data">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="resource-type" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-link" type="xs:string"
-					minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="search-results">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:result-data" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="relationship-data">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="relationship-key" type="xs:string" />
-				<xs:element name="relationship-value" type="xs:string" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="related-to-property">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="property-key" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="property-value" type="xs:string"
-					minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="relationship">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="related-to" type="xs:string" minOccurs="0" />
-				<xs:element name="related-link" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-data" minOccurs="0"
-					maxOccurs="unbounded" />
-				<xs:element ref="tns:related-to-property" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="relationship-list">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:relationship" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="oam-network">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="network-uuid" type="xs:string" />
-				<xs:element name="network-name" type="xs:string" />
-				<xs:element name="cvlan-tag" type="xs:unsignedInt" />
-				<xs:element name="ipv4-oam-gateway-address" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ipv4-oam-gateway-address-prefix-length"
-					type="xs:int" minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="oam-networks">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:oam-network" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="dvs-switch">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="switch-name" type="xs:string" />
-				<xs:element name="vcenter-url" type="xs:string" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="dvs-switches">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:dvs-switch" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="availability-zone">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="availability-zone-name" type="xs:string" />
-				<xs:element name="hypervisor-type" type="xs:string" />
-				<xs:element name="operational-state" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="az-and-dvs-switches">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:dvs-switches" minOccurs="0" />
-				<xs:element ref="tns:availability-zone" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="sdn-zone-response">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:oam-networks" minOccurs="0" />
-				<xs:element ref="tns:az-and-dvs-switches" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="search">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:edge-tag-query-result" minOccurs="0" />
-				<xs:element ref="tns:edge-tag-query-request" minOccurs="0" />
-				<xs:element ref="tns:search-results" minOccurs="0" />
-				<xs:element ref="tns:sdn-zone-response" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="update-node-key">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="key-name" type="xs:string" minOccurs="0" />
-				<xs:element name="key-value" type="xs:string" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="action-data">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="property-name" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="property-value" type="xs:string"
-					minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="action">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="action-type" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:action-data" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="update">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="update-node-type" type="xs:string" />
-				<xs:element ref="tns:update-node-key" minOccurs="0"
-					maxOccurs="unbounded" />
-				<xs:element name="update-node-uri" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:action" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="key-data">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="key-name" type="xs:string" minOccurs="0" />
-				<xs:element name="key-value" type="xs:string" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="notify">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="event-id" type="xs:string" />
-				<xs:element name="node-type" type="xs:string" minOccurs="0" />
-				<xs:element name="event-trigger" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:key-data" minOccurs="0" maxOccurs="unbounded" />
-				<xs:element name="selflink" type="xs:string" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="actions">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:update" minOccurs="0" />
-				<xs:element ref="tns:notify" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="ctag-pool">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="target-pe" type="xs:string" />
-				<xs:element name="availability-zone-name" type="xs:string" />
-				<xs:element name="ctag-pool-purpose" type="xs:string" />
-				<xs:element name="ctag-values" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="ctag-pools">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:ctag-pool" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="complex">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="physical-location-id" type="xs:string" />
-				<xs:element name="data-center-code" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="complex-name" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="identity-url" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="physical-location-type" type="xs:string" />
-				<xs:element name="street1" type="xs:string" />
-				<xs:element name="street2" type="xs:string" minOccurs="0" />
-				<xs:element name="city" type="xs:string" />
-				<xs:element name="state" type="xs:string" minOccurs="0" />
-				<xs:element name="postal-code" type="xs:string" />
-				<xs:element name="country" type="xs:string" />
-				<xs:element name="region" type="xs:string" />
-				<xs:element name="latitude" type="xs:string" minOccurs="0" />
-				<xs:element name="longitude" type="xs:string" minOccurs="0" />
-				<xs:element name="elevation" type="xs:string" minOccurs="0" />
-				<xs:element name="lata" type="xs:string" minOccurs="0" />
-				<xs:element ref="tns:ctag-pools" minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="complexes">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:complex" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="volume-group">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="volume-group-id" type="xs:string" />
-				<xs:element name="volume-group-name" type="xs:string" />
-				<xs:element name="heat-stack-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="vnf-type" type="xs:string" />
-				<xs:element name="orchestration-status" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="volume-groups">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:volume-group" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="volume">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="volume-id" type="xs:string" />
-				<xs:element name="volume-selflink" type="xs:string" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="volumes">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:volume" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="l3-interface-ipv4-address-list">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="l3-interface-ipv4-address" type="xs:string" />
-				<xs:element name="l3-interface-ipv4-prefix-length" type="xs:unsignedInt"
-					minOccurs="0" />
-				<xs:element name="vlan-id-inner" type="xs:unsignedInt"
-					minOccurs="0" />
-				<xs:element name="vlan-id-outer" type="xs:unsignedInt"
-					minOccurs="0" />
-				<xs:element name="is-floating" type="xs:boolean"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="neutron-network-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="neutron-subnet-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="l3-interface-ipv6-address-list">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="l3-interface-ipv6-address" type="xs:string" />
-				<xs:element name="l3-interface-ipv6-prefix-length" type="xs:unsignedInt"
-					minOccurs="0" />
-				<xs:element name="vlan-id-inner" type="xs:unsignedInt"
-					minOccurs="0" />
-				<xs:element name="vlan-id-outer" type="xs:unsignedInt"
-					minOccurs="0" />
-				<xs:element name="is-floating" type="xs:boolean"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="neutron-network-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="neutron-subnet-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="vlan">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="vlan-interface" type="xs:string" />
-				<xs:element name="vlan-id-inner" type="xs:unsignedInt"
-					minOccurs="0" />
-				<xs:element name="vlan-id-outer" type="xs:unsignedInt"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="speed-value" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="speed-units" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="vlan-description" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="backdoor-connection" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="vpn-id" type="xs:string" minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-				<xs:element ref="tns:l3-interface-ipv4-address-list"
-					minOccurs="0" maxOccurs="unbounded" />
-				<xs:element ref="tns:l3-interface-ipv6-address-list"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="vlans">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:vlan" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="sriov-vf">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="pci-id" type="xs:string" />
-				<xs:element name="vf-vlan-filter" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="vf-mac-filter" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="vf-vlan-strip" type="xs:boolean"
-					minOccurs="0" />
-				<xs:element name="vf-vlan-anti-spoof-check" type="xs:boolean"
-					minOccurs="0" />
-				<xs:element name="vf-mac-anti-spoof-check" type="xs:boolean"
-					minOccurs="0" />
-				<xs:element name="vf-mirrors" type="xs:string" minOccurs="0" />
-				<xs:element name="vf-broadcast-allow" type="xs:boolean"
-					minOccurs="0" />
-				<xs:element name="vf-unknown-multicast-allow" type="xs:boolean"
-					minOccurs="0" />
-				<xs:element name="vf-unknown-unicast-allow" type="xs:boolean"
-					minOccurs="0" />
-				<xs:element name="vf-insert-stag" type="xs:boolean"
-					minOccurs="0" />
-				<xs:element name="vf-link-status" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="neutron-network-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="sriov-vfs">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:sriov-vf" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="l-interface">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="interface-name" type="xs:string" />
-				<xs:element name="interface-role" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="v6-wan-link-ip" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="selflink" type="xs:string" minOccurs="0" />
-				<xs:element name="interface-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="macaddr" type="xs:string" minOccurs="0" />
-				<xs:element name="network-name" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="management-option" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:vlans" minOccurs="0" />
-				<xs:element ref="tns:sriov-vfs" minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-				<xs:element ref="tns:l3-interface-ipv4-address-list"
-					minOccurs="0" maxOccurs="unbounded" />
-				<xs:element ref="tns:l3-interface-ipv6-address-list"
-					minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="l-interfaces">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:l-interface" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="vserver">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="vserver-id" type="xs:string" />
-				<xs:element name="vserver-name" type="xs:string" />
-				<xs:element name="vserver-name2" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="prov-status" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="vserver-selflink" type="xs:string" />
-				<xs:element name="in-maint" type="xs:boolean" />
-				<xs:element name="is-closed-loop-disabled" type="xs:boolean" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:volumes" minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-				<xs:element ref="tns:l-interfaces" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="vservers">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:vserver" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="tenant">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="tenant-id" type="xs:string" />
-				<xs:element name="tenant-name" type="xs:string" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:vservers" minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="tenants">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:tenant" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="flavor">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="flavor-id" type="xs:string" />
-				<xs:element name="flavor-name" type="xs:string" />
-				<xs:element name="flavor-vcpus" type="xs:int" minOccurs="0" />
-				<xs:element name="flavor-ram" type="xs:int" minOccurs="0" />
-				<xs:element name="flavor-disk" type="xs:int" minOccurs="0" />
-				<xs:element name="flavor-ephemeral" type="xs:int"
-					minOccurs="0" />
-				<xs:element name="flavor-swap" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="flavor-is-public" type="xs:boolean"
-					minOccurs="0" />
-				<xs:element name="flavor-selflink" type="xs:string" />
-				<xs:element name="flavor-disabled" type="xs:boolean"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="flavors">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:flavor" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="group-assignment">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="group-id" type="xs:string" />
-				<xs:element name="group-type" type="xs:string" />
-				<xs:element name="group-name" type="xs:string" />
-				<xs:element name="group-description" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="group-assignments">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:group-assignment" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="snapshot">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="snapshot-id" type="xs:string" />
-				<xs:element name="snapshot-name" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="snapshot-architecture" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="snapshot-os-distro" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="snapshot-os-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="application" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="application-vendor" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="application-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="snapshot-selflink" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="prev-snapshot-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="snapshots">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:snapshot" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="metadatum">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="metaname" type="xs:string" />
-				<xs:element name="metaval" type="xs:string" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="metadata">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:metadatum" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="image">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="image-id" type="xs:string" />
-				<xs:element name="image-name" type="xs:string" />
-				<xs:element name="image-architecture" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="image-os-distro" type="xs:string" />
-				<xs:element name="image-os-version" type="xs:string" />
-				<xs:element name="application" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="application-vendor" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="application-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="image-selflink" type="xs:string" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-				<xs:element ref="tns:metadata" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="images">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:image" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="availability-zones">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:availability-zone" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="cloud-region">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="cloud-owner" type="xs:string" />
-				<xs:element name="cloud-region-id" type="xs:string" />
-				<xs:element name="cloud-type" type="xs:string" minOccurs="0" />
-				<xs:element name="owner-defined-type" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="cloud-region-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="identity-url" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="cloud-zone" type="xs:string" minOccurs="0" />
-				<xs:element name="complex-name" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:volume-groups" minOccurs="0" />
-				<xs:element ref="tns:tenants" minOccurs="0" />
-				<xs:element ref="tns:flavors" minOccurs="0" />
-				<xs:element ref="tns:group-assignments" minOccurs="0" />
-				<xs:element ref="tns:snapshots" minOccurs="0" />
-				<xs:element ref="tns:images" minOccurs="0" />
-				<xs:element ref="tns:dvs-switches" minOccurs="0" />
-				<xs:element ref="tns:oam-networks" minOccurs="0" />
-				<xs:element ref="tns:availability-zones" minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="cloud-regions">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:cloud-region" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="network-profile">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="nm-profile-name" type="xs:string" />
-				<xs:element name="community-string" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="network-profiles">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:network-profile" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="p-interface">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="interface-name" type="xs:string" />
-				<xs:element name="speed-value" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="speed-units" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="port-description" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="equipment-identifier" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="interface-role" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="interface-type" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-				<xs:element ref="tns:l-interfaces" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="p-interfaces">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:p-interface" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="lag-interface">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="interface-name" type="xs:string" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="speed-value" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="speed-units" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-				<xs:element ref="tns:l-interfaces" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="lag-interfaces">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:lag-interface" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="pserver">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="hostname" type="xs:string" />
-				<xs:element name="ptnii-equip-name" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="number-of-cpus" type="xs:int"
-					minOccurs="0" />
-				<xs:element name="disk-in-gigabytes" type="xs:int"
-					minOccurs="0" />
-				<xs:element name="ram-in-megabytes" type="xs:int"
-					minOccurs="0" />
-				<xs:element name="equip-type" type="xs:string" minOccurs="0" />
-				<xs:element name="equip-vendor" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="equip-model" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="fqdn" type="xs:string" minOccurs="0" />
-				<xs:element name="pserver-selflink" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ipv4-oam-address" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="serial-number" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="pserver-id" type="xs:string" minOccurs="0" />
-				<xs:element name="internet-topology" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="in-maint" type="xs:boolean" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="pserver-name2" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="purpose" type="xs:string" minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-				<xs:element ref="tns:p-interfaces" minOccurs="0" />
-				<xs:element ref="tns:lag-interfaces" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="pservers">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:pserver" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="virtual-data-center">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="vdc-id" type="xs:string" />
-				<xs:element name="vdc-name" type="xs:string" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="virtual-data-centers">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:virtual-data-center" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="cloud-infrastructure">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:complexes" minOccurs="0" />
-				<xs:element ref="tns:cloud-regions" minOccurs="0" />
-				<xs:element ref="tns:network-profiles" minOccurs="0" />
-				<xs:element ref="tns:pservers" minOccurs="0" />
-				<xs:element ref="tns:virtual-data-centers" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="license-key-resource">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="uuid" type="xs:string" />
-				<xs:element name="assignment-type" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="assignment-status" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="assignment-group-uuid" type="xs:string" />
-				<xs:element name="assignment-date" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="name" type="xs:string" minOccurs="0" />
-				<xs:element name="model-uuid" type="xs:string" minOccurs="0" />
-				<xs:element name="model-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="license-key" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="license-key-file-url" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="supplier-release-list" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="license-key-resources">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:license-key-resource" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="license-management">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:license-key-resources" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="connector">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="resource-instance-id" type="xs:string" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="persona-model-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="persona-model-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="widget-model-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="widget-model-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-				<xs:element ref="tns:metadata" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="connectors">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:connector" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="service-instance">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="service-instance-id" type="xs:string" />
-				<xs:element name="service-instance-name" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="persona-model-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="persona-model-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="widget-model-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="widget-model-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="bandwidth-total" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="bandwidth-up-wan1" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="bandwidth-down-wan1" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="bandwidth-up-wan2" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="bandwidth-down-wan2" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="vhn-portal-url" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="operational-status" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="service-instance-location-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-				<xs:element ref="tns:metadata" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="service-instances">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:service-instance" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="service-subscription">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="service-type" type="xs:string" />
-				<xs:element name="temp-ub-sub-account-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:service-instances" minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="service-subscriptions">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:service-subscription" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="customer">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="global-customer-id" type="xs:string" />
-				<xs:element name="subscriber-name" type="xs:string" />
-				<xs:element name="subscriber-type" type="xs:string" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:service-subscriptions" minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="customers">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:customer" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="business">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:connectors" minOccurs="0" />
-				<xs:element ref="tns:customers" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="vnf-image">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="uuid" type="xs:string" />
-				<xs:element name="application" type="xs:string" />
-				<xs:element name="application-vendor" type="xs:string" />
-				<xs:element name="application-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="selflink" type="xs:string" minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="vnf-images">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:vnf-image" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="service">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="service-id" type="xs:string" />
-				<xs:element name="service-description" type="xs:string" />
-				<xs:element name="service-selflink" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="service-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="services">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:service" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="service-capability">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="service-type" type="xs:string" />
-				<xs:element name="vnf-type" type="xs:string" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="service-capabilities">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:service-capability" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="element-choice-set">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="element-choice-set-uuid" type="xs:string" />
-				<xs:element name="element-choice-set-name" type="xs:string" />
-				<xs:element name="cardinality" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:model-elements" minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="element-choice-sets">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:element-choice-set" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="constrained-element-set">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="constrained-element-set-uuid" type="xs:string" />
-				<xs:element name="constraint-type" type="xs:string" />
-				<xs:element name="check-type" type="xs:string" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:element-choice-sets" minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="constrained-element-sets">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:constrained-element-set" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="model-constraint">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="model-constraint-uuid" type="xs:string" />
-				<xs:element name="constrained-element-set-uuid-to-replace"
-					type="xs:string" />
-				<xs:element ref="tns:constrained-element-sets" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="model-constraints">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:model-constraint" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="model-element">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="model-element-uuid" type="xs:string" />
-				<xs:element name="new-data-del-flag" type="xs:string" />
-				<xs:element name="cardinality" type="xs:string" />
-				<xs:element name="linkage-points" minOccurs="0">
-					<xs:complexType>
-						<xs:sequence>
-							<xs:element name="linkage-point" type="xs:string"
-								minOccurs="0" maxOccurs="unbounded" />
-						</xs:sequence>
-					</xs:complexType>
-				</xs:element>
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:model-elements" minOccurs="0" />
-				<xs:element ref="tns:model-constraints" minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="model-elements">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:model-element" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="model">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="model-name-version-id" type="xs:string" />
-				<xs:element name="model-type" type="xs:string" />
-				<xs:element name="model-name" type="xs:string" />
-				<xs:element name="model-id" type="xs:string" />
-				<xs:element name="model-version" type="xs:string" />
-				<xs:element name="model-description" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:model-elements" minOccurs="0" />
-				<xs:element ref="tns:metadata" minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="models">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:model" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="related-lookup">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="related-lookup-uuid" type="xs:string" />
-				<xs:element name="source-node-type" type="xs:string" />
-				<xs:element name="source-node-property" type="xs:string" />
-				<xs:element name="target-node-type" type="xs:string" />
-				<xs:element name="target-node-property" type="xs:string" />
-				<xs:element name="property-collect-list" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="related-lookups">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:related-lookup" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="property-constraint">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="property-constraint-uuid" type="xs:string" />
-				<xs:element name="constraint-type" type="xs:string" />
-				<xs:element name="property-name" type="xs:string" />
-				<xs:element name="property-value" type="xs:string" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="property-constraints">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:property-constraint" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="named-query-element">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="named-query-element-uuid" type="xs:string" />
-				<xs:element name="property-collect-list" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="property-limit-desc" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="do-not-output" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:named-query-elements" minOccurs="0" />
-				<xs:element ref="tns:related-lookups" minOccurs="0" />
-				<xs:element ref="tns:property-constraints" minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="named-query-elements">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:named-query-element" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="named-query">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="named-query-uuid" type="xs:string" />
-				<xs:element name="named-query-name" type="xs:string" />
-				<xs:element name="named-query-version" type="xs:string" />
-				<xs:element name="required-input-params" minOccurs="0">
-					<xs:complexType>
-						<xs:sequence>
-							<xs:element name="required-input-param" type="xs:string"
-								minOccurs="0" maxOccurs="unbounded" />
-						</xs:sequence>
-					</xs:complexType>
-				</xs:element>
-				<xs:element name="description" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:named-query-elements" minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="named-queries">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:named-query" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="service-design-and-creation">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:vnf-images" minOccurs="0" />
-				<xs:element ref="tns:services" minOccurs="0" />
-				<xs:element ref="tns:service-capabilities" minOccurs="0" />
-				<xs:element ref="tns:models" minOccurs="0" />
-				<xs:element ref="tns:named-queries" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="logical-link">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="link-name" type="xs:string" />
-				<xs:element name="link-type" type="xs:string" />
-				<xs:element name="speed-value" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="speed-units" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ip-version" type="xs:string" minOccurs="0" />
-				<xs:element name="routing-protocol" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="persona-model-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="persona-model-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="widget-model-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="widget-model-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="operational-status" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="link-role" type="xs:string" minOccurs="0" />
-				<xs:element name="link-name2" type="xs:string" minOccurs="0" />
-				<xs:element name="link-id" type="xs:string" minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="logical-links">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:logical-link" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="class-of-service">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="cos" type="xs:string" />
-				<xs:element name="probe-id" type="xs:string" minOccurs="0" />
-				<xs:element name="probe-type" type="xs:string" minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="classes-of-service">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:class-of-service" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="site-pair">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="site-pair-id" type="xs:string" />
-				<xs:element name="source-ip" type="xs:string" minOccurs="0" />
-				<xs:element name="destination-ip" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ip-version" type="xs:string" minOccurs="0" />
-				<xs:element name="destination-hostname" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="destination-equip-type" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:classes-of-service" minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="site-pairs">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:site-pair" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="routing-instance">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="routing-instance-id" type="xs:string" />
-				<xs:element name="rpm-owner" type="xs:string" minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:site-pairs" minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="routing-instances">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:routing-instance" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="site-pair-set">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="site-pair-set-id" type="xs:string" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:routing-instances" minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="site-pair-sets">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:site-pair-set" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="vpn-binding">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="vpn-id" type="xs:string" />
-				<xs:element name="vpn-name" type="xs:string" />
-				<xs:element name="global-route-target" type="xs:string" />
-				<xs:element name="vpn-platform" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="vpn-bindings">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:vpn-binding" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="vpls-pe">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="equipment-name" type="xs:string" />
-				<xs:element name="prov-status" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ipv4-oam-address" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="equipment-role" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="vlan-id-outer" type="xs:unsignedInt"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-				<xs:element ref="tns:p-interfaces" minOccurs="0" />
-				<xs:element ref="tns:lag-interfaces" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="vpls-pes">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:vpls-pe" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="multicast-configuration">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="multicast-configuration-id" type="xs:string" />
-				<xs:element name="multicast-protocol" type="xs:string" />
-				<xs:element name="rp-type" type="xs:string" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="multicast-configurations">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:multicast-configuration" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="cvlan-tag-entry">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="cvlan-tag" type="xs:unsignedInt" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="cvlan-tags">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:cvlan-tag-entry" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="port-group">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="interface-id" type="xs:string" />
-				<xs:element name="neutron-network-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="neutron-network-name" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="interface-role" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="port-group-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="port-group-name" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="switch-name" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="orchestration-status" type="xs:string" />
-				<xs:element name="heat-stack-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="mso-catalog-key" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:cvlan-tags" minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="port-groups">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:port-group" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="vce">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="vnf-id" type="xs:string" />
-				<xs:element name="vnf-name" type="xs:string" />
-				<xs:element name="vnf-name2" type="xs:string" minOccurs="0" />
-				<xs:element name="vnf-type" type="xs:string" />
-				<xs:element name="service-id" type="xs:string" minOccurs="0" />
-				<xs:element name="regional-resource-zone" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="prov-status" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="operational-state" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="license-key" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="equipment-role" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="orchestration-status" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="heat-stack-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="mso-catalog-key" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="vpe-id" type="xs:string" minOccurs="0" />
-				<xs:element name="v6-vce-wan-address" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ipv4-oam-address" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ipv4-loopback0-address" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:port-groups" minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="vces">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:vce" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="vpe">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="vnf-id" type="xs:string" />
-				<xs:element name="vnf-name" type="xs:string" />
-				<xs:element name="vnf-name2" type="xs:string" minOccurs="0" />
-				<xs:element name="vnf-type" type="xs:string" />
-				<xs:element name="service-id" type="xs:string" minOccurs="0" />
-				<xs:element name="regional-resource-zone" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="prov-status" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="operational-state" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="license-key" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="equipment-role" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="orchestration-status" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="heat-stack-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="mso-catalog-key" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ipv4-oam-address" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ipv4-oam-gateway-address-prefix-length"
-					type="xs:int" minOccurs="0" />
-				<xs:element name="ipv4-oam-gateway-address" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="v4-loopback0-ip-address" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="vlan-id-outer" type="xs:unsignedInt"
-					minOccurs="0" />
-				<xs:element name="as-number" type="xs:string" minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="summary-status" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="encrypted-access-flag" type="xs:boolean"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-				<xs:element ref="tns:l-interfaces" minOccurs="0" />
-				<xs:element ref="tns:lag-interfaces" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="vpes">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:vpe" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="vnfc">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="vnfc-name" type="xs:string" />
-				<xs:element name="vnfc-function-code" type="xs:string" />
-				<xs:element name="vnfc-type" type="xs:string" />
-				<xs:element name="prov-status" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="orchestration-status" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ipaddress-v4-oam-vip" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="in-maint" type="xs:boolean" />
-				<xs:element name="is-closed-loop-disabled" type="xs:boolean" />
-				<xs:element name="group-notation" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="vnfcs">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:vnfc" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="subnet">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="subnet-id" type="xs:string" />
-				<xs:element name="subnet-name" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="neutron-subnet-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="gateway-address" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="network-start-address" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="cidr-mask" type="xs:string" minOccurs="0" />
-				<xs:element name="ip-version" type="xs:string" minOccurs="0" />
-				<xs:element name="orchestration-status" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="dhcp-enabled" type="xs:boolean" />
-				<xs:element name="dhcp-start" type="xs:string" minOccurs="0" />
-				<xs:element name="dhcp-end" type="xs:string" minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="subnets">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:subnet" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="ctag-assignment">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="vlan-id-inner" type="xs:unsignedInt" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="ctag-assignments">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:ctag-assignment" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="segmentation-assignment">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="segmentation-id" type="xs:string" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="segmentation-assignments">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:segmentation-assignment" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="l3-network">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="network-id" type="xs:string" />
-				<xs:element name="network-name" type="xs:string" />
-				<xs:element name="network-type" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="network-role" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="network-technology" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="neutron-network-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="is-bound-to-vpn" type="xs:boolean" />
-				<xs:element name="service-id" type="xs:string" minOccurs="0" />
-				<xs:element name="network-role-instance" type="xs:unsignedInt"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="orchestration-status" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="heat-stack-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="mso-catalog-key" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="contrail-network-fqdn" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="persona-model-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="persona-model-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="widget-model-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="widget-model-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="physical-network-name" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="is-provider-network" type="xs:boolean" />
-				<xs:element name="is-shared-network" type="xs:boolean" />
-				<xs:element name="is-external-network" type="xs:boolean" />
-				<xs:element ref="tns:subnets" minOccurs="0" />
-				<xs:element ref="tns:ctag-assignments" minOccurs="0" />
-				<xs:element ref="tns:segmentation-assignments" minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="l3-networks">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:l3-network" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="network-policy">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="network-policy-id" type="xs:string" />
-				<xs:element name="network-policy-fqdn" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="heat-stack-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="network-policies">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:network-policy" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="vf-module">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="vf-module-id" type="xs:string" />
-				<xs:element name="vf-module-name" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="heat-stack-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="orchestration-status" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="is-base-vf-module" type="xs:boolean" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="persona-model-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="persona-model-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="widget-model-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="widget-model-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="contrail-service-instance-fqdn" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="vf-modules">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:vf-module" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="generic-vnf">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="vnf-id" type="xs:string" />
-				<xs:element name="vnf-name" type="xs:string" />
-				<xs:element name="vnf-name2" type="xs:string" minOccurs="0" />
-				<xs:element name="vnf-type" type="xs:string" />
-				<xs:element name="service-id" type="xs:string" minOccurs="0" />
-				<xs:element name="regional-resource-zone" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="prov-status" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="operational-state" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="license-key" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="equipment-role" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="orchestration-status" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="heat-stack-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="mso-catalog-key" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="management-option" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ipv4-oam-address" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ipv4-loopback0-address" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="nm-lan-v6-address" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="management-v6-address" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="vcpu" type="xs:unsignedInt" minOccurs="0" />
-				<xs:element name="vcpu-units" type="xs:string" minOccurs="0" />
-				<xs:element name="vmemory" type="xs:unsignedInt"
-					minOccurs="0" />
-				<xs:element name="vmemory-units" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="vdisk" type="xs:unsignedInt" minOccurs="0" />
-				<xs:element name="vdisk-units" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="in-maint" type="xs:boolean" />
-				<xs:element name="is-closed-loop-disabled" type="xs:boolean" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="summary-status" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="encrypted-access-flag" type="xs:boolean"
-					minOccurs="0" />
-				<xs:element name="entitlement-assignment-group-uuid"
-					type="xs:string" minOccurs="0" />
-				<xs:element name="entitlement-resource-uuid" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="license-assignment-group-uuid" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="license-key-uuid" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="persona-model-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="persona-model-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="widget-model-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="widget-model-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="as-number" type="xs:string" minOccurs="0" />
-				<xs:element name="regional-resource-subzone" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-				<xs:element ref="tns:l-interfaces" minOccurs="0" />
-				<xs:element ref="tns:lag-interfaces" minOccurs="0" />
-				<xs:element ref="tns:vf-modules" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="generic-vnfs">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:generic-vnf" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="lag-link">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="link-name" type="xs:string" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="lag-links">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:lag-link" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="newvce">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="vnf-id2" type="xs:string" />
-				<xs:element name="vnf-name" type="xs:string" />
-				<xs:element name="vnf-name2" type="xs:string" minOccurs="0" />
-				<xs:element name="vnf-type" type="xs:string" />
-				<xs:element name="prov-status" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="operational-state" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="license-key" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ipv4-oam-address" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="equipment-role" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ipv4-loopback0-address" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="orchestration-status" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="heat-stack-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="mso-catalog-key" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-				<xs:element ref="tns:l-interfaces" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="newvces">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:newvce" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="pnf">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="pnf-name" type="xs:string" />
-				<xs:element name="pnf-name2" type="xs:string" minOccurs="0" />
-				<xs:element name="pnf-name2-source" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="pnf-id" type="xs:string" minOccurs="0" />
-				<xs:element name="equip-type" type="xs:string" minOccurs="0" />
-				<xs:element name="equip-vendor" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="equip-model" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="management-option" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ipaddress-v4-oam" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="sw-version" type="xs:string" minOccurs="0" />
-				<xs:element name="orchestration-status" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="in-maint" type="xs:boolean" />
-				<xs:element name="frame-id" type="xs:string" minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-				<xs:element ref="tns:p-interfaces" minOccurs="0" />
-				<xs:element ref="tns:lag-interfaces" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="pnfs">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:pnf" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="physical-link">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="link-name" type="xs:string" />
-				<xs:element name="speed-value" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="speed-units" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="circuit-id" type="xs:string" minOccurs="0" />
-				<xs:element name="dual-mode" type="xs:string" minOccurs="0" />
-				<xs:element name="management-option" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="service-provider-name" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="physical-links">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:physical-link" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="vig-server">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="vig-address-type" type="xs:string" />
-				<xs:element name="ipaddress-v4-vig" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" />
-				<xs:element name="ipaddress-v6-vig" type="xs:string"
-					minOccurs="0" maxOccurs="unbounded" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="vig-servers">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:vig-server" minOccurs="0" maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="ipsec-configuration">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="ipsec-configuration-id" type="xs:string" />
-				<xs:element name="requested-vig-address-type" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="requested-encryption-strength" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="requested-dmz-type" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="shared-dmz-network-address" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="requested-customer-name" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ike-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ikev1-authentication" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ikev1-encryption" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ikev1-dh-group" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ikev1-am-group-id" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ikev1-am-password" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ikev1-sa-lifetime" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ipsec-authentication" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ipsec-encryption" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ipsec-sa-lifetime" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="ipsec-pfs" type="xs:string" minOccurs="0" />
-				<xs:element name="xauth-userid" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="xauth-user-password" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="dpd-interval" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="dpd-frequency" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-				<xs:element ref="tns:vig-servers" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="ipsec-configurations">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:ipsec-configuration" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="route-table-reference">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="route-table-reference-id" type="xs:string" />
-				<xs:element name="route-table-reference-fqdn" type="xs:string" />
-				<xs:element name="resource-version" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:relationship-list" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="route-table-references">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:route-table-reference" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="network">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:logical-links" minOccurs="0" />
-				<xs:element ref="tns:site-pair-sets" minOccurs="0" />
-				<xs:element ref="tns:vpn-bindings" minOccurs="0" />
-				<xs:element ref="tns:vpls-pes" minOccurs="0" />
-				<xs:element ref="tns:multicast-configurations" minOccurs="0" />
-				<xs:element ref="tns:vces" minOccurs="0" />
-				<xs:element ref="tns:vpes" minOccurs="0" />
-				<xs:element ref="tns:vnfcs" minOccurs="0" />
-				<xs:element ref="tns:l3-networks" minOccurs="0" />
-				<xs:element ref="tns:network-policies" minOccurs="0" />
-				<xs:element ref="tns:generic-vnfs" minOccurs="0" />
-				<xs:element ref="tns:lag-links" minOccurs="0" />
-				<xs:element ref="tns:newvces" minOccurs="0" />
-				<xs:element ref="tns:pnfs" minOccurs="0" />
-				<xs:element ref="tns:physical-links" minOccurs="0" />
-				<xs:element ref="tns:ipsec-configurations" minOccurs="0" />
-				<xs:element ref="tns:route-table-references" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="reserved-prop-names">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="last-mod-source-of-truth" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="aai-node-type" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="aai-created-ts" type="xs:unsignedInt"
-					minOccurs="0" />
-				<xs:element name="aai-unique-key" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="aai-last-mod-ts" type="xs:unsignedInt"
-					minOccurs="0" />
-				<xs:element name="source-of-truth" type="xs:string"
-					minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="edge-prop-names">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="edgeLabel" type="xs:string" minOccurs="0" />
-				<xs:element name="direction" type="xs:string" minOccurs="0" />
-				<xs:element name="multiplicityRule" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="isParent" type="xs:boolean" minOccurs="0" />
-				<xs:element name="usesResource" type="xs:boolean"
-					minOccurs="0" />
-				<xs:element name="hasDelTarget" type="xs:boolean"
-					minOccurs="0" />
-				<xs:element name="SVC-INFRA" type="xs:string" minOccurs="0" />
-				<xs:element name="SVC-INFRA-REV" type="xs:string"
-					minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="aai-internal">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:reserved-prop-names" minOccurs="0"
-					maxOccurs="unbounded" />
-				<xs:element ref="tns:edge-prop-names" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="inventory">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:search" minOccurs="0" />
-				<xs:element ref="tns:actions" minOccurs="0" />
-				<xs:element ref="tns:cloud-infrastructure" minOccurs="0" />
-				<xs:element ref="tns:license-management" minOccurs="0" />
-				<xs:element ref="tns:business" minOccurs="0" />
-				<xs:element ref="tns:service-design-and-creation"
-					minOccurs="0" />
-				<xs:element ref="tns:network" minOccurs="0" />
-				<xs:element ref="tns:aai-internal" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="notification-event-header">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="id" type="xs:string" minOccurs="0" />
-				<xs:element name="timestamp" type="xs:string" minOccurs="0" />
-				<xs:element name="source-name" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="domain" type="xs:string" minOccurs="0" />
-				<xs:element name="sequence-number" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="severity" type="xs:string" minOccurs="0" />
-				<xs:element name="event-type" type="xs:string" minOccurs="0" />
-				<xs:element name="version" type="xs:string" minOccurs="0" />
-				<xs:element name="action" type="xs:string" minOccurs="0" />
-				<xs:element name="entity-type" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="top-entity-type" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="entity-link" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="status" type="xs:string" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="notification-event">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="cambria.partition" type="xs:string"
-					minOccurs="0" />
-				<xs:element ref="tns:notification-event-header"
-					minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="query-parameters">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:named-query" minOccurs="0" />
-				<xs:element ref="tns:model" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="instance-filter">
-		<xs:complexType>
-			<xs:sequence />
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="instance-filters">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:instance-filter" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="model-and-named-query-search">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:query-parameters" minOccurs="0" />
-				<xs:element ref="tns:instance-filters" minOccurs="0" />
-				<xs:element name="top-node-type" type="xs:string"
-					minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="properties">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="property-name" type="xs:string"
-					minOccurs="0" />
-				<xs:element name="property-value" type="xs:string"
-					minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="extra-properties">
-		<xs:complexType>
-			<xs:sequence />
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="inventory-response-item">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="model-name" type="xs:string" minOccurs="0" />
-				<xs:element ref="tns:extra-properties" minOccurs="0" />
-				<xs:element ref="tns:inventory-response-items" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="inventory-response-items">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:inventory-response-item" minOccurs="0"
-					maxOccurs="unbounded" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="response-list">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element ref="tns:inventory-response-items" minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="extra-property">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="property-name" type="xs:string"
-					minOccurs="0" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-	<xs:element name="vnf">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="vnf-id" type="xs:string" />
-			</xs:sequence>
-		</xs:complexType>
-	</xs:element>
-</xs:schema>
+  ============LICENSE_END=========================================================
+  -->
+
+<xs:schema elementFormDefault="qualified" version="1.0"
+	targetNamespace="http://org.openecomp.aai.inventory/v8" xmlns:tns="http://org.openecomp.aai.inventory/v8"
+	xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+	<xs:element name="inventory-item-data">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="property-name" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="property-value" type="xs:string"
+					minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="inventory-item">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="inventory-item-type" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="inventory-item-link" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:inventory-item-data" minOccurs="0"
+					maxOccurs="unbounded" />
+				<xs:element ref="tns:tagged-inventory-item-list"
+					minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="tagged-inventory-item-list">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:inventory-item" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="edge-tag-query-result">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:tagged-inventory-item-list"
+					minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="start-node-filter">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="property-name" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="property-value" type="xs:string"
+					minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="include-node-filter">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="include-node-type" type="xs:string"
+					minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="secondary-filter">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="property-name" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="filter-type" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="property-value" type="xs:string"
+					minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="edge-tag-query-request">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="edge-tag" type="xs:string" minOccurs="0" />
+				<xs:element name="result-detail" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="start-node-type" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:start-node-filter" minOccurs="0"
+					maxOccurs="unbounded" />
+				<xs:element ref="tns:include-node-filter" minOccurs="0"
+					maxOccurs="unbounded" />
+				<xs:element ref="tns:secondary-filter" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="result-data">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="resource-type" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-link" type="xs:string"
+					minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="search-results">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:result-data" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="relationship-data">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="relationship-key" type="xs:string" />
+				<xs:element name="relationship-value" type="xs:string" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="related-to-property">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="property-key" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="property-value" type="xs:string"
+					minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="relationship">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="related-to" type="xs:string" minOccurs="0" />
+				<xs:element name="related-link" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-data" minOccurs="0"
+					maxOccurs="unbounded" />
+				<xs:element ref="tns:related-to-property" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="relationship-list">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:relationship" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="oam-network">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="network-uuid" type="xs:string" />
+				<xs:element name="network-name" type="xs:string" />
+				<xs:element name="cvlan-tag" type="xs:unsignedInt" />
+				<xs:element name="ipv4-oam-gateway-address" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ipv4-oam-gateway-address-prefix-length"
+					type="xs:int" minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="oam-networks">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:oam-network" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="dvs-switch">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="switch-name" type="xs:string" />
+				<xs:element name="vcenter-url" type="xs:string" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="dvs-switches">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:dvs-switch" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="availability-zone">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="availability-zone-name" type="xs:string" />
+				<xs:element name="hypervisor-type" type="xs:string" />
+				<xs:element name="operational-state" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="az-and-dvs-switches">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:dvs-switches" minOccurs="0" />
+				<xs:element ref="tns:availability-zone" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="sdn-zone-response">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:oam-networks" minOccurs="0" />
+				<xs:element ref="tns:az-and-dvs-switches" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="search">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:edge-tag-query-result" minOccurs="0" />
+				<xs:element ref="tns:edge-tag-query-request" minOccurs="0" />
+				<xs:element ref="tns:search-results" minOccurs="0" />
+				<xs:element ref="tns:sdn-zone-response" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="update-node-key">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="key-name" type="xs:string" minOccurs="0" />
+				<xs:element name="key-value" type="xs:string" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="action-data">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="property-name" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="property-value" type="xs:string"
+					minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="action">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="action-type" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:action-data" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="update">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="update-node-type" type="xs:string" />
+				<xs:element ref="tns:update-node-key" minOccurs="0"
+					maxOccurs="unbounded" />
+				<xs:element name="update-node-uri" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:action" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="key-data">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="key-name" type="xs:string" minOccurs="0" />
+				<xs:element name="key-value" type="xs:string" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="notify">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="event-id" type="xs:string" />
+				<xs:element name="node-type" type="xs:string" minOccurs="0" />
+				<xs:element name="event-trigger" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:key-data" minOccurs="0" maxOccurs="unbounded" />
+				<xs:element name="selflink" type="xs:string" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="actions">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:update" minOccurs="0" />
+				<xs:element ref="tns:notify" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="ctag-pool">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="target-pe" type="xs:string" />
+				<xs:element name="availability-zone-name" type="xs:string" />
+				<xs:element name="ctag-pool-purpose" type="xs:string" />
+				<xs:element name="ctag-values" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="ctag-pools">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:ctag-pool" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="complex">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="physical-location-id" type="xs:string" />
+				<xs:element name="data-center-code" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="complex-name" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="identity-url" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="physical-location-type" type="xs:string" />
+				<xs:element name="street1" type="xs:string" />
+				<xs:element name="street2" type="xs:string" minOccurs="0" />
+				<xs:element name="city" type="xs:string" />
+				<xs:element name="state" type="xs:string" minOccurs="0" />
+				<xs:element name="postal-code" type="xs:string" />
+				<xs:element name="country" type="xs:string" />
+				<xs:element name="region" type="xs:string" />
+				<xs:element name="latitude" type="xs:string" minOccurs="0" />
+				<xs:element name="longitude" type="xs:string" minOccurs="0" />
+				<xs:element name="elevation" type="xs:string" minOccurs="0" />
+				<xs:element name="lata" type="xs:string" minOccurs="0" />
+				<xs:element ref="tns:ctag-pools" minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="complexes">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:complex" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="volume-group">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="volume-group-id" type="xs:string" />
+				<xs:element name="volume-group-name" type="xs:string" />
+				<xs:element name="heat-stack-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="vnf-type" type="xs:string" />
+				<xs:element name="orchestration-status" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="volume-groups">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:volume-group" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="volume">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="volume-id" type="xs:string" />
+				<xs:element name="volume-selflink" type="xs:string" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="volumes">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:volume" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="l3-interface-ipv4-address-list">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="l3-interface-ipv4-address" type="xs:string" />
+				<xs:element name="l3-interface-ipv4-prefix-length" type="xs:unsignedInt"
+					minOccurs="0" />
+				<xs:element name="vlan-id-inner" type="xs:unsignedInt"
+					minOccurs="0" />
+				<xs:element name="vlan-id-outer" type="xs:unsignedInt"
+					minOccurs="0" />
+				<xs:element name="is-floating" type="xs:boolean"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="neutron-network-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="neutron-subnet-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="l3-interface-ipv6-address-list">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="l3-interface-ipv6-address" type="xs:string" />
+				<xs:element name="l3-interface-ipv6-prefix-length" type="xs:unsignedInt"
+					minOccurs="0" />
+				<xs:element name="vlan-id-inner" type="xs:unsignedInt"
+					minOccurs="0" />
+				<xs:element name="vlan-id-outer" type="xs:unsignedInt"
+					minOccurs="0" />
+				<xs:element name="is-floating" type="xs:boolean"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="neutron-network-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="neutron-subnet-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="vlan">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="vlan-interface" type="xs:string" />
+				<xs:element name="vlan-id-inner" type="xs:unsignedInt"
+					minOccurs="0" />
+				<xs:element name="vlan-id-outer" type="xs:unsignedInt"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="speed-value" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="speed-units" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="vlan-description" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="backdoor-connection" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="vpn-id" type="xs:string" minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+				<xs:element ref="tns:l3-interface-ipv4-address-list"
+					minOccurs="0" maxOccurs="unbounded" />
+				<xs:element ref="tns:l3-interface-ipv6-address-list"
+					minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="vlans">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:vlan" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="sriov-vf">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="pci-id" type="xs:string" />
+				<xs:element name="vf-vlan-filter" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="vf-mac-filter" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="vf-vlan-strip" type="xs:boolean"
+					minOccurs="0" />
+				<xs:element name="vf-vlan-anti-spoof-check" type="xs:boolean"
+					minOccurs="0" />
+				<xs:element name="vf-mac-anti-spoof-check" type="xs:boolean"
+					minOccurs="0" />
+				<xs:element name="vf-mirrors" type="xs:string" minOccurs="0" />
+				<xs:element name="vf-broadcast-allow" type="xs:boolean"
+					minOccurs="0" />
+				<xs:element name="vf-unknown-multicast-allow" type="xs:boolean"
+					minOccurs="0" />
+				<xs:element name="vf-unknown-unicast-allow" type="xs:boolean"
+					minOccurs="0" />
+				<xs:element name="vf-insert-stag" type="xs:boolean"
+					minOccurs="0" />
+				<xs:element name="vf-link-status" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="neutron-network-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="sriov-vfs">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:sriov-vf" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="l-interface">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="interface-name" type="xs:string" />
+				<xs:element name="interface-role" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="v6-wan-link-ip" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="selflink" type="xs:string" minOccurs="0" />
+				<xs:element name="interface-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="macaddr" type="xs:string" minOccurs="0" />
+				<xs:element name="network-name" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="management-option" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:vlans" minOccurs="0" />
+				<xs:element ref="tns:sriov-vfs" minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+				<xs:element ref="tns:l3-interface-ipv4-address-list"
+					minOccurs="0" maxOccurs="unbounded" />
+				<xs:element ref="tns:l3-interface-ipv6-address-list"
+					minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="l-interfaces">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:l-interface" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="vserver">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="vserver-id" type="xs:string" />
+				<xs:element name="vserver-name" type="xs:string" />
+				<xs:element name="vserver-name2" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="prov-status" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="vserver-selflink" type="xs:string" />
+				<xs:element name="in-maint" type="xs:boolean" />
+				<xs:element name="is-closed-loop-disabled" type="xs:boolean" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:volumes" minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+				<xs:element ref="tns:l-interfaces" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="vservers">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:vserver" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="tenant">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="tenant-id" type="xs:string" />
+				<xs:element name="tenant-name" type="xs:string" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:vservers" minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="tenants">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:tenant" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="flavor">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="flavor-id" type="xs:string" />
+				<xs:element name="flavor-name" type="xs:string" />
+				<xs:element name="flavor-vcpus" type="xs:int" minOccurs="0" />
+				<xs:element name="flavor-ram" type="xs:int" minOccurs="0" />
+				<xs:element name="flavor-disk" type="xs:int" minOccurs="0" />
+				<xs:element name="flavor-ephemeral" type="xs:int"
+					minOccurs="0" />
+				<xs:element name="flavor-swap" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="flavor-is-public" type="xs:boolean"
+					minOccurs="0" />
+				<xs:element name="flavor-selflink" type="xs:string" />
+				<xs:element name="flavor-disabled" type="xs:boolean"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="flavors">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:flavor" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="group-assignment">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="group-id" type="xs:string" />
+				<xs:element name="group-type" type="xs:string" />
+				<xs:element name="group-name" type="xs:string" />
+				<xs:element name="group-description" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="group-assignments">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:group-assignment" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="snapshot">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="snapshot-id" type="xs:string" />
+				<xs:element name="snapshot-name" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="snapshot-architecture" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="snapshot-os-distro" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="snapshot-os-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="application" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="application-vendor" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="application-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="snapshot-selflink" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="prev-snapshot-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="snapshots">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:snapshot" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="metadatum">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="metaname" type="xs:string" />
+				<xs:element name="metaval" type="xs:string" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="metadata">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:metadatum" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="image">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="image-id" type="xs:string" />
+				<xs:element name="image-name" type="xs:string" />
+				<xs:element name="image-architecture" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="image-os-distro" type="xs:string" />
+				<xs:element name="image-os-version" type="xs:string" />
+				<xs:element name="application" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="application-vendor" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="application-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="image-selflink" type="xs:string" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+				<xs:element ref="tns:metadata" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="images">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:image" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="availability-zones">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:availability-zone" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="cloud-region">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="cloud-owner" type="xs:string" />
+				<xs:element name="cloud-region-id" type="xs:string" />
+				<xs:element name="cloud-type" type="xs:string" minOccurs="0" />
+				<xs:element name="owner-defined-type" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="cloud-region-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="identity-url" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="cloud-zone" type="xs:string" minOccurs="0" />
+				<xs:element name="complex-name" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:volume-groups" minOccurs="0" />
+				<xs:element ref="tns:tenants" minOccurs="0" />
+				<xs:element ref="tns:flavors" minOccurs="0" />
+				<xs:element ref="tns:group-assignments" minOccurs="0" />
+				<xs:element ref="tns:snapshots" minOccurs="0" />
+				<xs:element ref="tns:images" minOccurs="0" />
+				<xs:element ref="tns:dvs-switches" minOccurs="0" />
+				<xs:element ref="tns:oam-networks" minOccurs="0" />
+				<xs:element ref="tns:availability-zones" minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="cloud-regions">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:cloud-region" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="network-profile">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="nm-profile-name" type="xs:string" />
+				<xs:element name="community-string" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="network-profiles">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:network-profile" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="p-interface">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="interface-name" type="xs:string" />
+				<xs:element name="speed-value" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="speed-units" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="port-description" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="equipment-identifier" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="interface-role" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="interface-type" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+				<xs:element ref="tns:l-interfaces" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="p-interfaces">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:p-interface" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="lag-interface">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="interface-name" type="xs:string" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="speed-value" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="speed-units" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+				<xs:element ref="tns:l-interfaces" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="lag-interfaces">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:lag-interface" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="pserver">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="hostname" type="xs:string" />
+				<xs:element name="ptnii-equip-name" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="number-of-cpus" type="xs:int"
+					minOccurs="0" />
+				<xs:element name="disk-in-gigabytes" type="xs:int"
+					minOccurs="0" />
+				<xs:element name="ram-in-megabytes" type="xs:int"
+					minOccurs="0" />
+				<xs:element name="equip-type" type="xs:string" minOccurs="0" />
+				<xs:element name="equip-vendor" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="equip-model" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="fqdn" type="xs:string" minOccurs="0" />
+				<xs:element name="pserver-selflink" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ipv4-oam-address" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="serial-number" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="pserver-id" type="xs:string" minOccurs="0" />
+				<xs:element name="internet-topology" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="in-maint" type="xs:boolean" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="pserver-name2" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="purpose" type="xs:string" minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+				<xs:element ref="tns:p-interfaces" minOccurs="0" />
+				<xs:element ref="tns:lag-interfaces" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="pservers">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:pserver" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="virtual-data-center">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="vdc-id" type="xs:string" />
+				<xs:element name="vdc-name" type="xs:string" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="virtual-data-centers">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:virtual-data-center" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="cloud-infrastructure">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:complexes" minOccurs="0" />
+				<xs:element ref="tns:cloud-regions" minOccurs="0" />
+				<xs:element ref="tns:network-profiles" minOccurs="0" />
+				<xs:element ref="tns:pservers" minOccurs="0" />
+				<xs:element ref="tns:virtual-data-centers" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="license-key-resource">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="uuid" type="xs:string" />
+				<xs:element name="assignment-type" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="assignment-status" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="assignment-group-uuid" type="xs:string" />
+				<xs:element name="assignment-date" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="name" type="xs:string" minOccurs="0" />
+				<xs:element name="model-uuid" type="xs:string" minOccurs="0" />
+				<xs:element name="model-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="license-key" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="license-key-file-url" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="supplier-release-list" type="xs:string"
+					minOccurs="0" maxOccurs="unbounded" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="license-key-resources">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:license-key-resource" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="license-management">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:license-key-resources" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="connector">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="resource-instance-id" type="xs:string" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="persona-model-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="persona-model-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="widget-model-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="widget-model-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+				<xs:element ref="tns:metadata" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="connectors">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:connector" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="service-instance">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="service-instance-id" type="xs:string" />
+				<xs:element name="service-instance-name" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="persona-model-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="persona-model-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="widget-model-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="widget-model-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="bandwidth-total" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="bandwidth-up-wan1" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="bandwidth-down-wan1" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="bandwidth-up-wan2" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="bandwidth-down-wan2" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="vhn-portal-url" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="operational-status" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="service-instance-location-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+				<xs:element ref="tns:metadata" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="service-instances">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:service-instance" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="service-subscription">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="service-type" type="xs:string" />
+				<xs:element name="temp-ub-sub-account-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:service-instances" minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="service-subscriptions">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:service-subscription" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="customer">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="global-customer-id" type="xs:string" />
+				<xs:element name="subscriber-name" type="xs:string" />
+				<xs:element name="subscriber-type" type="xs:string" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:service-subscriptions" minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="customers">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:customer" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="business">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:connectors" minOccurs="0" />
+				<xs:element ref="tns:customers" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="vnf-image">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="uuid" type="xs:string" />
+				<xs:element name="application" type="xs:string" />
+				<xs:element name="application-vendor" type="xs:string" />
+				<xs:element name="application-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="selflink" type="xs:string" minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="vnf-images">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:vnf-image" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="service">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="service-id" type="xs:string" />
+				<xs:element name="service-description" type="xs:string" />
+				<xs:element name="service-selflink" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="service-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="services">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:service" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="service-capability">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="service-type" type="xs:string" />
+				<xs:element name="vnf-type" type="xs:string" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="service-capabilities">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:service-capability" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="element-choice-set">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="element-choice-set-uuid" type="xs:string" />
+				<xs:element name="element-choice-set-name" type="xs:string" />
+				<xs:element name="cardinality" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:model-elements" minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="element-choice-sets">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:element-choice-set" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="constrained-element-set">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="constrained-element-set-uuid" type="xs:string" />
+				<xs:element name="constraint-type" type="xs:string" />
+				<xs:element name="check-type" type="xs:string" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:element-choice-sets" minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="constrained-element-sets">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:constrained-element-set" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="model-constraint">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="model-constraint-uuid" type="xs:string" />
+				<xs:element name="constrained-element-set-uuid-to-replace"
+					type="xs:string" />
+				<xs:element ref="tns:constrained-element-sets" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="model-constraints">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:model-constraint" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="model-element">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="model-element-uuid" type="xs:string" />
+				<xs:element name="new-data-del-flag" type="xs:string" />
+				<xs:element name="cardinality" type="xs:string" />
+				<xs:element name="linkage-points" minOccurs="0">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:element name="linkage-point" type="xs:string"
+								minOccurs="0" maxOccurs="unbounded" />
+						</xs:sequence>
+					</xs:complexType>
+				</xs:element>
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:model-elements" minOccurs="0" />
+				<xs:element ref="tns:model-constraints" minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="model-elements">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:model-element" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="model">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="model-name-version-id" type="xs:string" />
+				<xs:element name="model-type" type="xs:string" />
+				<xs:element name="model-name" type="xs:string" />
+				<xs:element name="model-id" type="xs:string" />
+				<xs:element name="model-version" type="xs:string" />
+				<xs:element name="model-description" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:model-elements" minOccurs="0" />
+				<xs:element ref="tns:metadata" minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="models">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:model" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="related-lookup">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="related-lookup-uuid" type="xs:string" />
+				<xs:element name="source-node-type" type="xs:string" />
+				<xs:element name="source-node-property" type="xs:string" />
+				<xs:element name="target-node-type" type="xs:string" />
+				<xs:element name="target-node-property" type="xs:string" />
+				<xs:element name="property-collect-list" type="xs:string"
+					minOccurs="0" maxOccurs="unbounded" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="related-lookups">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:related-lookup" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="property-constraint">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="property-constraint-uuid" type="xs:string" />
+				<xs:element name="constraint-type" type="xs:string" />
+				<xs:element name="property-name" type="xs:string" />
+				<xs:element name="property-value" type="xs:string" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="property-constraints">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:property-constraint" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="named-query-element">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="named-query-element-uuid" type="xs:string" />
+				<xs:element name="property-collect-list" type="xs:string"
+					minOccurs="0" maxOccurs="unbounded" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="property-limit-desc" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="do-not-output" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:named-query-elements" minOccurs="0" />
+				<xs:element ref="tns:related-lookups" minOccurs="0" />
+				<xs:element ref="tns:property-constraints" minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="named-query-elements">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:named-query-element" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="named-query">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="named-query-uuid" type="xs:string" />
+				<xs:element name="named-query-name" type="xs:string" />
+				<xs:element name="named-query-version" type="xs:string" />
+				<xs:element name="required-input-params" minOccurs="0">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:element name="required-input-param" type="xs:string"
+								minOccurs="0" maxOccurs="unbounded" />
+						</xs:sequence>
+					</xs:complexType>
+				</xs:element>
+				<xs:element name="description" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:named-query-elements" minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="named-queries">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:named-query" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="service-design-and-creation">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:vnf-images" minOccurs="0" />
+				<xs:element ref="tns:services" minOccurs="0" />
+				<xs:element ref="tns:service-capabilities" minOccurs="0" />
+				<xs:element ref="tns:models" minOccurs="0" />
+				<xs:element ref="tns:named-queries" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="logical-link">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="link-name" type="xs:string" />
+				<xs:element name="link-type" type="xs:string" />
+				<xs:element name="speed-value" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="speed-units" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ip-version" type="xs:string" minOccurs="0" />
+				<xs:element name="routing-protocol" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="persona-model-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="persona-model-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="widget-model-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="widget-model-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="operational-status" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="link-role" type="xs:string" minOccurs="0" />
+				<xs:element name="link-name2" type="xs:string" minOccurs="0" />
+				<xs:element name="link-id" type="xs:string" minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="logical-links">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:logical-link" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="class-of-service">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="cos" type="xs:string" />
+				<xs:element name="probe-id" type="xs:string" minOccurs="0" />
+				<xs:element name="probe-type" type="xs:string" minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="classes-of-service">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:class-of-service" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="site-pair">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="site-pair-id" type="xs:string" />
+				<xs:element name="source-ip" type="xs:string" minOccurs="0" />
+				<xs:element name="destination-ip" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ip-version" type="xs:string" minOccurs="0" />
+				<xs:element name="destination-hostname" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="destination-equip-type" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:classes-of-service" minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="site-pairs">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:site-pair" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="routing-instance">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="routing-instance-id" type="xs:string" />
+				<xs:element name="rpm-owner" type="xs:string" minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:site-pairs" minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="routing-instances">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:routing-instance" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="site-pair-set">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="site-pair-set-id" type="xs:string" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:routing-instances" minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="site-pair-sets">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:site-pair-set" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="vpn-binding">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="vpn-id" type="xs:string" />
+				<xs:element name="vpn-name" type="xs:string" />
+				<xs:element name="global-route-target" type="xs:string" />
+				<xs:element name="vpn-platform" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="vpn-bindings">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:vpn-binding" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="vpls-pe">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="equipment-name" type="xs:string" />
+				<xs:element name="prov-status" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ipv4-oam-address" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="equipment-role" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="vlan-id-outer" type="xs:unsignedInt"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+				<xs:element ref="tns:p-interfaces" minOccurs="0" />
+				<xs:element ref="tns:lag-interfaces" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="vpls-pes">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:vpls-pe" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="multicast-configuration">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="multicast-configuration-id" type="xs:string" />
+				<xs:element name="multicast-protocol" type="xs:string" />
+				<xs:element name="rp-type" type="xs:string" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="multicast-configurations">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:multicast-configuration" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="cvlan-tag-entry">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="cvlan-tag" type="xs:unsignedInt" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="cvlan-tags">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:cvlan-tag-entry" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="port-group">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="interface-id" type="xs:string" />
+				<xs:element name="neutron-network-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="neutron-network-name" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="interface-role" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="port-group-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="port-group-name" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="switch-name" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="orchestration-status" type="xs:string" />
+				<xs:element name="heat-stack-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="mso-catalog-key" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:cvlan-tags" minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="port-groups">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:port-group" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="vce">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="vnf-id" type="xs:string" />
+				<xs:element name="vnf-name" type="xs:string" />
+				<xs:element name="vnf-name2" type="xs:string" minOccurs="0" />
+				<xs:element name="vnf-type" type="xs:string" />
+				<xs:element name="service-id" type="xs:string" minOccurs="0" />
+				<xs:element name="regional-resource-zone" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="prov-status" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="operational-state" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="license-key" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="equipment-role" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="orchestration-status" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="heat-stack-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="mso-catalog-key" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="vpe-id" type="xs:string" minOccurs="0" />
+				<xs:element name="v6-vce-wan-address" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ipv4-oam-address" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ipv4-loopback0-address" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:port-groups" minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="vces">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:vce" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="vpe">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="vnf-id" type="xs:string" />
+				<xs:element name="vnf-name" type="xs:string" />
+				<xs:element name="vnf-name2" type="xs:string" minOccurs="0" />
+				<xs:element name="vnf-type" type="xs:string" />
+				<xs:element name="service-id" type="xs:string" minOccurs="0" />
+				<xs:element name="regional-resource-zone" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="prov-status" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="operational-state" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="license-key" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="equipment-role" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="orchestration-status" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="heat-stack-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="mso-catalog-key" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ipv4-oam-address" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ipv4-oam-gateway-address-prefix-length"
+					type="xs:int" minOccurs="0" />
+				<xs:element name="ipv4-oam-gateway-address" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="v4-loopback0-ip-address" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="vlan-id-outer" type="xs:unsignedInt"
+					minOccurs="0" />
+				<xs:element name="as-number" type="xs:string" minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="summary-status" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="encrypted-access-flag" type="xs:boolean"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+				<xs:element ref="tns:l-interfaces" minOccurs="0" />
+				<xs:element ref="tns:lag-interfaces" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="vpes">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:vpe" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="vnfc">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="vnfc-name" type="xs:string" />
+				<xs:element name="vnfc-function-code" type="xs:string" />
+				<xs:element name="vnfc-type" type="xs:string" />
+				<xs:element name="prov-status" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="orchestration-status" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ipaddress-v4-oam-vip" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="in-maint" type="xs:boolean" />
+				<xs:element name="is-closed-loop-disabled" type="xs:boolean" />
+				<xs:element name="group-notation" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="vnfcs">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:vnfc" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="subnet">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="subnet-id" type="xs:string" />
+				<xs:element name="subnet-name" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="neutron-subnet-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="gateway-address" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="network-start-address" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="cidr-mask" type="xs:string" minOccurs="0" />
+				<xs:element name="ip-version" type="xs:string" minOccurs="0" />
+				<xs:element name="orchestration-status" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="dhcp-enabled" type="xs:boolean" />
+				<xs:element name="dhcp-start" type="xs:string" minOccurs="0" />
+				<xs:element name="dhcp-end" type="xs:string" minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="subnets">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:subnet" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="ctag-assignment">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="vlan-id-inner" type="xs:unsignedInt" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="ctag-assignments">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:ctag-assignment" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="segmentation-assignment">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="segmentation-id" type="xs:string" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="segmentation-assignments">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:segmentation-assignment" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="l3-network">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="network-id" type="xs:string" />
+				<xs:element name="network-name" type="xs:string" />
+				<xs:element name="network-type" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="network-role" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="network-technology" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="neutron-network-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="is-bound-to-vpn" type="xs:boolean" />
+				<xs:element name="service-id" type="xs:string" minOccurs="0" />
+				<xs:element name="network-role-instance" type="xs:unsignedInt"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="orchestration-status" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="heat-stack-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="mso-catalog-key" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="contrail-network-fqdn" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="persona-model-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="persona-model-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="widget-model-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="widget-model-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="physical-network-name" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="is-provider-network" type="xs:boolean" />
+				<xs:element name="is-shared-network" type="xs:boolean" />
+				<xs:element name="is-external-network" type="xs:boolean" />
+				<xs:element ref="tns:subnets" minOccurs="0" />
+				<xs:element ref="tns:ctag-assignments" minOccurs="0" />
+				<xs:element ref="tns:segmentation-assignments" minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="l3-networks">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:l3-network" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="network-policy">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="network-policy-id" type="xs:string" />
+				<xs:element name="network-policy-fqdn" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="heat-stack-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="network-policies">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:network-policy" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="vf-module">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="vf-module-id" type="xs:string" />
+				<xs:element name="vf-module-name" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="heat-stack-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="orchestration-status" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="is-base-vf-module" type="xs:boolean" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="persona-model-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="persona-model-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="widget-model-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="widget-model-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="contrail-service-instance-fqdn" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="vf-modules">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:vf-module" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="generic-vnf">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="vnf-id" type="xs:string" />
+				<xs:element name="vnf-name" type="xs:string" />
+				<xs:element name="vnf-name2" type="xs:string" minOccurs="0" />
+				<xs:element name="vnf-type" type="xs:string" />
+				<xs:element name="service-id" type="xs:string" minOccurs="0" />
+				<xs:element name="regional-resource-zone" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="prov-status" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="operational-state" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="license-key" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="equipment-role" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="orchestration-status" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="heat-stack-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="mso-catalog-key" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="management-option" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ipv4-oam-address" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ipv4-loopback0-address" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="nm-lan-v6-address" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="management-v6-address" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="vcpu" type="xs:unsignedInt" minOccurs="0" />
+				<xs:element name="vcpu-units" type="xs:string" minOccurs="0" />
+				<xs:element name="vmemory" type="xs:unsignedInt"
+					minOccurs="0" />
+				<xs:element name="vmemory-units" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="vdisk" type="xs:unsignedInt" minOccurs="0" />
+				<xs:element name="vdisk-units" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="in-maint" type="xs:boolean" />
+				<xs:element name="is-closed-loop-disabled" type="xs:boolean" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="summary-status" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="encrypted-access-flag" type="xs:boolean"
+					minOccurs="0" />
+				<xs:element name="entitlement-assignment-group-uuid"
+					type="xs:string" minOccurs="0" />
+				<xs:element name="entitlement-resource-uuid" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="license-assignment-group-uuid" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="license-key-uuid" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="persona-model-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="persona-model-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="widget-model-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="widget-model-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="as-number" type="xs:string" minOccurs="0" />
+				<xs:element name="regional-resource-subzone" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+				<xs:element ref="tns:l-interfaces" minOccurs="0" />
+				<xs:element ref="tns:lag-interfaces" minOccurs="0" />
+				<xs:element ref="tns:vf-modules" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="generic-vnfs">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:generic-vnf" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="lag-link">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="link-name" type="xs:string" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="lag-links">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:lag-link" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="newvce">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="vnf-id2" type="xs:string" />
+				<xs:element name="vnf-name" type="xs:string" />
+				<xs:element name="vnf-name2" type="xs:string" minOccurs="0" />
+				<xs:element name="vnf-type" type="xs:string" />
+				<xs:element name="prov-status" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="operational-state" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="license-key" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ipv4-oam-address" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="equipment-role" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ipv4-loopback0-address" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="orchestration-status" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="heat-stack-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="mso-catalog-key" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+				<xs:element ref="tns:l-interfaces" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="newvces">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:newvce" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="pnf">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="pnf-name" type="xs:string" />
+				<xs:element name="pnf-name2" type="xs:string" minOccurs="0" />
+				<xs:element name="pnf-name2-source" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="pnf-id" type="xs:string" minOccurs="0" />
+				<xs:element name="equip-type" type="xs:string" minOccurs="0" />
+				<xs:element name="equip-vendor" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="equip-model" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="management-option" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ipaddress-v4-oam" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="sw-version" type="xs:string" minOccurs="0" />
+				<xs:element name="orchestration-status" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="in-maint" type="xs:boolean" />
+				<xs:element name="frame-id" type="xs:string" minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+				<xs:element ref="tns:p-interfaces" minOccurs="0" />
+				<xs:element ref="tns:lag-interfaces" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="pnfs">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:pnf" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="physical-link">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="link-name" type="xs:string" />
+				<xs:element name="speed-value" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="speed-units" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="circuit-id" type="xs:string" minOccurs="0" />
+				<xs:element name="dual-mode" type="xs:string" minOccurs="0" />
+				<xs:element name="management-option" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="service-provider-name" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="physical-links">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:physical-link" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="vig-server">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="vig-address-type" type="xs:string" />
+				<xs:element name="ipaddress-v4-vig" type="xs:string"
+					minOccurs="0" maxOccurs="unbounded" />
+				<xs:element name="ipaddress-v6-vig" type="xs:string"
+					minOccurs="0" maxOccurs="unbounded" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="vig-servers">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:vig-server" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="ipsec-configuration">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="ipsec-configuration-id" type="xs:string" />
+				<xs:element name="requested-vig-address-type" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="requested-encryption-strength" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="requested-dmz-type" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="shared-dmz-network-address" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="requested-customer-name" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ike-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ikev1-authentication" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ikev1-encryption" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ikev1-dh-group" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ikev1-am-group-id" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ikev1-am-password" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ikev1-sa-lifetime" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ipsec-authentication" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ipsec-encryption" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ipsec-sa-lifetime" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="ipsec-pfs" type="xs:string" minOccurs="0" />
+				<xs:element name="xauth-userid" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="xauth-user-password" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="dpd-interval" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="dpd-frequency" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+				<xs:element ref="tns:vig-servers" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="ipsec-configurations">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:ipsec-configuration" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="route-table-reference">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="route-table-reference-id" type="xs:string" />
+				<xs:element name="route-table-reference-fqdn" type="xs:string" />
+				<xs:element name="resource-version" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:relationship-list" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="route-table-references">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:route-table-reference" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="network">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:logical-links" minOccurs="0" />
+				<xs:element ref="tns:site-pair-sets" minOccurs="0" />
+				<xs:element ref="tns:vpn-bindings" minOccurs="0" />
+				<xs:element ref="tns:vpls-pes" minOccurs="0" />
+				<xs:element ref="tns:multicast-configurations" minOccurs="0" />
+				<xs:element ref="tns:vces" minOccurs="0" />
+				<xs:element ref="tns:vpes" minOccurs="0" />
+				<xs:element ref="tns:vnfcs" minOccurs="0" />
+				<xs:element ref="tns:l3-networks" minOccurs="0" />
+				<xs:element ref="tns:network-policies" minOccurs="0" />
+				<xs:element ref="tns:generic-vnfs" minOccurs="0" />
+				<xs:element ref="tns:lag-links" minOccurs="0" />
+				<xs:element ref="tns:newvces" minOccurs="0" />
+				<xs:element ref="tns:pnfs" minOccurs="0" />
+				<xs:element ref="tns:physical-links" minOccurs="0" />
+				<xs:element ref="tns:ipsec-configurations" minOccurs="0" />
+				<xs:element ref="tns:route-table-references" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="reserved-prop-names">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="last-mod-source-of-truth" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="aai-node-type" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="aai-created-ts" type="xs:unsignedInt"
+					minOccurs="0" />
+				<xs:element name="aai-unique-key" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="aai-last-mod-ts" type="xs:unsignedInt"
+					minOccurs="0" />
+				<xs:element name="source-of-truth" type="xs:string"
+					minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="edge-prop-names">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="edgeLabel" type="xs:string" minOccurs="0" />
+				<xs:element name="direction" type="xs:string" minOccurs="0" />
+				<xs:element name="multiplicityRule" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="isParent" type="xs:boolean" minOccurs="0" />
+				<xs:element name="usesResource" type="xs:boolean"
+					minOccurs="0" />
+				<xs:element name="hasDelTarget" type="xs:boolean"
+					minOccurs="0" />
+				<xs:element name="SVC-INFRA" type="xs:string" minOccurs="0" />
+				<xs:element name="SVC-INFRA-REV" type="xs:string"
+					minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="aai-internal">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:reserved-prop-names" minOccurs="0"
+					maxOccurs="unbounded" />
+				<xs:element ref="tns:edge-prop-names" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="inventory">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:search" minOccurs="0" />
+				<xs:element ref="tns:actions" minOccurs="0" />
+				<xs:element ref="tns:cloud-infrastructure" minOccurs="0" />
+				<xs:element ref="tns:license-management" minOccurs="0" />
+				<xs:element ref="tns:business" minOccurs="0" />
+				<xs:element ref="tns:service-design-and-creation"
+					minOccurs="0" />
+				<xs:element ref="tns:network" minOccurs="0" />
+				<xs:element ref="tns:aai-internal" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="notification-event-header">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="id" type="xs:string" minOccurs="0" />
+				<xs:element name="timestamp" type="xs:string" minOccurs="0" />
+				<xs:element name="source-name" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="domain" type="xs:string" minOccurs="0" />
+				<xs:element name="sequence-number" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="severity" type="xs:string" minOccurs="0" />
+				<xs:element name="event-type" type="xs:string" minOccurs="0" />
+				<xs:element name="version" type="xs:string" minOccurs="0" />
+				<xs:element name="action" type="xs:string" minOccurs="0" />
+				<xs:element name="entity-type" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="top-entity-type" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="entity-link" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="status" type="xs:string" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="notification-event">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="cambria.partition" type="xs:string"
+					minOccurs="0" />
+				<xs:element ref="tns:notification-event-header"
+					minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="query-parameters">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:named-query" minOccurs="0" />
+				<xs:element ref="tns:model" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="instance-filter">
+		<xs:complexType>
+			<xs:sequence />
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="instance-filters">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:instance-filter" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="model-and-named-query-search">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:query-parameters" minOccurs="0" />
+				<xs:element ref="tns:instance-filters" minOccurs="0" />
+				<xs:element name="top-node-type" type="xs:string"
+					minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="properties">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="property-name" type="xs:string"
+					minOccurs="0" />
+				<xs:element name="property-value" type="xs:string"
+					minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="extra-properties">
+		<xs:complexType>
+			<xs:sequence />
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="inventory-response-item">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="model-name" type="xs:string" minOccurs="0" />
+				<xs:element ref="tns:extra-properties" minOccurs="0" />
+				<xs:element ref="tns:inventory-response-items" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="inventory-response-items">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:inventory-response-item" minOccurs="0"
+					maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="response-list">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="tns:inventory-response-items" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="extra-property">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="property-name" type="xs:string"
+					minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="vnf">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="vnf-id" type="xs:string" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+</xs:schema>
diff --git a/src/main/resources/schema/vnfcatalog.xsd b/src/main/resources/schema/vnfcatalog.xsd
index 9789124..1b18ef1 100644
--- a/src/main/resources/schema/vnfcatalog.xsd
+++ b/src/main/resources/schema/vnfcatalog.xsd
@@ -1,127 +1,127 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
   ============LICENSE_START=======================================================
   MODEL LOADER SERVICE
   ================================================================================
   Copyright (C) 2017 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.
-  You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+  
+       http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
   limitations under the License.
-  ============LICENSE_END=========================================================
-  -->
-
-<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-	<xsd:element name="vnf-catalog">
-		<xsd:complexType>
-			<xsd:sequence>
-				<xsd:element name="part-number-list" maxOccurs="unbounded">
-					<xsd:complexType>
-						<xsd:sequence>
-							<xsd:element name="part-number" minOccurs="0"
-								maxOccurs="1" type="xsd:normalizedString" />
-							<xsd:element name="vnf-type" minOccurs="0" maxOccurs="1"
-								type="xsd:normalizedString" />
-							<xsd:element name="vendor-info" minOccurs="0"
-								maxOccurs="1">
-								<xsd:complexType>
-									<xsd:sequence>
-										<xsd:element name="vendor-name" minOccurs="0"
-											maxOccurs="1" type="xsd:normalizedString" />
-										<xsd:element name="vendor-part-number" minOccurs="0"
-											maxOccurs="1" type="xsd:normalizedString" />
-										<xsd:element name="vendor-model" minOccurs="0"
-											maxOccurs="1" type="xsd:normalizedString" />
-									</xsd:sequence>
-								</xsd:complexType>
-							</xsd:element>
-							<xsd:element name="vcpu" minOccurs="0" maxOccurs="1">
-								<xsd:complexType>
-									<xsd:sequence>
-										<xsd:element name="vcpu-default" minOccurs="0"
-											maxOccurs="1" type="xsd:int" />
-										<xsd:element name="vcpu-min" minOccurs="0"
-											maxOccurs="1" type="xsd:int" />
-										<xsd:element name="vcpu-max" minOccurs="0"
-											maxOccurs="1" type="xsd:int" />
-									</xsd:sequence>
-								</xsd:complexType>
-							</xsd:element>
-							<xsd:element name="vmemory" minOccurs="0" maxOccurs="1">
-								<xsd:complexType>
-									<xsd:sequence>
-										<xsd:element name="vmemory-default" minOccurs="0"
-											maxOccurs="1" type="xsd:int" />
-										<xsd:element name="vmemory-units" minOccurs="0"
-											maxOccurs="1" type="xsd:normalizedString" />
-										<xsd:element name="vmemory-min" minOccurs="0"
-											maxOccurs="1" type="xsd:int" />
-										<xsd:element name="vmemory-max" minOccurs="0"
-											maxOccurs="1" type="xsd:int" />
-									</xsd:sequence>
-								</xsd:complexType>
-							</xsd:element>
-							<xsd:element name="vdisk" minOccurs="0" maxOccurs="1">
-								<xsd:complexType>
-									<xsd:sequence>
-										<xsd:element name="vdisk-default" minOccurs="0"
-											maxOccurs="1" type="xsd:int" />
-										<xsd:element name="vdisk-units" minOccurs="0"
-											maxOccurs="1" type="xsd:normalizedString" />
-										<xsd:element name="vdisk-min" minOccurs="0"
-											maxOccurs="1" type="xsd:int" />
-										<xsd:element name="vdisk-max" minOccurs="0"
-											maxOccurs="1" type="xsd:int" />
-									</xsd:sequence>
-								</xsd:complexType>
-							</xsd:element>
-							<xsd:element name="software-version-list" maxOccurs="unbounded">
-								<xsd:complexType>
-									<xsd:sequence>
-										<xsd:element name="software-version" minOccurs="0"
-											maxOccurs="1" type="xsd:normalizedString" />
-										<xsd:element name="software-version-state"
-											minOccurs="0" maxOccurs="1" type="xsd:int" />
-										<xsd:element name="software-filetype" minOccurs="0"
-											maxOccurs="1" type="xsd:normalizedString" />
-										<xsd:element name="file-md5-value" minOccurs="0"
-											maxOccurs="1" type="xsd:normalizedString" />
-										<xsd:element name="software-filename" minOccurs="0"
-											maxOccurs="1" type="xsd:normalizedString" />
-									</xsd:sequence>
-								</xsd:complexType>
-							</xsd:element>
-							<xsd:element name="vnf-features-list" maxOccurs="unbounded">
-								<xsd:complexType>
-									<xsd:sequence>
-										<xsd:element name="vnf-feature" minOccurs="0"
-											maxOccurs="1" type="xsd:normalizedString" />
-									</xsd:sequence>
-								</xsd:complexType>
-							</xsd:element>
-							<xsd:element name="license-list" minOccurs="0"
-								maxOccurs="1">
-								<xsd:complexType>
-									<xsd:sequence>
-										<xsd:element name="license-assignment-group"
-											minOccurs="0" maxOccurs="1" type="xsd:normalizedString" />
-										<xsd:element name="license-required" minOccurs="0"
-											maxOccurs="1" type="xsd:normalizedString" />
-									</xsd:sequence>
-								</xsd:complexType>
-							</xsd:element>
-						</xsd:sequence>
-					</xsd:complexType>
-				</xsd:element>
-			</xsd:sequence>
-		</xsd:complexType>
-	</xsd:element>
-</xsd:schema>
+  ============LICENSE_END=========================================================
+  -->
+
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+	<xsd:element name="vnf-catalog">
+		<xsd:complexType>
+			<xsd:sequence>
+				<xsd:element name="part-number-list" maxOccurs="unbounded">
+					<xsd:complexType>
+						<xsd:sequence>
+							<xsd:element name="part-number" minOccurs="0"
+								maxOccurs="1" type="xsd:normalizedString" />
+							<xsd:element name="vnf-type" minOccurs="0" maxOccurs="1"
+								type="xsd:normalizedString" />
+							<xsd:element name="vendor-info" minOccurs="0"
+								maxOccurs="1">
+								<xsd:complexType>
+									<xsd:sequence>
+										<xsd:element name="vendor-name" minOccurs="0"
+											maxOccurs="1" type="xsd:normalizedString" />
+										<xsd:element name="vendor-part-number" minOccurs="0"
+											maxOccurs="1" type="xsd:normalizedString" />
+										<xsd:element name="vendor-model" minOccurs="0"
+											maxOccurs="1" type="xsd:normalizedString" />
+									</xsd:sequence>
+								</xsd:complexType>
+							</xsd:element>
+							<xsd:element name="vcpu" minOccurs="0" maxOccurs="1">
+								<xsd:complexType>
+									<xsd:sequence>
+										<xsd:element name="vcpu-default" minOccurs="0"
+											maxOccurs="1" type="xsd:int" />
+										<xsd:element name="vcpu-min" minOccurs="0"
+											maxOccurs="1" type="xsd:int" />
+										<xsd:element name="vcpu-max" minOccurs="0"
+											maxOccurs="1" type="xsd:int" />
+									</xsd:sequence>
+								</xsd:complexType>
+							</xsd:element>
+							<xsd:element name="vmemory" minOccurs="0" maxOccurs="1">
+								<xsd:complexType>
+									<xsd:sequence>
+										<xsd:element name="vmemory-default" minOccurs="0"
+											maxOccurs="1" type="xsd:int" />
+										<xsd:element name="vmemory-units" minOccurs="0"
+											maxOccurs="1" type="xsd:normalizedString" />
+										<xsd:element name="vmemory-min" minOccurs="0"
+											maxOccurs="1" type="xsd:int" />
+										<xsd:element name="vmemory-max" minOccurs="0"
+											maxOccurs="1" type="xsd:int" />
+									</xsd:sequence>
+								</xsd:complexType>
+							</xsd:element>
+							<xsd:element name="vdisk" minOccurs="0" maxOccurs="1">
+								<xsd:complexType>
+									<xsd:sequence>
+										<xsd:element name="vdisk-default" minOccurs="0"
+											maxOccurs="1" type="xsd:int" />
+										<xsd:element name="vdisk-units" minOccurs="0"
+											maxOccurs="1" type="xsd:normalizedString" />
+										<xsd:element name="vdisk-min" minOccurs="0"
+											maxOccurs="1" type="xsd:int" />
+										<xsd:element name="vdisk-max" minOccurs="0"
+											maxOccurs="1" type="xsd:int" />
+									</xsd:sequence>
+								</xsd:complexType>
+							</xsd:element>
+							<xsd:element name="software-version-list" maxOccurs="unbounded">
+								<xsd:complexType>
+									<xsd:sequence>
+										<xsd:element name="software-version" minOccurs="0"
+											maxOccurs="1" type="xsd:normalizedString" />
+										<xsd:element name="software-version-state"
+											minOccurs="0" maxOccurs="1" type="xsd:int" />
+										<xsd:element name="software-filetype" minOccurs="0"
+											maxOccurs="1" type="xsd:normalizedString" />
+										<xsd:element name="file-md5-value" minOccurs="0"
+											maxOccurs="1" type="xsd:normalizedString" />
+										<xsd:element name="software-filename" minOccurs="0"
+											maxOccurs="1" type="xsd:normalizedString" />
+									</xsd:sequence>
+								</xsd:complexType>
+							</xsd:element>
+							<xsd:element name="vnf-features-list" maxOccurs="unbounded">
+								<xsd:complexType>
+									<xsd:sequence>
+										<xsd:element name="vnf-feature" minOccurs="0"
+											maxOccurs="1" type="xsd:normalizedString" />
+									</xsd:sequence>
+								</xsd:complexType>
+							</xsd:element>
+							<xsd:element name="license-list" minOccurs="0"
+								maxOccurs="1">
+								<xsd:complexType>
+									<xsd:sequence>
+										<xsd:element name="license-assignment-group"
+											minOccurs="0" maxOccurs="1" type="xsd:normalizedString" />
+										<xsd:element name="license-required" minOccurs="0"
+											maxOccurs="1" type="xsd:normalizedString" />
+									</xsd:sequence>
+								</xsd:complexType>
+							</xsd:element>
+						</xsd:sequence>
+					</xsd:complexType>
+				</xsd:element>
+			</xsd:sequence>
+		</xsd:complexType>
+	</xsd:element>
+</xsd:schema>
diff --git "a/src/main/runtime/context/__module.ajsc.namespace.name__\043__module.ajsc.namespace.version__.context" "b/src/main/runtime/context/__module.ajsc.namespace.name__\043__module.ajsc.namespace.version__.context"
new file mode 100644
index 0000000..8514196
--- /dev/null
+++ "b/src/main/runtime/context/__module.ajsc.namespace.name__\043__module.ajsc.namespace.version__.context"
@@ -0,0 +1 @@
+{"context":{"contextClass":"ajsc.Context","contextId":"__module_ajsc_namespace_name__:__module_ajsc_namespace_version__","contextName":"__module_ajsc_namespace_name__","contextVersion":"__module_ajsc_namespace_version__","description":"__module_ajsc_namespace_name__ Context"}}
\ No newline at end of file
diff --git "a/src/main/runtime/context/default\0430.context" "b/src/main/runtime/context/default\0430.context"
new file mode 100644
index 0000000..d1b5ab4
--- /dev/null
+++ "b/src/main/runtime/context/default\0430.context"
@@ -0,0 +1 @@
+{"context":{"contextClass":"ajsc.Context","contextId":"default:0","contextName":"default","contextVersion":"0","description":"Default Context"}}
\ No newline at end of file
diff --git "a/src/main/runtime/deploymentPackage/__module.ajsc.namespace.name__\043__module.ajsc.namespace.version__.json" "b/src/main/runtime/deploymentPackage/__module.ajsc.namespace.name__\043__module.ajsc.namespace.version__.json"
new file mode 100644
index 0000000..d0954cf
--- /dev/null
+++ "b/src/main/runtime/deploymentPackage/__module.ajsc.namespace.name__\043__module.ajsc.namespace.version__.json"
@@ -0,0 +1 @@
+{"deploymentPackage":{"Class":"ajsc.DeploymentPackage","Id":"__module.ajsc.namespace.name__:__module_ajsc_namespace_version__","namespace":"__module_ajsc_namespace_name__","namespaceVersion":"__module_ajsc_namespace_version__","description":"__module_ajsc_namespace_name__ __module_ajsc_namespace_version__ - default description","userId":"ajsc"}}
\ No newline at end of file
diff --git a/src/main/runtime/shiroRole/ajscadmin.json b/src/main/runtime/shiroRole/ajscadmin.json
new file mode 100644
index 0000000..f5e981e
--- /dev/null
+++ b/src/main/runtime/shiroRole/ajscadmin.json
@@ -0,0 +1 @@
+{"shiroRoleClass":"ajsc.auth.ShiroRole","shiroRoleId":"ajscadmin","name":"ajscadmin","permissions":"[ajscadmin:*, ajsc:*]"}
\ No newline at end of file
diff --git "a/src/main/runtime/shiroRole/contextadmin\043__module.ajsc.namespace.name__.json" "b/src/main/runtime/shiroRole/contextadmin\043__module.ajsc.namespace.name__.json"
new file mode 100644
index 0000000..2dae9f5
--- /dev/null
+++ "b/src/main/runtime/shiroRole/contextadmin\043__module.ajsc.namespace.name__.json"
@@ -0,0 +1 @@
+{"shiroRoleClass":"ajsc.auth.ShiroRole","shiroRoleId":"contextadmin:__module_ajsc_namespace_name__","name":"contextadmin:__module_ajsc_namespace_name__","permissions":"[]"}
\ No newline at end of file
diff --git "a/src/main/runtime/shiroRole/contextadmin\043default.json" "b/src/main/runtime/shiroRole/contextadmin\043default.json"
new file mode 100644
index 0000000..5de814e
--- /dev/null
+++ "b/src/main/runtime/shiroRole/contextadmin\043default.json"
@@ -0,0 +1 @@
+{"shiroRoleClass":"ajsc.auth.ShiroRole","shiroRoleId":"contextadmin:default","name":"contextadmin:default","permissions":"[]"}
\ No newline at end of file
diff --git a/src/main/runtime/shiroUser/ajsc.json b/src/main/runtime/shiroUser/ajsc.json
new file mode 100644
index 0000000..f4c7855
--- /dev/null
+++ b/src/main/runtime/shiroUser/ajsc.json
@@ -0,0 +1 @@
+{"shiroUserClass":"ajsc.auth.ShiroUser","shiroUserId":"ajsc","passwordHash":"9471697417008c880720ba54c6038791ad7e98f3b88136fe34f4d31a462dd27a","permissions":"[*:*]","username":"ajsc"}
\ No newline at end of file
diff --git "a/src/main/runtime/shiroUserRole/ajsc\043ajscadmin.json" "b/src/main/runtime/shiroUserRole/ajsc\043ajscadmin.json"
new file mode 100644
index 0000000..cb8d483
--- /dev/null
+++ "b/src/main/runtime/shiroUserRole/ajsc\043ajscadmin.json"
@@ -0,0 +1 @@
+{"shiroUserRoleClass":"ajsc.auth.ShiroUserRole","shiroUserRoleId":"ajsc:ajscadmin","roleId":"ajscadmin","userId":"ajsc"}
\ No newline at end of file
diff --git "a/src/main/runtime/shiroUserRole/ajsc\043contextadmin\043__module.ajsc.namespace.name__.json" "b/src/main/runtime/shiroUserRole/ajsc\043contextadmin\043__module.ajsc.namespace.name__.json"
new file mode 100644
index 0000000..95d2361
--- /dev/null
+++ "b/src/main/runtime/shiroUserRole/ajsc\043contextadmin\043__module.ajsc.namespace.name__.json"
@@ -0,0 +1 @@
+{"shiroUserRoleClass":"ajsc.auth.ShiroUserRole","shiroUserRoleId":"ajsc:contextadmin:__module_ajsc_namespace_name__","roleId":"contextadmin:__module_ajsc_namespace_name__","userId":"ajsc"}
\ No newline at end of file
diff --git "a/src/main/runtime/shiroUserRole/ajsc\043contextadmin\043default.json" "b/src/main/runtime/shiroUserRole/ajsc\043contextadmin\043default.json"
new file mode 100644
index 0000000..2bd5063
--- /dev/null
+++ "b/src/main/runtime/shiroUserRole/ajsc\043contextadmin\043default.json"
@@ -0,0 +1 @@
+{"shiroUserRoleClass":"ajsc.auth.ShiroUserRole","shiroUserRoleId":"ajsc:contextadmin:default","roleId":"contextadmin:default","userId":"ajsc"}
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/rest-servlet.xml b/src/main/webapp/WEB-INF/rest-servlet.xml
deleted file mode 100644
index 6a23c2b..0000000
--- a/src/main/webapp/WEB-INF/rest-servlet.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<!--
-  ============LICENSE_START=======================================================
-  MODEL LOADER SERVICE
-  ================================================================================
-  Copyright (C) 2017 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.
-  You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  ============LICENSE_END=========================================================
-  -->
-
-<beans xmlns="http://www.springframework.org/schema/beans"
-    xmlns:context="http://www.springframework.org/schema/context"
-    xmlns:mvc="http://www.springframework.org/schema/mvc"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
-    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
-    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
-
-	<bean id="modelLoader" class="org.openecomp.modelloader.service.ModelLoaderService" init-method="start"/>
-		
-
-</beans>
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index c256b26..0000000
--- a/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ============LICENSE_START=======================================================
-  MODEL LOADER SERVICE
-  ================================================================================
-  Copyright (C) 2017 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.
-  You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  ============LICENSE_END=========================================================
-  -->
-
-<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
-  <display-name>model-loader</display-name>
-  
-  <listener>
-	<listener-class>
-		org.springframework.web.context.ContextLoaderListener
-	</listener-class>
-  </listener>
-  
-  <servlet>
-    <servlet-name>rest</servlet-name>
-    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
-    <load-on-startup>1</load-on-startup>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>rest</servlet-name>
-    <url-pattern>/</url-pattern>
-  </servlet-mapping>
-</web-app>
