docs: @POST
      @Path("/{channelId: [A-Z,a-z,0-9,_,\\-,\\.]+}/message")
      @Produces({ MediaType.APPLICATION_OCTET_STREAM })
      public Response postMessage(@PathParam("channelId") String channelId,
                                  byte[] serializedMessage,
                                  @Context UriInfo uriInfo) {
          if (LOG.isDebugEnabled()) {
              LOG.debug("Incoming message:\n" + new String(serializedMessage, StandardCharsets.UTF_8));
          }
          try {
              ImmutableMessage message;
  
              try {
                  message = new ImmutableMessage(serializedMessage);
              } catch (EncodingException | UnsuppportedVersionException exception) {
                  LOG.error("Failed to deserialize message for channelId {}: {}", channelId, exception.getMessage());
                  throw new JoynrHttpException(Status.BAD_REQUEST, JOYNRMESSAGINGERROR_DESERIALIZATIONFAILED);
              }
  
              if (LOG.isDebugEnabled()) {
                  LOG.debug("POST to channel: {} message: {}", channelId, message);
              }
  
              if (channelId == null) {
                  LOG.error("POST message to channel: NULL. message: {} dropped because: channel Id was not set",
                            message);
                  throw new JoynrHttpException(Status.BAD_REQUEST, JOYNRMESSAGINGERROR_CHANNELNOTSET);
              }
  
              if (message.getTtlMs() == 0) {
                  LOG.error("POST message to channel: {} message: {} dropped because: TTL not set", channelId, message);
                  throw new JoynrHttpException(Status.BAD_REQUEST, JOYNRMESSAGINGERROR_EXPIRYDATENOTSET);
              }
  
              if (messageReceiver == null) {
                  LOG.error("POST message to channel: {} message: {} no receiver for the given channel",
                            channelId,
                            message);
                  return Response.noContent().build();
              }
  
              if (LOG.isTraceEnabled()) {
                  LOG.trace("passing off message to messageReceiver: {}", channelId);
              }
              messageReceiver.receive(message);
  
              URI location = uriInfo.getBaseUriBuilder().path("messages/" + message.getId()).build();
              return Response.created(location).build();
          } catch (WebApplicationException e) {
              throw e;
          } catch (Exception e) {
              LOG.error(format("POST message to channel: %s error: %s", channelId, e.getMessage()), e);
              throw new WebApplicationException(Status.INTERNAL_SERVER_ERROR);
          }
      }