@Override public DittoHeaders apply(final InboundExternalMessage inboundExternalMessage) { final Signal<?> signal = inboundExternalMessage.getSignal(); final ExternalMessage externalMessage = inboundExternalMessage.getSource(); return externalMessage.getHeaderMapping().map(mapping -> { final DittoHeaders dittoHeaders = signal.getDittoHeaders(); final String thingId = signal.getId(); final DittoHeadersBuilder dittoHeadersBuilder = dittoHeaders.toBuilder(); mapping.getMapping().entrySet().stream() .map(e -> newEntry(e.getKey(), PlaceholderFilter.apply(e.getValue(), dittoHeaders, HEADERS_PLACEHOLDER, true)) ) .map(e -> newEntry(e.getKey(), PlaceholderFilter.apply(e.getValue(), thingId, THING_PLACEHOLDER, true)) ) .map(e -> newEntry(e.getKey(), PlaceholderFilter.apply(e.getValue(), inboundExternalMessage.getTopicPath(), TOPIC_PLACEHOLDER, true)) ) .forEach(e -> dittoHeadersBuilder.putHeader(e.getKey(), e.getValue())); LogUtil.enhanceLogWithCorrelationId(log, signal); final DittoHeaders newHeaders = dittoHeadersBuilder.build(); log.debug("Result of header mapping <{}> are these headers: {}", mapping, newHeaders); return newHeaders; }).orElse(signal.getDittoHeaders()); }
private void handle(final ExternalMessage externalMessage) { ConditionChecker.checkNotNull(externalMessage); final String correlationId = externalMessage.getHeaders().get(DittoHeaderDefinition.CORRELATION_ID.getKey()); LogUtil.enhanceLogWithCorrelationId(log, correlationId); LogUtil.enhanceLogWithCustomField(log, BaseClientData.MDC_CONNECTION_ID, connectionId); log.debug("Handling ExternalMessage: {}", externalMessage); try { final ExternalMessage messageWithAuthSubject = placeholderSubstitution.apply(externalMessage); final Optional<InboundExternalMessage> inboundMessageOpt = processor.process(messageWithAuthSubject); inboundMessageOpt.ifPresent(inboundMessage -> { final Signal<?> signal = inboundMessage.getSignal(); enhanceLogUtil(signal); applySignalIdEnforcement.accept(messageWithAuthSubject, signal); final Signal<?> adjustedSignal = mapHeaders .andThen(mappedHeaders -> adjustHeaders.apply(messageWithAuthSubject, mappedHeaders)) .andThen(signal::setDittoHeaders) .apply(inboundMessage); startTrace(adjustedSignal); // This message is important to check if a command is accepted for a specific connection, as this // happens quite a lot this is going to the debug level. Use best with a connection-id filter. log.debug("Message successfully mapped to signal: '{}'. Passing to conciergeForwarder", adjustedSignal .getType()); conciergeForwarder.tell(adjustedSignal, getSelf()); }); } catch (final DittoRuntimeException e) { handleDittoRuntimeException(e, externalMessage.getHeaders()); } catch (final Exception e) { log.warning("Got <{}> when message was processed: <{}>", e.getClass().getSimpleName(), e.getMessage()); } }
private void handle(final ExternalMessage externalMessage) { ConditionChecker.checkNotNull(externalMessage); final String correlationId = externalMessage.getHeaders().get(DittoHeaderDefinition.CORRELATION_ID.getKey()); LogUtil.enhanceLogWithCorrelationId(log, correlationId); LogUtil.enhanceLogWithCustomField(log, BaseClientData.MDC_CONNECTION_ID, connectionId); log.debug("Handling ExternalMessage: {}", externalMessage); try { final ExternalMessage messageWithAuthSubject = placeholderSubstitution.apply(externalMessage); final Optional<InboundExternalMessage> inboundMessageOpt = processor.process(messageWithAuthSubject); inboundMessageOpt.ifPresent(inboundMessage -> { final Signal<?> signal = inboundMessage.getSignal(); enhanceLogUtil(signal); applySignalIdEnforcement.accept(messageWithAuthSubject, signal); final Signal<?> adjustedSignal = mapHeaders .andThen(mappedHeaders -> adjustHeaders.apply(messageWithAuthSubject, mappedHeaders)) .andThen(signal::setDittoHeaders) .apply(inboundMessage); startTrace(adjustedSignal); // This message is important to check if a command is accepted for a specific connection, as this // happens quite a lot this is going to the debug level. Use best with a connection-id filter. log.debug("Message successfully mapped to signal: '{}'. Passing to conciergeForwarder", adjustedSignal .getType()); conciergeForwarder.tell(adjustedSignal, getSelf()); }); } catch (final DittoRuntimeException e) { handleDittoRuntimeException(e, externalMessage.getHeaders()); } catch (final Exception e) { log.warning("Got <{}> when message was processed: <{}>", e.getClass().getSimpleName(), e.getMessage()); } }
@Override public DittoHeaders apply(final InboundExternalMessage inboundExternalMessage) { final Signal<?> signal = inboundExternalMessage.getSignal(); final ExternalMessage externalMessage = inboundExternalMessage.getSource(); return externalMessage.getHeaderMapping().map(mapping -> { final DittoHeaders dittoHeaders = signal.getDittoHeaders(); final String thingId = signal.getId(); final DittoHeadersBuilder dittoHeadersBuilder = dittoHeaders.toBuilder(); mapping.getMapping().entrySet().stream() .map(e -> newEntry(e.getKey(), PlaceholderFilter.apply(e.getValue(), dittoHeaders, HEADERS_PLACEHOLDER, true)) ) .map(e -> newEntry(e.getKey(), PlaceholderFilter.apply(e.getValue(), thingId, THING_PLACEHOLDER, true)) ) .map(e -> newEntry(e.getKey(), PlaceholderFilter.apply(e.getValue(), inboundExternalMessage.getTopicPath(), TOPIC_PLACEHOLDER, true)) ) .forEach(e -> dittoHeadersBuilder.putHeader(e.getKey(), e.getValue())); LogUtil.enhanceLogWithCorrelationId(log, signal); final DittoHeaders newHeaders = dittoHeadersBuilder.build(); log.debug("Result of header mapping <{}> are these headers: {}", mapping, newHeaders); return newHeaders; }).orElse(signal.getDittoHeaders()); }