Add sdnr wt apigateway

Add complete sdnr wireless transport app apigateway

Change-Id: I133ece9cd78c8e5d1a4d74cca1b45feaaf4da9a5
Issue-ID: SDNC-571
Signed-off-by: Herbert Eiselt <herbert.eiselt@highstreet-technologies.com>
diff --git a/sdnr/wt/README.md b/sdnr/wt/README.md
new file mode 100644
index 0000000..6a339cf
--- /dev/null
+++ b/sdnr/wt/README.md
@@ -0,0 +1,9 @@
+# wt - wireless transport microservices
+
+## apigateway
+
+The API gateway provides WEB access to all wt related web service providers to prevent cross site requests. The Opendaylight default UI port is extendet by additonal URIs.
+
+  * /database to access elasticsearch
+  * /aai to access AAI
+  * /ms to access mediator servers
\ No newline at end of file
diff --git a/sdnr/wt/apigateway/feature/pom.xml b/sdnr/wt/apigateway/feature/pom.xml
new file mode 100644
index 0000000..f8ec8b2
--- /dev/null
+++ b/sdnr/wt/apigateway/feature/pom.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.feature.sdnr.wt
+ * ================================================================================
+ * Copyright (C) 2018 highstreet technologies GmbH 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=========================================================
+
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+  <artifactId>sdnr-wt-apigateway-feature</artifactId>
+  <version>0.4.1-SNAPSHOT</version>
+  <packaging>feature</packaging>
+  <name>ccsdk-features-sdnr-wt :: ${project.artifactId} :: feature</name>
+
+  <parent>
+    <groupId>org.onap.ccsdk.parent</groupId>
+    <artifactId>single-feature-parent</artifactId>
+    <version>1.2.1-SNAPSHOT</version>
+    <relativePath />
+  </parent>
+
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.opendaylight.mdsal.model</groupId>
+        <artifactId>mdsal-model-artifacts</artifactId>
+        <version>${odl.mdsal.model.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.opendaylight.controller</groupId>
+        <artifactId>mdsal-artifacts</artifactId>
+        <version>1.8.1</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
+  <dependencies>
+
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>sdnr-wt-apigateway-provider</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+
+  </dependencies>
+</project>
diff --git a/sdnr/wt/apigateway/installer/pom.xml b/sdnr/wt/apigateway/installer/pom.xml
new file mode 100755
index 0000000..1d18026
--- /dev/null
+++ b/sdnr/wt/apigateway/installer/pom.xml
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+  <artifactId>sdnr-wt-apigateway-installer</artifactId>
+  <version>0.4.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+  <name>ccsdk-features-sdnr-wt :: ${project.artifactId}</name>
+
+  <parent>
+    <groupId>org.onap.ccsdk.parent</groupId>
+    <artifactId>odlparent-lite</artifactId>
+    <version>1.2.1-SNAPSHOT</version>
+  </parent>
+
+  <properties>
+    <application.name>sdnr-wt-apigateway</application.name>
+    <include.transitive.dependencies>false</include.transitive.dependencies>
+  </properties>
+
+  <dependencies>
+
+    <dependency>
+      <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+      <artifactId>${application.name}-feature</artifactId>
+      <version>${project.version}</version>
+      <type>xml</type>
+      <classifier>features</classifier>
+      <exclusions>
+        <exclusion>
+          <groupId>*</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+      <artifactId>${application.name}-provider</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+
+
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>maven-repo-zip</id>
+            <goals>
+              <goal>single</goal>
+            </goals>
+            <phase>package</phase>
+            <configuration>
+              <attach>true</attach>
+              <finalName>stage/${application.name}-${project.version}</finalName>
+              <descriptors>
+                <descriptor>src/assembly/assemble_mvnrepo_zip.xml</descriptor>
+              </descriptors>
+              <appendAssemblyId>true</appendAssemblyId>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <executions>
+<!--           <execution> -->
+<!--             <id>copy-dependencies</id> -->
+<!--             <goals> -->
+<!--               <goal>copy-dependencies</goal> -->
+<!--             </goals> -->
+<!--             <phase>prepare-package</phase> -->
+<!--             <configuration> -->
+<!--               <transitive>true</transitive> -->
+<!--               <outputDirectory>${project.build.directory}/assembly/system</outputDirectory> -->
+<!--               <overWriteReleases>false</overWriteReleases> -->
+<!--               <overWriteSnapshots>true</overWriteSnapshots> -->
+<!--               <overWriteIfNewer>true</overWriteIfNewer> -->
+<!--               <useRepositoryLayout>true</useRepositoryLayout> -->
+<!--               <addParentPoms>false</addParentPoms> -->
+<!--               <copyPom>false</copyPom> -->
+<!--               <includeArtifactIds>sdnr-wt-apigateway-provider,${application.name}</includeArtifactIds> -->
+<!--               <scope>provided</scope> -->
+<!--             </configuration> -->
+<!--           </execution> -->
+          <execution>
+            <id>copy-nested-dependencies</id>
+            <goals>
+              <goal>copy-dependencies</goal>
+            </goals>
+            <phase>prepare-package</phase>
+            <configuration>
+              <transitive>true</transitive>
+              <outputDirectory>${project.build.directory}/assembly/system</outputDirectory>
+              <overWriteReleases>false</overWriteReleases>
+              <overWriteSnapshots>true</overWriteSnapshots>
+              <overWriteIfNewer>true</overWriteIfNewer>
+              <useRepositoryLayout>true</useRepositoryLayout>
+              <addParentPoms>false</addParentPoms>
+              <copyPom>false</copyPom>
+              <!--<includeArtifactIds>sdnr-wt-apigateway-provider,${application.name}</includeArtifactIds>-->
+              <!--<scope>provided</scope>-->
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/sdnr/wt/apigateway/installer/src/assembly/assemble_mvnrepo_zip.xml b/sdnr/wt/apigateway/installer/src/assembly/assemble_mvnrepo_zip.xml
new file mode 100644
index 0000000..c4eb9aa
--- /dev/null
+++ b/sdnr/wt/apigateway/installer/src/assembly/assemble_mvnrepo_zip.xml
@@ -0,0 +1,49 @@
+<!--
+  ============LICENSE_START=======================================================
+  ONAP : CCSDK
+  ================================================================================
+  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=========================================================
+  -->
+
+<!-- Defines how we build the .zip file which is our distribution. -->
+
+<assembly
+	xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+  <id>repo</id>
+	<formats>
+		<format>zip</format>
+	</formats>
+
+	<!--  we want "system" and related files right at the root level
+		  as this file is suppose to be unzip on top of a karaf
+		  distro. -->
+	<includeBaseDirectory>false</includeBaseDirectory>
+
+	<fileSets>
+		<fileSet>
+			<directory>target/assembly/</directory>
+			<outputDirectory>.</outputDirectory>
+			<excludes>
+			</excludes>
+		</fileSet>
+	</fileSets>
+
+
+
+</assembly>
diff --git a/sdnr/wt/apigateway/pom.xml b/sdnr/wt/apigateway/pom.xml
new file mode 100755
index 0000000..33ce772
--- /dev/null
+++ b/sdnr/wt/apigateway/pom.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+    	<groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+	<artifactId>sdnr-wt-apigateway-top</artifactId>
+	<version>0.4.1-SNAPSHOT</version>
+	<packaging>pom</packaging>
+	<name>ccsdk-features-sdnr-wt :: ${project.artifactId}</name>
+
+	<parent>
+		<groupId>org.onap.ccsdk.parent</groupId>
+		<artifactId>odlparent-lite</artifactId>
+                <version>1.2.1-SNAPSHOT</version>
+ 		<relativePath/>
+	</parent>
+
+
+	<modules>
+		<module>feature</module>
+		<module>provider</module>
+		<module>installer</module>
+	</modules>
+
+	<properties>
+		<feature-name>sdnr-wt-apigateway</feature-name>
+	</properties>
+</project>
diff --git a/sdnr/wt/apigateway/provider/pom.xml b/sdnr/wt/apigateway/provider/pom.xml
new file mode 100644
index 0000000..d375ee5
--- /dev/null
+++ b/sdnr/wt/apigateway/provider/pom.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- * ============LICENSE_START======================================================= 
+	* ONAP : CCSDK.sdnr.wt.apigateway.provider * ================================================================================ 
+	* Copyright (C) 2018 highstreet technologies GmbH 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========================================================= -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+	<artifactId>sdnr-wt-apigateway-provider</artifactId>
+	<version>0.4.1-SNAPSHOT</version>
+	<name>ccsdk-features-sdnr-wt :: ${project.artifactId}</name>
+	<packaging>bundle</packaging>
+	<properties>
+		<checkstyle.skip>true</checkstyle.skip>
+	</properties>
+	<parent>
+		<groupId>org.onap.ccsdk.parent</groupId>
+		<artifactId>binding-parent</artifactId>
+		<version>1.2.1-SNAPSHOT</version>
+		<relativePath />
+	</parent>
+	<dependencies>
+		<dependency>
+			<groupId>javax.servlet</groupId>
+			<artifactId>servlet-api</artifactId>
+			<version>2.5</version>
+		</dependency>
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>slf4j-simple</artifactId>
+			<version>1.7.25</version>
+		</dependency>
+		<dependency>
+			<groupId>org.json</groupId>
+			<artifactId>json</artifactId>
+			<version>20131018</version>
+		</dependency>
+		<dependency>
+			<groupId>org.mockito</groupId>
+			<artifactId>mockito-core</artifactId>
+			<version>2.23.4</version>
+			<scope>test</scope>
+		</dependency>
+
+	</dependencies>
+	<build>
+		<plugins>
+			<!-- fixed bug for sonarcube -->
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<configuration>
+					<useSystemClassLoader>false</useSystemClassLoader>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+</project>
diff --git a/sdnr/wt/apigateway/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/apigateway/AaiServlet.java b/sdnr/wt/apigateway/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/apigateway/AaiServlet.java
new file mode 100644
index 0000000..e73d5c6
--- /dev/null
+++ b/sdnr/wt/apigateway/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/apigateway/AaiServlet.java
@@ -0,0 +1,74 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.apps.sdnr.wt.apigateway
+ * ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH 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.onap.ccsdk.features.sdnr.wt.apigateway;
+
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class AaiServlet extends BaseServlet {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 5946205120796162644L;
+	private static final String OFFLINE_RESPONSE_MESSAGE = "AAI interface is offline";
+
+	public AaiServlet() {
+		super();
+	}
+
+	@Override
+	protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		resp.setStatus(200);
+	}
+
+	@Override
+	protected String getOfflineResponse() {
+		return OFFLINE_RESPONSE_MESSAGE;
+	}
+
+	@Override
+	protected boolean isOff() {
+		return MyProperties.getInstance().isAAIOff();
+	}
+
+	@Override
+	protected String getRemoteUrl(String uri) {
+
+		if (uri.startsWith("/")) {
+			uri = uri.substring(1);
+		}
+		if (uri.startsWith("aai")) {
+			uri = uri.substring("aai".length());
+		}
+		if (uri.startsWith("/")) {
+			uri = uri.substring(1);
+		}
+		String base = MyProperties.getInstance().getAAIBaseUrl();
+		if (!base.endsWith("/")) {
+			base += "/";
+		}
+
+		return base + uri;
+	}
+}
diff --git a/sdnr/wt/apigateway/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/apigateway/BaseServlet.java b/sdnr/wt/apigateway/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/apigateway/BaseServlet.java
new file mode 100644
index 0000000..b2bc30c
--- /dev/null
+++ b/sdnr/wt/apigateway/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/apigateway/BaseServlet.java
@@ -0,0 +1,350 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.apps.sdnr.wt.apigateway
+ * ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH 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.onap.ccsdk.features.sdnr.wt.apigateway;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.charset.StandardCharsets;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Map;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.TrustManager;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class BaseServlet extends HttpServlet {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 7403047480257892794L;
+	private static Logger LOG = LoggerFactory.getLogger(BaseServlet.class);
+	private static SSLContext sc;
+	private boolean trustAll = false;
+	private static TrustManager[] trustCerts = null;
+	private static final int BUFSIZE = 2048;
+
+	protected abstract String getOfflineResponse();
+
+	protected abstract boolean isOff();
+
+	protected abstract String getRemoteUrl(String uri);
+
+	/**
+	 *
+	 * @throws NoSuchAlgorithmException
+	 * @throws KeyManagementException
+	 */
+	private static void setupSslTrustAll(boolean trustall) throws NoSuchAlgorithmException, KeyManagementException {
+
+		sc = SSLContext.getInstance("TLSv1.2");
+		if (trustall) {
+			if (trustCerts == null) {
+				trustCerts = new TrustManager[] { new javax.net.ssl.X509TrustManager() {
+					@Override
+					public java.security.cert.X509Certificate[] getAcceptedIssuers() {
+						return new java.security.cert.X509Certificate[] {};
+					}
+
+					@Override
+					public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
+						// do not check anything when trust all
+					}
+
+					@Override
+					public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
+						// do not check anything when trust all
+					}
+				} };
+			}
+		} else {
+			if (trustCerts != null)
+				trustCerts = null;
+		}
+		// Init the SSLContext with a TrustManager[] and SecureRandom()
+		sc.init(null, trustCerts, new java.security.SecureRandom());
+	}
+
+	public BaseServlet() {
+		try {
+			MyProperties.Instantiate();
+		} catch (Exception e) {
+			LOG.error(e.getMessage());
+		}
+		this.trysslSetup(true);
+	}
+
+	private void trysslSetup() {
+		this.trysslSetup(false);
+	}
+
+	/**
+	 * init or deinit ssl insecure mode regarding to property
+	 * 
+	 * @param force init independent from property
+	 */
+	private void trysslSetup(boolean force) {
+		// if trustall config has changed
+		if (force || trustAll != MyProperties.getInstance().trustInsecure()) {
+			// resetup ssl config
+			trustAll = MyProperties.getInstance().trustInsecure();
+			try {
+				setupSslTrustAll(trustAll);
+			} catch (Exception e) {
+				LOG.error("problem setting up SSL: {}", e.getMessage());
+			}
+		}
+	}
+
+	protected void sendOffResponse(HttpServletResponse response) {
+		response.setStatus(200);// HTML/OK
+		response.setHeader("Content-Type", "text/html; charset=utf-8");
+		try {
+			response.getOutputStream().write(this.getOfflineResponse().getBytes(StandardCharsets.UTF_8));
+		} catch (IOException e) {
+			LOG.debug("problem writing offline response");
+		}
+
+	}
+
+	@Override
+	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		if (this.isOff()) {
+			this.sendOffResponse(resp);
+		} else {
+			this.trysslSetup();
+			HttpURLConnection http = null;
+			try {
+				http = (HttpURLConnection) this.getConnection(req, "GET");
+			} catch (IOException e) {
+				LOG.warn(e.getMessage());
+			}
+			if (http != null) {
+				try {
+					this.handleRequest(http, req, resp, "GET");
+				} catch (IOException e) {
+					LOG.warn(e.getMessage());
+				}
+				http.disconnect();
+			}
+		}
+	}
+
+	@Override
+	protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		if (this.isOff()) {
+			this.sendOffResponse(resp);
+		} else {
+			this.trysslSetup();
+			HttpURLConnection http = null;
+			try {
+				http = (HttpURLConnection) this.getConnection(req, "PUT");
+			} catch (IOException e) {
+				LOG.warn(e.getMessage());
+			}
+			if (http != null) {
+				try {
+					this.handleRequest(http, req, resp, "PUT");
+				} catch (IOException e) {
+					LOG.warn(e.getMessage());
+				}
+				http.disconnect();
+			}
+		}
+	}
+
+	@Override
+	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		if (this.isOff()) {
+			this.sendOffResponse(resp);
+		} else {
+			this.trysslSetup();
+			HttpURLConnection http = null;
+			try {
+				http = (HttpURLConnection) this.getConnection(req, "POST");
+			} catch (IOException e) {
+				LOG.warn(e.getMessage());
+			}
+			if (http != null) {
+				try {
+					this.handleRequest(http, req, resp, "POST");
+				} catch (IOException e) {
+					LOG.warn(e.getMessage());
+				}
+				http.disconnect();
+			}
+		}
+	}
+
+	@Override
+	protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		if (this.isOff()) {
+			this.sendOffResponse(resp);
+		} else {
+			this.trysslSetup();
+			HttpURLConnection http = null;
+			try {
+				http = (HttpURLConnection) this.getConnection(req, "DELETE");
+			} catch (IOException e) {
+				LOG.warn(e.getMessage());
+			}
+			if (http != null) {
+				try {
+					this.handleRequest(http, req, resp, "DELETE");
+				} catch (IOException e) {
+					LOG.warn(e.getMessage());
+				}
+				http.disconnect();
+			}
+		}
+	}
+
+	private URLConnection getConnection(HttpServletRequest req, final String method) throws IOException {
+
+		LOG.debug("{} Request", method);
+		String surl = this.getRemoteUrl(req.getRequestURI());
+		LOG.debug("RemoteURL: {}", surl);
+		URL url = new URL(surl);
+		URLConnection http = url.openConnection();
+		((HttpURLConnection) http).setRequestMethod(method);
+		if (url.toString().startsWith("https")) {
+			((HttpsURLConnection) http).setSSLSocketFactory(sc.getSocketFactory());
+			if (trustAll) {
+				HostnameVerifier allHostsValid = new HostnameVerifier() {
+
+					@Override
+					public boolean verify(String hostname, SSLSession session) {
+						// do not verify host if trust all
+						return true;
+					}
+				};
+				((HttpsURLConnection) http).setHostnameVerifier(allHostsValid);
+			}
+		}
+		http.setDoOutput(true);
+		// copy request headers
+		String s = "";
+		Enumeration<String> headers = req.getHeaderNames();
+		while (headers.hasMoreElements()) {
+			String h = headers.nextElement();
+			String v = req.getHeader(h);
+			if (h != null && h.equals("Host")) {
+				v = url.getAuthority();
+			}
+			s += String.format("%s:%s;", h, v);
+			http.setRequestProperty(h, v);
+		}
+		LOG.debug("Request Headers: {}", s);
+		return http;
+	}
+
+	private void handleRequest(HttpURLConnection http, HttpServletRequest req, HttpServletResponse resp, String method)
+			throws IOException {
+		byte[] buffer = new byte[BUFSIZE];
+		int len = 0, lensum = 0;
+		// send request
+		// Send the message to destination
+		OutputStream output = null;
+		if (!method.equals("GET")) {
+			try {
+				output = http.getOutputStream();
+			} catch (Exception e) {
+				LOG.debug("problem reading output stream: {}", e.getMessage());
+			}
+		}
+		if (output != null) {
+			while (true) {
+				len = req.getInputStream().read(buffer, 0, BUFSIZE);
+				if (len <= 0) {
+					break;
+				}
+				lensum += len;
+				output.write(buffer, 0, len);
+			}
+		}
+		LOG.debug("written {} data out", lensum);
+		int responseCode = http.getResponseCode();
+		// Receive answer
+		InputStream response;
+		if (responseCode >= 200 && responseCode < 300) {
+			response = http.getInputStream();
+		} else {
+			response = http.getErrorStream();
+			if (response == null) {
+				http.getInputStream();
+			}
+		}
+
+		LOG.debug("ResponseCode: {}", responseCode);
+		resp.setStatus(responseCode);
+		Map<String, List<String>> set = http.getHeaderFields();
+		String s = "";
+		if (set != null) {
+			for (Map.Entry<String, List<String>> entry : set.entrySet()) {
+				if (entry.getKey() == null) {
+					continue;
+				}
+				for (String v : entry.getValue()) {
+					resp.setHeader(entry.getKey(), v);
+					s += String.format("%s:%s;", entry.getKey(), v);
+				}
+				if (MyProperties.getInstance().corsEnabled()) {
+					resp.setHeader("Access-Control-Allow-Origin", "*");
+					// resp.setHeader("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE");
+					resp.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
+				}
+
+			}
+		}
+		LOG.debug("Received Headers: {}", s);
+		lensum = 0;
+		if (response != null) {
+			while (true) {
+				len = response.read(buffer, 0, BUFSIZE);
+				if (len <= 0) {
+					break;
+				}
+				lensum += len;
+				resp.getOutputStream().write(buffer, 0, len);
+			}
+		} else {
+			LOG.debug("response is null");
+		}
+		LOG.debug("Received {} bytes", lensum);
+	}
+
+}
diff --git a/sdnr/wt/apigateway/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/apigateway/EsServlet.java b/sdnr/wt/apigateway/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/apigateway/EsServlet.java
new file mode 100644
index 0000000..9d276ff
--- /dev/null
+++ b/sdnr/wt/apigateway/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/apigateway/EsServlet.java
@@ -0,0 +1,67 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.apps.sdnr.wt.apigateway
+ * ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH 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.onap.ccsdk.features.sdnr.wt.apigateway;
+
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class EsServlet extends BaseServlet {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -3996363343749995011L;
+	private static final String OFFLINE_RESPONSE_MESSAGE = "Database interface is offline";
+
+	public EsServlet() {
+		super();
+	}
+
+	@Override
+	protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		if (MyProperties.getInstance().corsEnabled()) {
+			resp.addHeader("Access-Control-Allow-Origin", "*");
+			resp.addHeader("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE");
+			resp.addHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
+		}
+		resp.setStatus(200);
+	}
+
+	@Override
+	protected String getOfflineResponse() {
+		return OFFLINE_RESPONSE_MESSAGE;
+	}
+
+	@Override
+	protected boolean isOff() {
+		return MyProperties.getInstance().isEsOff();
+	}
+
+	@Override
+	protected String getRemoteUrl(String uri) {
+		if (uri != null && uri.length() > 0) {
+			uri = uri.substring("/database".length());
+		}
+		return MyProperties.getInstance().getEsBaseUrl() + uri;
+	}
+}
diff --git a/sdnr/wt/apigateway/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/apigateway/MsServlet.java b/sdnr/wt/apigateway/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/apigateway/MsServlet.java
new file mode 100644
index 0000000..2769793
--- /dev/null
+++ b/sdnr/wt/apigateway/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/apigateway/MsServlet.java
@@ -0,0 +1,74 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.apps.sdnr.wt.apigateway
+ * ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH 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.onap.ccsdk.features.sdnr.wt.apigateway;
+
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MsServlet extends BaseServlet {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = -5361461082028405171L;
+	private static final String OFFLINE_RESPONSE_MESSAGE = "MediatorServer interface is offline";
+
+	public MsServlet() {
+
+		super();
+	}
+
+	@Override
+	protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		resp.setStatus(200);
+	}
+
+	@Override
+	protected String getOfflineResponse() {
+		return OFFLINE_RESPONSE_MESSAGE;
+	}
+
+	@Override
+	protected boolean isOff() {
+		return true;
+	}
+
+	@Override
+	protected String getRemoteUrl(String uri) {
+		String dbServerId = "0";
+		if (uri == null)
+			uri = "";
+		if (uri.length() > 0) {
+			uri = uri.substring("/ms".length());
+			dbServerId = uri.substring(0, uri.indexOf("/"));
+		}
+		return this.getBaseUrl(dbServerId) + uri;
+	}
+
+	protected String getBaseUrl(String dbServerId) {
+		return "";
+	}
+}
diff --git a/sdnr/wt/apigateway/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/apigateway/MyProperties.java b/sdnr/wt/apigateway/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/apigateway/MyProperties.java
new file mode 100644
index 0000000..3d66f52
--- /dev/null
+++ b/sdnr/wt/apigateway/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/apigateway/MyProperties.java
@@ -0,0 +1,171 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.apps.sdnr.wt.apigateway
+ * ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH 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.onap.ccsdk.features.sdnr.wt.apigateway;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import org.json.JSONArray;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MyProperties {
+
+	private static Logger LOG = LoggerFactory.getLogger(MyProperties.class);
+	public static final String PROPFILE = "etc/apigateway.properties";
+	private static final String DEFAULT_AAI_HEADERS = "[\"X-FromAppId:SDNR\",\"Authorization:Basic QUFJOkFBSQ==\"]";
+	private static final String DEFAULT_CORSENABLED = "0";
+	private static final String DEFAULT_TRUSTINSECURE = "0";
+	private static final String DEFAULT_ESDATABASE = "http://localhost:9200";
+	private static final String DEFAULT_AAI = "off";
+
+	@Override
+	public String toString() {
+		return "MyProperties [aaiBase=" + aaiBase + ", aaiHeaders=" + aaiHeaders + ", esBase=" + esBase
+				+ ", trustInsecure=" + trustInsecure + ", corsEnabled=" + corsEnabled + "]";
+	}
+
+	private static MyProperties mObj;
+
+	private String aaiBase;
+	private Map<String, String> aaiHeaders;
+	private String esBase;
+
+	private boolean trustInsecure;
+
+	private boolean corsEnabled;
+
+	public boolean isAAIOff() {
+		return this.aaiBase == null ? true : this.aaiBase.equals("off");
+	}
+
+	public boolean isEsOff() {
+		return this.esBase == null ? true : this.esBase.equals("off");
+	}
+
+	public String getAAIBaseUrl() {
+		return this.aaiBase;
+	}
+
+	public String getEsBaseUrl() {
+		return this.esBase;
+	}
+
+	public Map<String, String> getAAIHeaders() {
+		return this.aaiHeaders;
+	}
+
+	public boolean trustInsecure() {
+		return this.trustInsecure;
+	}
+
+	public boolean corsEnabled() {
+		return this.corsEnabled;
+	}
+
+	public static MyProperties Instantiate() throws IOException, NumberFormatException {
+		return Instantiate(new File(PROPFILE));
+	}
+
+	public static MyProperties Instantiate(File file) throws IOException, NumberFormatException {
+
+		return Instantiate(file, false);
+	}
+
+	public static MyProperties Instantiate(File file, boolean force) throws IOException, NumberFormatException {
+		if (mObj == null || force) {
+			mObj = new MyProperties(file);
+			LOG.debug("instantiated: {}", mObj.toString());
+		}
+		return mObj;
+	}
+
+	private MyProperties(File file) throws IOException, NumberFormatException {
+		this.aaiBase = "off";
+		this.trustInsecure = false;
+		if (!file.exists()) {
+			this.writeDefaults(file);
+		}
+		this.load(new FileInputStream(file));
+	}
+
+	public void load(InputStream in) throws IOException, NumberFormatException {
+
+		Properties defaultProps = new Properties();
+		defaultProps.load(in);
+		in.close();
+
+		this.aaiBase = defaultProps.getProperty("aai", DEFAULT_AAI);
+		this.aaiHeaders = _parseHeadersMap(defaultProps.getProperty("aaiHeaders", DEFAULT_AAI_HEADERS));
+		this.esBase = defaultProps.getProperty("database", DEFAULT_ESDATABASE);
+		this.trustInsecure = Integer.parseInt(defaultProps.getProperty("insecure", DEFAULT_TRUSTINSECURE)) == 1;
+		this.corsEnabled = Integer.parseInt(defaultProps.getProperty("cors", DEFAULT_CORSENABLED)) == 1;
+	}
+
+	private static Map<String, String> _parseHeadersMap(String s) {
+		Map<String, String> r = new HashMap<>();
+		try {
+			JSONArray a = new JSONArray(s);
+			if ( a.length() > 0) {
+				for (int i = 0; i < a.length(); i++) {
+					String item = a.getString(i);
+					String[] hlp = item.split(":");
+					if (hlp.length > 1) {
+						r.put(hlp[0], hlp[1]);
+					}
+				}
+			}
+		} catch (Exception e) {
+			LOG.warn("problem loading headers map: {}",e.getMessage());
+		}
+		return r;
+	}
+
+	private String writeDefaults(File f) throws IOException {
+		StringBuilder sb = new StringBuilder();
+		final String LR = "\n";
+		FileWriter fw = new FileWriter(f);
+		sb.append("aai=" + DEFAULT_AAI + LR);
+		sb.append("aaiHeaders=" + DEFAULT_AAI_HEADERS + LR);
+		sb.append("database=" + DEFAULT_ESDATABASE + LR);
+		sb.append("insecure=" + DEFAULT_TRUSTINSECURE + LR);
+		sb.append("cors=" + DEFAULT_CORSENABLED);
+		try {
+			fw.write(sb.toString());
+		} catch (Exception e) {
+			LOG.warn("problem writing default values to propertyfile {} : {}", f.getAbsolutePath() , e.getMessage());
+		} finally {
+			fw.close();
+		}
+		return sb.toString();
+	}
+
+	public static MyProperties getInstance() {
+		return mObj;
+	}
+
+}
diff --git a/sdnr/wt/apigateway/provider/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/sdnr/wt/apigateway/provider/src/main/resources/OSGI-INF/blueprint/blueprint.xml
new file mode 100644
index 0000000..2bfb1aa
--- /dev/null
+++ b/sdnr/wt/apigateway/provider/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns:jaxrs="http://cxf.apache.org/blueprint/jaxrs">
+
+    <bean id="aaiServlet"
+        class="org.onap.ccsdk.features.sdnr.wt.apigateway.AaiServlet">
+    </bean>
+
+   <service interface="javax.servlet.http.HttpServlet" ref="aaiServlet">
+        <service-properties>
+            <entry key="alias" value="/aai" />
+        </service-properties>
+    </service>
+
+	<bean id="esServlet"
+        class="org.onap.ccsdk.features.sdnr.wt.apigateway.EsServlet">
+    </bean>
+
+   <service interface="javax.servlet.http.HttpServlet" ref="esServlet">
+        <service-properties>
+            <entry key="alias" value="/database" />
+        </service-properties>
+    </service>
+
+    <bean id="msServlet"
+        class="org.onap.ccsdk.features.sdnr.wt.apigateway.MsServlet">
+    </bean>
+
+   <service interface="javax.servlet.http.HttpServlet" ref="msServlet">
+        <service-properties>
+            <entry key="alias" value="/ms" />
+        </service-properties>
+    </service>
+</blueprint>
diff --git a/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/AllTests.java b/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/AllTests.java
new file mode 100644
index 0000000..a34d3ca
--- /dev/null
+++ b/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/AllTests.java
@@ -0,0 +1,31 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.apps.sdnr.wt.apigateway
+ * ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH 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.onap.ccsdk.features.sdnr.wt.apigateway.test;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
+
+@RunWith(Suite.class)
+@SuiteClasses({ TestAaiServlet.class, TestProperties.class,TestDatabaseServlet.class, TestMediatorServerServlet.class })
+public class AllTests {
+
+}
diff --git a/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/TestAaiServlet.java b/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/TestAaiServlet.java
new file mode 100644
index 0000000..fd76be7
--- /dev/null
+++ b/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/TestAaiServlet.java
@@ -0,0 +1,76 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.apps.sdnr.wt.apigateway
+ * ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH 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.onap.ccsdk.features.sdnr.wt.apigateway.test;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+
+import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.apigateway.MyProperties;
+import org.onap.ccsdk.features.sdnr.wt.apigateway.test.helper.HelpAaiServlet;
+import org.onap.ccsdk.features.sdnr.wt.apigateway.test.helper.HelpEsServlet;
+import org.onap.ccsdk.features.sdnr.wt.apigateway.test.helper.HelpServletBase;
+
+public class TestAaiServlet extends HelpServletBase{
+
+	public TestAaiServlet() {
+		super("/aai",40001);
+	}
+	
+	@Test
+	public void test() throws ServletException, IOException {
+		
+		String tmpFilename = "tmp.cfg";
+		File tmpFile = new File(tmpFilename);
+		if (tmpFile.exists())
+			tmpFile.delete();
+		MyProperties properties = MyProperties.Instantiate(tmpFile,true);
+		String query = "{\"query\":{\"match_all\":{}}}";
+		String tmpconfigcontent = "aai=off" + LR + "aaiHeaders=[]" + LR + "database=off" + LR + "insecure=0" + LR
+				+ "cors=0";
+		String tmpconfigcontent2 = "aai=http://" + HOST + ":" + this.port + LR + "aaiHeaders=[]" + LR + "database=off"+ LR
+				+ "insecure=1" + LR + "cors=1";
+		this.setServlet(new HelpAaiServlet());
+		// test diabled message
+		properties.load(new ByteArrayInputStream(tmpconfigcontent.getBytes()));
+		String expectedResponse = "offline";
+		testrequest(HTTPMETHOD_GET, query, expectedResponse, false);
+		testrequest(HTTPMETHOD_POST, query, expectedResponse, false);
+		testrequest(HTTPMETHOD_PUT, query, expectedResponse, false);
+		testrequest(HTTPMETHOD_DELETE, query, expectedResponse, false);
+		
+		// initEsTestWebserver(port);
+		properties.load(new ByteArrayInputStream(tmpconfigcontent2.getBytes()));
+		testrequest(HTTPMETHOD_GET, query, HelpEsServlet.RESPONSE_GET, true);
+		testrequest(HTTPMETHOD_POST, query, HelpEsServlet.RESPONSE_POST, true);
+		testrequest(HTTPMETHOD_PUT, query, HelpEsServlet.RESPONSE_PUT, true);
+		testrequest(HTTPMETHOD_DELETE, query, HelpEsServlet.RESPONSE_DELETE, true);
+		testrequest(HTTPMETHOD_OPTIONS, query, "", false);
+		// stopTestWebserver();
+		if (tmpFile.exists())
+			tmpFile.delete();
+		
+	}
+
+}
diff --git a/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/TestDatabaseServlet.java b/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/TestDatabaseServlet.java
new file mode 100644
index 0000000..143766f
--- /dev/null
+++ b/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/TestDatabaseServlet.java
@@ -0,0 +1,81 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.apps.sdnr.wt.apigateway
+ * ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH 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.onap.ccsdk.features.sdnr.wt.apigateway.test;
+
+import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.apigateway.MyProperties;
+import org.onap.ccsdk.features.sdnr.wt.apigateway.test.helper.HelpEsServlet;
+import org.onap.ccsdk.features.sdnr.wt.apigateway.test.helper.HelpServletBase;
+
+import java.io.*;
+import javax.servlet.ServletException;
+
+public class TestDatabaseServlet extends HelpServletBase{
+
+	public TestDatabaseServlet() {
+		super("/database",40002);
+	}
+
+
+
+	final String LR = "\n";
+
+	
+	
+	@Test
+	public void test() throws ServletException, IOException {
+
+		String tmpFilename = "tmp1.cfg";
+		File tmpFile = new File(tmpFilename);
+		if (tmpFile.exists())
+			tmpFile.delete();
+		MyProperties properties = MyProperties.Instantiate(tmpFile,true);
+		String query = "{\"query\":{\"match_all\":{}}}";
+		String tmpconfigcontent = "aai=off" + LR + "aaiHeaders=[]" + LR + "database=off" + LR + "insecure=0" + LR
+				+ "cors=0";
+		String tmpconfigcontent2 = "aai=off" + LR + "aaiHeaders=[]" + LR + "database=http://" + HOST + ":" + this.port + LR
+				+ "insecure=1" + LR + "cors=1";
+		this.setServlet(new HelpEsServlet());
+		// test diabled message
+		properties.load(new ByteArrayInputStream(tmpconfigcontent.getBytes()));
+		String expectedResponse = "offline";
+		testrequest(HTTPMETHOD_GET, query, expectedResponse, false);
+		testrequest(HTTPMETHOD_POST, query, expectedResponse, false);
+		testrequest(HTTPMETHOD_PUT, query, expectedResponse, false);
+		testrequest(HTTPMETHOD_DELETE, query, expectedResponse, false);
+		
+		// initEsTestWebserver(port);
+		properties.load(new ByteArrayInputStream(tmpconfigcontent2.getBytes()));
+		testrequest(HTTPMETHOD_GET, query, HelpEsServlet.RESPONSE_GET, true);
+		testrequest(HTTPMETHOD_POST, query, HelpEsServlet.RESPONSE_POST, true);
+		testrequest(HTTPMETHOD_PUT, query, HelpEsServlet.RESPONSE_PUT, true);
+		testrequest(HTTPMETHOD_DELETE, query, HelpEsServlet.RESPONSE_DELETE, true);
+		testrequest(HTTPMETHOD_OPTIONS, query, "", false);
+		// stopTestWebserver();
+		 
+		
+		if (tmpFile.exists())
+			tmpFile.delete();
+		
+		
+	}
+
+}
diff --git a/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/TestMediatorServerServlet.java b/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/TestMediatorServerServlet.java
new file mode 100644
index 0000000..d4197c6
--- /dev/null
+++ b/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/TestMediatorServerServlet.java
@@ -0,0 +1,71 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.apps.sdnr.wt.apigateway
+ * ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH 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.onap.ccsdk.features.sdnr.wt.apigateway.test;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+
+import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.apigateway.MyProperties;
+import org.onap.ccsdk.features.sdnr.wt.apigateway.test.helper.HelpMsServlet;
+import org.onap.ccsdk.features.sdnr.wt.apigateway.test.helper.HelpServletBase;
+
+public class TestMediatorServerServlet extends HelpServletBase{
+
+	private static final int PORT = 40004;
+
+	public TestMediatorServerServlet() {
+		super("/ms",PORT);
+	}
+	
+	@Test
+	public void test() throws ServletException, IOException {
+		
+		String tmpFilename = "tmp3.cfg";
+		File tmpFile = new File(tmpFilename);
+		if (tmpFile.exists())
+			tmpFile.delete();
+		MyProperties.Instantiate(tmpFile,true);
+		String query = "{\"query\":{\"match_all\":{}}}";
+		HelpMsServlet servlet = new HelpMsServlet();
+		this.setServlet(servlet);
+		// test diabled message
+		servlet.setOfflineStatus(true);
+		servlet.setBaseUrl("http://localhost:"+PORT);
+		String expectedResponse = "offline";
+		testrequest(HTTPMETHOD_GET, query, expectedResponse, false);
+		testrequest(HTTPMETHOD_POST, query, expectedResponse, false);
+		testrequest(HTTPMETHOD_PUT, query, expectedResponse, false);
+		testrequest(HTTPMETHOD_DELETE, query, expectedResponse, false);
+		
+		servlet.setOfflineStatus(false);
+		testrequest(HTTPMETHOD_GET, query, HelpMsServlet.RESPONSE_GET, true);
+		testrequest(HTTPMETHOD_POST, query, HelpMsServlet.RESPONSE_POST, true);
+		testrequest(HTTPMETHOD_PUT, query, HelpMsServlet.RESPONSE_PUT, true);
+		testrequest(HTTPMETHOD_DELETE, query, HelpMsServlet.RESPONSE_DELETE, true);
+		testrequest(HTTPMETHOD_OPTIONS, query, "", false);
+		 
+	}
+
+}
diff --git a/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/TestProperties.java b/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/TestProperties.java
new file mode 100644
index 0000000..1a63240
--- /dev/null
+++ b/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/TestProperties.java
@@ -0,0 +1,108 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.apps.sdnr.wt.apigateway
+ * ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH 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.onap.ccsdk.features.sdnr.wt.apigateway.test;
+
+import static org.junit.Assert.*;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.apigateway.MyProperties;
+
+public class TestProperties {
+
+	private static final boolean DEFAULT_CORSENABLED = false;
+	private static final boolean DEFAULT_AAIOFF = true;
+	private static final boolean DEFAULT_ESOFF = false;
+	private static final boolean DEFAULT_TRUSTINSECURE = false;
+	private static final String DEFAULT_AAIBASEURL = "off";
+	private static Map<String, String> DEFAULT_AAIHEADERS = new HashMap<String, String>();
+	private static final String DEFAULT_ESBASEURL = "http://localhost:9200";
+
+	private static final boolean CUSTOM_CORSENABLED = true;
+	private static final boolean CUSTOM_AAIOFF = false;
+	private static final boolean CUSTOM_ESOFF = false;
+	private static final boolean CUSTOM_TRUSTINSECURE = true;
+	private static final String CUSTOM_AAIBASEURL = "https://aai.tld:2214";
+	private static Map<String, String> CUSTOM_AAIHEADERS = new HashMap<String, String>();
+	private static final String CUSTOM_ESBASEURL = "http://localhost:9200";
+
+	private static final String LR = "\n";
+
+	@Test
+	public void test() {
+		final String tmpFilename = "tmp2.cfg";
+		DEFAULT_AAIHEADERS.put("X-FromAppId", "SDNR");
+		DEFAULT_AAIHEADERS.put("Authorization", "Basic QUFJOkFBSQ==");
+		CUSTOM_AAIHEADERS.put("X-FromAppId", "SDNC");
+		CUSTOM_AAIHEADERS.put("Authorization", "Basic 1234");
+		final String TESTPROPERTYFILECONTENT = "aai=" + CUSTOM_AAIBASEURL + LR + "aaiHeaders=[\"X-FromAppId:"
+				+ CUSTOM_AAIHEADERS.get("X-FromAppId") + "\",\"Authorization:" + CUSTOM_AAIHEADERS.get("Authorization")
+				+ "\"]" + LR + "database=" + CUSTOM_ESBASEURL + LR + "insecure=" + (CUSTOM_TRUSTINSECURE ? "1" : "0")
+				+ LR + "cors=" + (CUSTOM_CORSENABLED ? "1" : "0");
+		File ftest = new File(tmpFilename);
+		// delete autogenerated testfile
+		if (ftest.exists())
+			ftest.delete();
+		MyProperties prop = null;
+		ftest = new File(tmpFilename);
+		try {
+			prop = MyProperties.Instantiate(ftest, true);
+		} catch (Exception e) {
+			fail("error instantiating properties");
+		}
+		assertNotNull("problem without exception instantiating properties", prop);
+
+		assertEquals("default config file was not created", true, ftest.exists());
+
+		// test default values
+		assertEquals("default value is not correct", DEFAULT_CORSENABLED, prop.corsEnabled());
+		assertEquals("default value is not correct", DEFAULT_AAIOFF, prop.isAAIOff());
+		assertEquals("default value is not correct", DEFAULT_ESOFF, prop.isEsOff());
+		assertEquals("default value is not correct", DEFAULT_TRUSTINSECURE, prop.trustInsecure());
+		assertEquals("default value is not correct", DEFAULT_AAIBASEURL, prop.getAAIBaseUrl());
+		assertEquals("default value is not correct", DEFAULT_AAIHEADERS, prop.getAAIHeaders());
+		assertEquals("default value is not correct", DEFAULT_ESBASEURL, prop.getEsBaseUrl());
+
+		try {
+			prop.load(new ByteArrayInputStream(TESTPROPERTYFILECONTENT.getBytes()));
+		} catch (Exception e) {
+			fail("error loading custom values into properties");
+		}
+
+		// test custom values
+		assertEquals("custom value is not correct", CUSTOM_CORSENABLED, prop.corsEnabled());
+		assertEquals("custom value is not correct", CUSTOM_AAIOFF, prop.isAAIOff());
+		assertEquals("custom value is not correct", CUSTOM_ESOFF, prop.isEsOff());
+		assertEquals("custom value is not correct", CUSTOM_TRUSTINSECURE, prop.trustInsecure());
+		assertEquals("custom value is not correct", CUSTOM_AAIBASEURL, prop.getAAIBaseUrl());
+		assertEquals("custom value is not correct", CUSTOM_AAIHEADERS, prop.getAAIHeaders());
+		assertEquals("custom value is not correct", CUSTOM_ESBASEURL, prop.getEsBaseUrl());
+
+		// delete autogenerated testfile
+		ftest.delete();
+
+	}
+
+}
diff --git a/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/helper/HelpAaiServlet.java b/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/helper/HelpAaiServlet.java
new file mode 100644
index 0000000..5c28c85
--- /dev/null
+++ b/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/helper/HelpAaiServlet.java
@@ -0,0 +1,59 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.apps.sdnr.wt.apigateway
+ * ================================================================================
+ * Copyright (C) 2018 highstreet technologies GmbH 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.onap.ccsdk.features.sdnr.wt.apigateway.test.helper;
+
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.onap.ccsdk.features.sdnr.wt.apigateway.AaiServlet;
+
+public class HelpAaiServlet extends AaiServlet implements IPublicServlet{
+
+	public static final String RESPONSE_GET = "This is the response get";
+	public static final String RESPONSE_POST = "This is the response post";
+	public static final String RESPONSE_PUT = "This is the response put";
+	public static final String RESPONSE_DELETE = "This is the response delete";
+	public static final String RESPONSE_OPTIONS = "This is the response options";
+
+	@Override
+	public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		super.doGet(req, resp);
+	}
+	@Override
+	public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		super.doPost(req, resp);
+	}
+	@Override
+	public void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		super.doPut(req, resp);
+	}
+	@Override
+	public void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		super.doOptions(req, resp);
+	}
+	@Override
+	public void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		super.doDelete(req, resp);
+	}
+}
diff --git a/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/helper/HelpEsServlet.java b/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/helper/HelpEsServlet.java
new file mode 100644
index 0000000..a9cb06b
--- /dev/null
+++ b/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/helper/HelpEsServlet.java
@@ -0,0 +1,59 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.apps.sdnr.wt.apigateway
+ * ================================================================================
+ * Copyright (C) 2018 highstreet technologies GmbH 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.onap.ccsdk.features.sdnr.wt.apigateway.test.helper;
+
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.onap.ccsdk.features.sdnr.wt.apigateway.EsServlet;
+
+public class HelpEsServlet extends EsServlet implements IPublicServlet {
+
+	public static final String RESPONSE_GET = "This is the response get";
+	public static final String RESPONSE_POST = "This is the response post";
+	public static final String RESPONSE_PUT = "This is the response put";
+	public static final String RESPONSE_DELETE = "This is the response delete";
+	public static final String RESPONSE_OPTIONS = "This is the response options";
+
+	@Override
+	public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		super.doGet(req, resp);
+	}
+	@Override
+	public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		super.doPost(req, resp);
+	}
+	@Override
+	public void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		super.doPut(req, resp);
+	}
+	@Override
+	public void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		super.doOptions(req, resp);
+	}
+	@Override
+	public void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		super.doDelete(req, resp);
+	}
+}
diff --git a/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/helper/HelpMsServlet.java b/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/helper/HelpMsServlet.java
new file mode 100644
index 0000000..b030f64
--- /dev/null
+++ b/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/helper/HelpMsServlet.java
@@ -0,0 +1,83 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.apps.sdnr.wt.apigateway
+ * ================================================================================
+ * Copyright (C) 2018 highstreet technologies GmbH 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.onap.ccsdk.features.sdnr.wt.apigateway.test.helper;
+
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.onap.ccsdk.features.sdnr.wt.apigateway.MsServlet;
+
+public class HelpMsServlet extends MsServlet implements IPublicServlet {
+
+	public static final String RESPONSE_GET = "This is the response get";
+	public static final String RESPONSE_POST = "This is the response post";
+	public static final String RESPONSE_PUT = "This is the response put";
+	public static final String RESPONSE_DELETE = "This is the response delete";
+	public static final String RESPONSE_OPTIONS = "This is the response options";
+	private boolean offline = true;
+	private String baseurl;
+
+	@Override
+	public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		super.doGet(req, resp);
+	}
+
+	@Override
+	public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		super.doPost(req, resp);
+	}
+
+	@Override
+	public void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		super.doPut(req, resp);
+	}
+
+	@Override
+	public void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		super.doOptions(req, resp);
+	}
+
+	@Override
+	public void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		super.doDelete(req, resp);
+	}
+
+	public void setOfflineStatus(boolean offline) {
+		this.offline = offline;
+	}
+
+	public void setBaseUrl(String url) {
+		this.baseurl = url;
+	}
+
+	@Override
+	protected boolean isOff() {
+		return this.offline;
+	}
+
+	@Override
+	protected String getBaseUrl(String dbServerId) {
+		return this.baseurl;
+	}
+}
diff --git a/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/helper/HelpServlet.java b/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/helper/HelpServlet.java
new file mode 100644
index 0000000..ea7690c
--- /dev/null
+++ b/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/helper/HelpServlet.java
@@ -0,0 +1,53 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.apps.sdnr.wt.apigateway
+ * ================================================================================
+ * Copyright (C) 2018 highstreet technologies GmbH 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.onap.ccsdk.features.sdnr.wt.apigateway.test.helper;
+
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.onap.ccsdk.features.sdnr.wt.apigateway.EsServlet;
+
+public class HelpServlet extends EsServlet {
+
+	@Override
+	public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		super.doGet(req, resp);
+	}
+	@Override
+	public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		super.doPost(req, resp);
+	}
+	@Override
+	public void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		super.doPut(req, resp);
+	}
+	@Override
+	public void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		super.doOptions(req, resp);
+	}
+	@Override
+	public void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		super.doDelete(req, resp);
+	}
+}
diff --git a/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/helper/HelpServletBase.java b/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/helper/HelpServletBase.java
new file mode 100644
index 0000000..3073207
--- /dev/null
+++ b/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/helper/HelpServletBase.java
@@ -0,0 +1,210 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.apps.sdnr.wt.apigateway
+ * ================================================================================
+ * Copyright (C) 2018 highstreet technologies GmbH 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.onap.ccsdk.features.sdnr.wt.apigateway.test.helper;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.StringWriter;
+import java.net.InetSocketAddress;
+import java.util.Enumeration;
+import java.util.Map;
+import java.util.Vector;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import javax.servlet.ServletInputStream;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.junit.After;
+import org.junit.Before;
+import org.onap.ccsdk.features.sdnr.wt.apigateway.AaiServlet;
+
+import com.sun.net.httpserver.HttpExchange;
+import com.sun.net.httpserver.HttpHandler;
+import com.sun.net.httpserver.HttpServer;
+
+public class HelpServletBase {
+
+	protected static final String HTTPMETHOD_GET = "GET";
+	protected static final String HTTPMETHOD_POST = "POST";
+	protected static final String HTTPMETHOD_PUT = "PUT";
+	protected static final String HTTPMETHOD_DELETE = "DELETE";
+	protected static final String HTTPMETHOD_OPTIONS = "OPTIONS";
+	private IPublicServlet servlet;
+	private HttpServer server;
+	public final String HOST = "localhost";
+	protected final int port;
+	private final String baseUri;
+	protected static final String LR = "\n";
+
+	public HelpServletBase(String baseuri, int port) {
+		this.baseUri=baseuri;
+		this.port = port;
+	}
+	private ExecutorService httpThreadPool;
+	
+	public void setServlet(IPublicServlet s)
+	{
+		this.servlet=s;
+	}
+	
+	protected void testrequest(String method, String data, String expectedResponse, boolean exact) {
+		this.testrequest(method, data, expectedResponse, exact, null);
+	}
+
+	protected void testrequest(String method, String data, String expectedResponse, boolean exact,
+			Map<String, String> headersToCheck) {
+			
+		HttpServletRequest mockRequest = mock(HttpServletRequest.class);
+		HttpServletResponse mockResponse = mock(HttpServletResponse.class);
+
+		StringWriter out = new StringWriter();
+		ServletOutputStream printOut = new ServletOutputStream() {
+
+			@Override
+			public void write(int arg0) throws IOException {
+				out.write(arg0);
+			}
+		};
+		ByteArrayInputStream bis = new ByteArrayInputStream(data.getBytes());
+		ServletInputStream inputStream= new ServletInputStream() {		
+			@Override
+			public int read() throws IOException {
+				return bis.read();
+			}
+		};
+		Vector<String> headers=new Vector<String>();
+		headers.addElement("Accept");
+		headers.add("User-Agent");
+		Enumeration<String> headerNames = headers.elements();
+		try {
+			when(mockRequest.getRequestURI()).thenReturn(this.baseUri+"/mwtn/test");
+			when(mockRequest.getHeaderNames()).thenReturn(headerNames);
+			when(mockRequest.getHeader("Accept")).thenReturn("application/json");
+			when(mockRequest.getHeader("User-Agent")).thenReturn("Gecko abc");
+			when(mockRequest.getInputStream()).thenReturn(inputStream);
+			when(mockResponse.getOutputStream()).thenReturn(printOut);
+			System.out.println("do a " + method + " request");
+			if (method == HTTPMETHOD_GET)
+				this.servlet.doGet(mockRequest, mockResponse);
+			else if (method == HTTPMETHOD_POST)
+				this.servlet.doPost(mockRequest, mockResponse);
+			else if (method == HTTPMETHOD_PUT)
+				this.servlet.doPut(mockRequest, mockResponse);
+			else if (method == HTTPMETHOD_DELETE)
+				this.servlet.doDelete(mockRequest, mockResponse);
+			else if (method == HTTPMETHOD_OPTIONS)
+				this.servlet.doOptions(mockRequest, mockResponse);
+			else
+				fail("http request method " + method + " test not implemented");
+		} catch (Exception e) {
+			System.err.println(e.getMessage());
+		}
+
+		verify(mockResponse).setStatus(200);
+		if (exact)
+			assertEquals(expectedResponse, out.toString());
+		else
+			assertTrue("response not for method " + method + "correct", out.toString().contains(expectedResponse));
+		// currently unable to check extra headers
+		if (headersToCheck != null) {
+
+		}
+	}
+
+	@Before
+	public void initEsTestWebserver() throws IOException {
+		this.server = HttpServer.create(new InetSocketAddress(this.port), 0);
+		this.httpThreadPool = Executors.newFixedThreadPool(5);
+		this.server.setExecutor(this.httpThreadPool);
+		this.server.createContext("/mwtn/test", new MyHandler());
+		//server.createContext("/", new MyRootHandler());
+		this.server.setExecutor(null); // creates a default executor
+		this.server.start();
+		System.out.println("http server started");
+	}
+
+	@After
+	public void stopTestWebserver() {
+		if (this.server != null) {
+			this.server.stop(0);
+			this.httpThreadPool.shutdownNow();
+			System.out.println("http server stopped" );
+		}
+	}
+
+	
+
+	static class MyHandler implements HttpHandler {
+		@Override
+		public void handle(HttpExchange t) throws IOException {
+			String method = t.getRequestMethod();
+			System.out.println("req method: " + method);
+			OutputStream os = null;
+			try {
+				if (method.equals(HTTPMETHOD_GET)) {
+					t.sendResponseHeaders(200, HelpEsServlet.RESPONSE_GET.length());
+					os = t.getResponseBody();
+					os.write(HelpEsServlet.RESPONSE_GET.getBytes());
+				} else if (method.equals(HTTPMETHOD_POST)) {
+					t.sendResponseHeaders(200, HelpEsServlet.RESPONSE_POST.length());
+					os = t.getResponseBody();
+					os.write(HelpEsServlet.RESPONSE_POST.getBytes());
+				} else if (method.equals(HTTPMETHOD_PUT)) {
+					t.sendResponseHeaders(200, HelpEsServlet.RESPONSE_PUT.length());
+					os = t.getResponseBody();
+					os.write(HelpEsServlet.RESPONSE_PUT.getBytes());
+				} else if (method.equals(HTTPMETHOD_DELETE)) {
+					t.sendResponseHeaders(200, HelpEsServlet.RESPONSE_DELETE.length());
+					os = t.getResponseBody();
+					os.write(HelpEsServlet.RESPONSE_DELETE.getBytes());
+				} else if (method.equals(HTTPMETHOD_OPTIONS)) {
+					t.sendResponseHeaders(200, HelpEsServlet.RESPONSE_OPTIONS.length());
+					//os = t.getResponseBody();
+					//os.write(RESPONSE_OPTIONS.getBytes());
+				} else {
+					t.sendResponseHeaders(404, 0);
+				}
+				System.out.println("req handled successful");
+				
+			} catch (Exception e) {
+				System.out.println(e.getMessage());
+			}
+			finally {
+				if (os != null)
+				{
+					os.close();
+				}
+			}
+		}
+	}
+}
diff --git a/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/helper/IPublicServlet.java b/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/helper/IPublicServlet.java
new file mode 100644
index 0000000..4a640a3
--- /dev/null
+++ b/sdnr/wt/apigateway/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/apigateway/test/helper/IPublicServlet.java
@@ -0,0 +1,36 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK
+ * ================================================================================
+ * 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.onap.ccsdk.features.sdnr.wt.apigateway.test.helper;
+
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public interface IPublicServlet {
+
+	public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;
+	public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;
+	public void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;
+	public void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException ;
+	public void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException ;
+}
diff --git a/sdnr/wt/apigateway/provider/src/test/resources/log4j.properties b/sdnr/wt/apigateway/provider/src/test/resources/log4j.properties
new file mode 100644
index 0000000..142663b
--- /dev/null
+++ b/sdnr/wt/apigateway/provider/src/test/resources/log4j.properties
@@ -0,0 +1,12 @@
+log4j.rootLogger=INFO, out
+
+log4j.logger.org.apache.camel.impl.converter=WARN
+log4j.logger.org.apache.camel.management=WARN
+log4j.logger.org.apache.camel.impl.DefaultPackageScanClassResolver=WARN
+log4j.logger.org.springframework=ERROR
+
+# CONSOLE appender not used by default
+log4j.appender.out=org.apache.log4j.ConsoleAppender
+log4j.appender.out.layout=org.apache.log4j.PatternLayout
+log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
+
diff --git a/sdnr/wt/apigateway/provider/tmp3.cfg b/sdnr/wt/apigateway/provider/tmp3.cfg
new file mode 100644
index 0000000..c8f5897
--- /dev/null
+++ b/sdnr/wt/apigateway/provider/tmp3.cfg
@@ -0,0 +1,5 @@
+aai=off
+aaiHeaders=["X-FromAppId:SDNR","Authorization:Basic QUFJOkFBSQ=="]
+database=http://localhost:9200
+insecure=0
+cors=0
\ No newline at end of file
diff --git a/sdnr/wt/pom.xml b/sdnr/wt/pom.xml
new file mode 100644
index 0000000..8da991b
--- /dev/null
+++ b/sdnr/wt/pom.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.apps.sdnr.wt
+ * ================================================================================
+ * Copyright (C) 2018 highstreet technologies GmbH 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=========================================================
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+    <artifactId>sdnr-wt</artifactId>
+    <version>0.4.1-SNAPSHOT</version>
+    <packaging>pom</packaging>
+    <name>ccsdk-sdnr-wireless transport :: micro-services</name>
+    <description>SDN-R wireless transport micro-services</description>
+
+    <modules>
+    <module>apigateway</module>
+    </modules>
+</project>
+