/** * Processes an ExternalMessage to a Signal. * * @param message the message * @return the signal */ Optional<InboundExternalMessage> process(final ExternalMessage message) { final StartedTimer overAllProcessingTimer = startNewTimer().tag(DIRECTION_TAG_NAME, INBOUND); return withTimer(overAllProcessingTimer, () -> convertMessage(message, overAllProcessingTimer)); }
/** * Processes an ExternalMessage to a Signal. * * @param message the message * @return the signal */ Optional<InboundExternalMessage> process(final ExternalMessage message) { final StartedTimer overAllProcessingTimer = startNewTimer().tag(DIRECTION_TAG_NAME, INBOUND); return withTimer(overAllProcessingTimer, () -> convertMessage(message, overAllProcessingTimer)); }
/** * Processes a Signal to an ExternalMessage. * * @param signal the signal * @return the message */ Optional<ExternalMessage> process(final Signal<?> signal) { final StartedTimer overAllProcessingTimer = startNewTimer().tag(DIRECTION_TAG_NAME, OUTBOUND); return withTimer(overAllProcessingTimer, () -> convertToExternalMessage(() -> protocolAdapter.toAdaptable(signal), overAllProcessingTimer)); }
/** * Processes a Signal to an ExternalMessage. * * @param signal the signal * @return the message */ Optional<ExternalMessage> process(final Signal<?> signal) { final StartedTimer overAllProcessingTimer = startNewTimer().tag(DIRECTION_TAG_NAME, OUTBOUND); return withTimer(overAllProcessingTimer, () -> convertToExternalMessage(() -> protocolAdapter.toAdaptable(signal), overAllProcessingTimer)); }
private Optional<ExternalMessage> convertToExternalMessage(final Supplier<Adaptable> adaptableSupplier, final StartedTimer overAllProcessingTimer) { checkNotNull(adaptableSupplier); try { final Adaptable adaptable = withTimer(overAllProcessingTimer.startNewSegment(PROTOCOL_SEGMENT_NAME), adaptableSupplier); enhanceLogFromAdaptable(adaptable); return withTimer(overAllProcessingTimer.startNewSegment(PAYLOAD_SEGMENT_NAME), () -> getMapper(adaptable).map(adaptable)); } catch (final DittoRuntimeException e) { throw e; } catch (final Exception e) { final Optional<DittoHeaders> headers = adaptableSupplier.get() .getHeaders(); final String contentType = headers .map(h -> h.get(ExternalMessage.CONTENT_TYPE_HEADER)) .orElse(""); throw MessageMappingFailedException.newBuilder(contentType) .description("Could not map Adaptable due to unknown problem: " + e.getMessage()) .dittoHeaders(headers.orElseGet(DittoHeaders::empty)) .cause(e) .build(); } }
private Optional<ExternalMessage> convertToExternalMessage(final Supplier<Adaptable> adaptableSupplier, final StartedTimer overAllProcessingTimer) { checkNotNull(adaptableSupplier); try { final Adaptable adaptable = withTimer(overAllProcessingTimer.startNewSegment(PROTOCOL_SEGMENT_NAME), adaptableSupplier); enhanceLogFromAdaptable(adaptable); return withTimer(overAllProcessingTimer.startNewSegment(PAYLOAD_SEGMENT_NAME), () -> getMapper(adaptable).map(adaptable)); } catch (final DittoRuntimeException e) { throw e; } catch (final Exception e) { final Optional<DittoHeaders> headers = adaptableSupplier.get() .getHeaders(); final String contentType = headers .map(h -> h.get(ExternalMessage.CONTENT_TYPE_HEADER)) .orElse(""); throw MessageMappingFailedException.newBuilder(contentType) .description("Could not map Adaptable due to unknown problem: " + e.getMessage()) .dittoHeaders(headers.orElseGet(DittoHeaders::empty)) .cause(e) .build(); } }
private Optional<InboundExternalMessage> convertMessage(final ExternalMessage message, final StartedTimer overAllProcessingTimer) { checkNotNull(message); try { final Optional<Adaptable> adaptableOpt = withTimer( overAllProcessingTimer.startNewSegment(PAYLOAD_SEGMENT_NAME), () -> getMapper(message).map(message)); return adaptableOpt.map(adaptable -> { enhanceLogFromAdaptable(adaptable); final Signal<?> signal = this.<Signal<?>>withTimer( overAllProcessingTimer.startNewSegment(PROTOCOL_SEGMENT_NAME), () -> protocolAdapter.fromAdaptable(adaptable)); return MappedInboundExternalMessage.of(message, adaptable.getTopicPath(), signal); }); } catch (final DittoRuntimeException e) { throw e; } catch (final Exception e) { throw MessageMappingFailedException.newBuilder(message.findContentType().orElse("")) .description("Could not map ExternalMessage due to unknown problem: " + e.getClass().getSimpleName() + " " + e.getMessage()) .dittoHeaders(DittoHeaders.of(message.getHeaders())) .cause(e) .build(); } }
private Optional<InboundExternalMessage> convertMessage(final ExternalMessage message, final StartedTimer overAllProcessingTimer) { checkNotNull(message); try { final Optional<Adaptable> adaptableOpt = withTimer( overAllProcessingTimer.startNewSegment(PAYLOAD_SEGMENT_NAME), () -> getMapper(message).map(message)); return adaptableOpt.map(adaptable -> { enhanceLogFromAdaptable(adaptable); final Signal<?> signal = this.<Signal<?>>withTimer( overAllProcessingTimer.startNewSegment(PROTOCOL_SEGMENT_NAME), () -> protocolAdapter.fromAdaptable(adaptable)); return MappedInboundExternalMessage.of(message, adaptable.getTopicPath(), signal); }); } catch (final DittoRuntimeException e) { throw e; } catch (final Exception e) { throw MessageMappingFailedException.newBuilder(message.findContentType().orElse("")) .description("Could not map ExternalMessage due to unknown problem: " + e.getClass().getSimpleName() + " " + e.getMessage()) .dittoHeaders(DittoHeaders.of(message.getHeaders())) .cause(e) .build(); } }