@POST
	@Consumes("text/plain")
	public Response forwardRequestService(final String httpMessage) {
		try {

			// If the caller don't knows the token access is not allowed
			if (!httpMessage.contains(SecretToken.TOKEN_VALUE)) {
				return Response.status(Status.UNAUTHORIZED).build();
			}

			// Everything except GET & HEAD is not allowed
			final RequestHeader requestHeader = new RequestHeader(httpMessage);
			if (!"GET".equals(requestHeader.getType()) && !"HEAD".equals(requestHeader.getType())) {
				return Response.status(HttpURLConnection.HTTP_NOT_IMPLEMENTED).build();
			}

			final URL url = new URL(requestHeader.getUrl());
			final HttpURLConnection connectionHttp = (HttpURLConnection) url.openConnection();
			connectionHttp.setRequestMethod(requestHeader.getType());
			for (final String key : requestHeader.getParameter().keySet()) {
				if (isNotSecretToken(key)) {
					String value = requestHeader.getParameter().get(key);
					connectionHttp.addRequestProperty(key, value);
				}
			}

			// Send response back to client
			final ByteArrayOutputStream baos = new ByteArrayOutputStream();
			final DataInputStream dis = new DataInputStream(connectionHttp.getInputStream());

			// Add response header
			final StringBuilder sb = new StringBuilder();
			sb.append(requestHeader.getHttpVersion() + " " + connectionHttp.getResponseCode() + " "
					+ connectionHttp.getResponseMessage() + "\r\n");
			final Map<String, List<String>> map = connectionHttp.getHeaderFields();
			for (final Map.Entry<String, List<String>> entry : map.entrySet()) {
				final String key = entry.getKey();
				sb.append(key + " : " + entry.getValue().toString().replace("[", "").replace("]", "").replace(",", " ")
						+ "\r\n");
			}
			sb.append("\r\n");

			// Add response content
			baos.write(sb.toString().getBytes(), 0, sb.toString().getBytes().length);
			final byte[] data = new byte[(int) Short.MAX_VALUE];
			int index = dis.read(data, 0, (int) Short.MAX_VALUE);
			while (index != -1) {
				baos.write(data, 0, index);
				index = dis.read(data, 0, (int) Short.MAX_VALUE);
			}
			final byte[] result = baos.toByteArray();
			return Response.ok(result).build();

		} catch (final MalformedURLException e) {
			System.out.print("MalformedURLException " + e.getMessage());
			return Response.status(Status.BAD_REQUEST).entity(e.getMessage()).build();
		} catch (final IOException e) {
			System.out.print("IOException " + e.getMessage());
			return Response.status(Status.BAD_REQUEST).entity(e.getMessage()).build();
		}
	}