Added dispatch method with ServiceRequestEnvelope
diff --git a/src/main/java/de/pta/mics/home/common/BackendConfig.java b/src/main/java/de/pta/mics/home/common/BackendConfig.java
index 0d4530a..a1e63aa 100644
--- a/src/main/java/de/pta/mics/home/common/BackendConfig.java
+++ b/src/main/java/de/pta/mics/home/common/BackendConfig.java
@@ -10,6 +10,7 @@
   private String micsCentralURL;
   private String micsDistributionCluster;
   private String micsHealthStateExtraPath;
+  private boolean micsCentralIsHttps;
 
   private static BackendConfig instance;
 
@@ -42,6 +43,10 @@
     return micsHealthStateExtraPath;
   }
 
+  public boolean isMicsCentralIsHttps() {
+    return micsCentralIsHttps;
+  }
+
   public static String getConfigFileName() {
     return configFileName;
   }
diff --git a/src/main/java/de/pta/mics/home/communication/RestServiceWrapper.java b/src/main/java/de/pta/mics/home/communication/RestServiceWrapper.java
index f473238..88a8133 100644
--- a/src/main/java/de/pta/mics/home/communication/RestServiceWrapper.java
+++ b/src/main/java/de/pta/mics/home/communication/RestServiceWrapper.java
@@ -17,6 +17,7 @@
 import de.pta.mics.home.common.Globals;
 
 
+import javax.ws.rs.core.Response;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 
@@ -54,7 +55,7 @@
         return createJson(response);
     }
 
-	public String performPostRequest(String restFunctionWithParams, String data) throws HttpStatusException {
+	public Response performPostRequestWithResponse(String restFunctionWithParams, String data) throws HttpStatusException {
 		String completeRequest = baseURL + "/" + restFunctionWithParams;
 
 		// create HTTP Client
@@ -78,7 +79,13 @@
 			LOGGER.warn(errtext, e);
             throw new HttpStatusException(HttpStatus.SC_SERVICE_UNAVAILABLE);
 		}
-		return createJson(response);
+        String ent = createJson(response);
+
+        Response.ResponseBuilder rb = Response.status(response.getStatusLine().getStatusCode());
+        if (ent != null) {
+            rb.entity(ent);
+        }
+        return rb.build();
 	}
 
     private CloseableHttpClient createHttpsClient() throws HttpStatusException {
diff --git a/src/main/java/de/pta/mics/home/rest/BackendRestService.java b/src/main/java/de/pta/mics/home/rest/BackendRestService.java
index 644d49a..5c2ec74 100644
--- a/src/main/java/de/pta/mics/home/rest/BackendRestService.java
+++ b/src/main/java/de/pta/mics/home/rest/BackendRestService.java
@@ -1,6 +1,7 @@
 package de.pta.mics.home.rest;
 
 import de.pta.mics.home.common.JsonGeneratorBase;
+import de.pta.mics.home.communication.RestServiceWrapper;
 import de.pta.mics.home.controller.BackendController;
 import de.pta.mics.home.controller.CentralProxy;
 import de.pta.mics.home.controller.ResponseBuilderWrapper;
@@ -59,6 +60,26 @@
 		}
 	}
 
+	@POST
+	@Path("/dispatch/")
+	@Produces("application/json")
+	public Response dispatch( String envelope ) {
+		try {
+			BackendConfig bc = BackendConfig.getInstance();
+			RestServiceWrapper restServiceWrapper = new RestServiceWrapper(bc.getMicsCentralURL(), bc.isMicsCentralIsHttps());
+			return restServiceWrapper.performPostRequestWithResponse(createDispatchURL(), envelope);
+		}
+		catch( Exception e) {
+			return responseFromException(e);
+
+		}
+	}
+
+	private String createDispatchURL() {
+		BackendConfig bc = BackendConfig.getInstance();
+		return "dispatch/"+bc.getMicsDistributionCluster();
+	}
+
 
 	private Response responseFromException(Exception e) {
 		int errcode;
diff --git a/src/main/java/de/pta/mics/home/viewmodel/ServiceRequestEnvelope.java b/src/main/java/de/pta/mics/home/viewmodel/ServiceRequestEnvelope.java
new file mode 100644
index 0000000..6dfff44
--- /dev/null
+++ b/src/main/java/de/pta/mics/home/viewmodel/ServiceRequestEnvelope.java
@@ -0,0 +1,93 @@
+package de.pta.mics.home.viewmodel;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class ServiceRequestEnvelope {
+    public static class HttpHeader {
+        private String attribute;
+        private String value;
+
+        public String getAttribute() {
+            return attribute;
+        }
+
+        public void setAttribute(String attribute) {
+            this.attribute = attribute;
+        }
+
+        public String getValue() {
+            return value;
+        }
+
+        public void setValue(String value) {
+            this.value = value;
+        }
+    }
+
+    private String serviceName;
+    private boolean isHttps;
+    private String method;
+    private String uriFragment;
+    private String payload;
+    private HttpHeader[] headers;
+
+    @JsonProperty
+    public String getServiceName() {
+        return serviceName;
+    }
+
+    @JsonProperty
+    public void setServiceName(String serviceName) {
+        this.serviceName = serviceName;
+    }
+
+    @JsonProperty
+    public boolean isHttps() {
+        return isHttps;
+    }
+
+    @JsonProperty
+    public void setHttps(boolean https) {
+        isHttps = https;
+    }
+
+    @JsonProperty
+    public String getMethod() {
+        return method;
+    }
+
+    @JsonProperty
+    public void setMethod(String method) {
+        this.method = method;
+    }
+
+    @JsonProperty
+    public String getUriFragment() {
+        return uriFragment;
+    }
+
+    @JsonProperty
+    public void setUriFragment(String uriFragment) {
+        this.uriFragment = uriFragment;
+    }
+
+    @JsonProperty
+    public String getPayload() {
+        return payload;
+    }
+
+    @JsonProperty
+    public void setPayload(String payload) {
+        this.payload = payload;
+    }
+
+    @JsonProperty
+    public HttpHeader[] getHeaders() {
+        return headers;
+    }
+
+    @JsonProperty
+    public void setHeaders(HttpHeader[] headers) {
+        this.headers = headers;
+    }
+}
diff --git a/src/main/resources/backendConfigCustom.json b/src/main/resources/backendConfigCustom.json
index 5d4e7f1..498bd18 100644
--- a/src/main/resources/backendConfigCustom.json
+++ b/src/main/resources/backendConfigCustom.json
@@ -1,5 +1,6 @@
 {
   "micsDistributionCluster" : "elogbook.openK",
   "micsCentralURL" : "http://localhost:9010/mics/central",
-  "micsHealthStateExtraPath" : "healthcheck?pretty=true"
+  "micsHealthStateExtraPath" : "healthcheck?pretty=true",
+  "micsCentralIsHttps" : false
 }
diff --git a/src/main/resources/backendConfigDevLocal.json b/src/main/resources/backendConfigDevLocal.json
index 5d4e7f1..498bd18 100644
--- a/src/main/resources/backendConfigDevLocal.json
+++ b/src/main/resources/backendConfigDevLocal.json
@@ -1,5 +1,6 @@
 {
   "micsDistributionCluster" : "elogbook.openK",
   "micsCentralURL" : "http://localhost:9010/mics/central",
-  "micsHealthStateExtraPath" : "healthcheck?pretty=true"
+  "micsHealthStateExtraPath" : "healthcheck?pretty=true",
+  "micsCentralIsHttps" : false
 }
diff --git a/src/main/resources/backendConfigDevServer.json b/src/main/resources/backendConfigDevServer.json
index 8a5d25b..51774fc 100644
--- a/src/main/resources/backendConfigDevServer.json
+++ b/src/main/resources/backendConfigDevServer.json
@@ -1,5 +1,6 @@
 {
   "micsDistributionCluster" : "elogbook.openK",
   "micsCentralURL" : "http://172.18.22.160:9010/mics/central",
-  "micsHealthStateExtraPath" : "healthcheck?pretty=true"
+  "micsHealthStateExtraPath" : "healthcheck?pretty=true",
+  "micsCentralIsHttps" : false
 }
diff --git a/src/main/resources/backendConfigDocker.json b/src/main/resources/backendConfigDocker.json
index f1f63e1..d762016 100644
--- a/src/main/resources/backendConfigDocker.json
+++ b/src/main/resources/backendConfigDocker.json
@@ -1,5 +1,6 @@
 {
   "micsDistributionCluster" : "elogbook.openK",
   "micsCentralURL" : "http://172.25.0.54:9010/mics/central",
-  "micsHealthStateExtraPath" : "healthcheck?pretty=true"
+  "micsHealthStateExtraPath" : "healthcheck?pretty=true",
+  "micsCentralIsHttps" : false
 }
diff --git a/src/main/resources/backendConfigProduction.json b/src/main/resources/backendConfigProduction.json
index aeb4d00..c5096ed 100644
--- a/src/main/resources/backendConfigProduction.json
+++ b/src/main/resources/backendConfigProduction.json
@@ -1,5 +1,6 @@
 {
   "micsDistributionCluster" : "elogbook.openK",
   "micsCentralURL" : "http://localhost:9010/mics/central",
-  "micsHealthStateExtraPath" : "healthcheck?pretty=true"
+  "micsHealthStateExtraPath" : "healthcheck?pretty=true",
+  "micsCentralIsHttps" : false
 }
\ No newline at end of file
diff --git a/src/test/java/de/pta/mics/home/viewmodel/ServiceRequestEnvelopeTest.java b/src/test/java/de/pta/mics/home/viewmodel/ServiceRequestEnvelopeTest.java
new file mode 100644
index 0000000..0de5b62
--- /dev/null
+++ b/src/test/java/de/pta/mics/home/viewmodel/ServiceRequestEnvelopeTest.java
@@ -0,0 +1,38 @@
+package de.pta.mics.home.viewmodel;
+
+
+import org.junit.Test;
+
+import static junit.framework.TestCase.assertEquals;
+
+public class ServiceRequestEnvelopeTest {
+
+    @Test
+    public void testPojo() {
+        final String payload = "Testme Accurate";
+        ServiceRequestEnvelope env = new ServiceRequestEnvelope();
+        env.setHttps(true);
+        env.setMethod("POST");
+        env.setUriFragment("Fraggel");
+        env.setServiceName("Salve");
+
+        ServiceRequestEnvelope.HttpHeader[] headers = new ServiceRequestEnvelope.HttpHeader[2];
+        headers[0] = new ServiceRequestEnvelope.HttpHeader();
+        headers[0].setAttribute("1stAttr");
+        headers[0].setValue("1stValue");
+        headers[1] = new ServiceRequestEnvelope.HttpHeader();
+        headers[1].setAttribute("2ndAttr");
+        headers[1].setValue("2ndValue");
+        env.setHeaders(headers);
+
+        assertEquals(true, env.isHttps());
+        assertEquals("POST", env.getMethod());
+        env.setPayload(payload);
+        assertEquals(payload, env.getPayload());
+        assertEquals("Fraggel", env.getUriFragment());
+        assertEquals("Salve", env.getServiceName());
+        assertEquals(2, env.getHeaders().length);
+        assertEquals("2ndAttr", env.getHeaders()[1].getAttribute());
+        assertEquals("1stValue", env.getHeaders()[0].getValue());
+    }
+}
diff --git a/src/test/resources/serviceRequestEnvelope.json b/src/test/resources/serviceRequestEnvelope.json
new file mode 100644
index 0000000..9722f58
--- /dev/null
+++ b/src/test/resources/serviceRequestEnvelope.json
@@ -0,0 +1,17 @@
+{
+  "serviceName": "auth-n-auth.mics",
+  "isHttps": false,
+  "method": "GET",
+  "uriFragment": "versionInfo",
+  "payload": "eyAiYmFja2VuZFZlcnNpb24iOiAiMC4xLjMtU05BUFNIT1QifQ==",
+  "headers": [
+    {
+      "attribute": "Content-Type",
+      "value": "application/json"
+    },
+    {
+      "attribute": "accept",
+      "value": "application/json"
+    }
+  ]
+}
\ No newline at end of file