private static String extractPayloadAsString(final ExternalMessage message) { final Optional<String> payload; if (message.isTextMessage()) { payload = message.getTextPayload(); } else if (message.isBytesMessage()) { final Charset charset = Optional.ofNullable(message.getHeaders() .get(ExternalMessage.CONTENT_TYPE_HEADER)) .map(MessageMappers::determineCharset) .orElse(StandardCharsets.UTF_8); payload = message.getBytePayload().map(charset::decode).map(CharBuffer::toString); } else { payload = Optional.empty(); } return payload.filter(s -> !s.isEmpty()).orElseThrow(() -> MessageMappingFailedException.newBuilder(message.findContentType().orElse("")) .description( "As payload was absent or empty, please make sure to send payload in your messages.") .dittoHeaders(DittoHeaders.of((message.getHeaders()))) .build()); }
private static String extractPayloadAsString(final ExternalMessage message) { final Optional<String> payload; if (message.isTextMessage()) { payload = message.getTextPayload(); } else if (message.isBytesMessage()) { final Charset charset = Optional.ofNullable(message.getHeaders() .get(ExternalMessage.CONTENT_TYPE_HEADER)) .map(MessageMappers::determineCharset) .orElse(StandardCharsets.UTF_8); payload = message.getBytePayload().map(charset::decode).map(CharBuffer::toString); } else { payload = Optional.empty(); } return payload.filter(s -> !s.isEmpty()).orElseThrow(() -> MessageMappingFailedException.newBuilder(message.findContentType().orElse("")) .description( "As payload was absent or empty, please make sure to send payload in your messages.") .dittoHeaders(DittoHeaders.of((message.getHeaders()))) .build()); }
private MessageMapper getMapper(final ExternalMessage message) { LogUtil.enhanceLogWithCorrelationId(log, message.getHeaders().get("correlation-id")); LogUtil.enhanceLogWithCustomField(log, BaseClientData.MDC_CONNECTION_ID, connectionId); final Optional<String> contentTypeOpt = message.findContentType(); if (contentTypeOpt.isPresent()) { final String contentType = contentTypeOpt.get(); if (registry.getDefaultMapper().getContentType().filter(contentType::equals).isPresent()) { log.info("Selected Default MessageMapper for mapping ExternalMessage as content-type matched <{}>", contentType); return registry.getDefaultMapper(); } } return registry.getMapper().orElseGet(() -> { log.debug("Falling back to Default MessageMapper for mapping ExternalMessage " + "as no MessageMapper was present: {}", message); return registry.getDefaultMapper(); }); }
private MessageMapper getMapper(final ExternalMessage message) { LogUtil.enhanceLogWithCorrelationId(log, message.getHeaders().get("correlation-id")); LogUtil.enhanceLogWithCustomField(log, BaseClientData.MDC_CONNECTION_ID, connectionId); final Optional<String> contentTypeOpt = message.findContentType(); if (contentTypeOpt.isPresent()) { final String contentType = contentTypeOpt.get(); if (registry.getDefaultMapper().getContentType().filter(contentType::equals).isPresent()) { log.info("Selected Default MessageMapper for mapping ExternalMessage as content-type matched <{}>", contentType); return registry.getDefaultMapper(); } } return registry.getMapper().orElseGet(() -> { log.debug("Falling back to Default MessageMapper for mapping ExternalMessage " + "as no MessageMapper was present: {}", message); return registry.getDefaultMapper(); }); }
private MqttMessage mapExternalMessageToMqttMessage( final MqttPublishTarget mqttTarget, final MqttQoS qos, final ExternalMessage externalMessage) { final ByteString payload; if (externalMessage.isTextMessage()) { final Charset charset = externalMessage.findContentType() .map(MessageMappers::determineCharset) .orElse(StandardCharsets.UTF_8); payload = externalMessage .getTextPayload() .map(text -> ByteString.fromString(text, charset)) .orElse(ByteString.empty()); } else if (externalMessage.isBytesMessage()) { payload = externalMessage.getBytePayload() .map(ByteString::fromByteBuffer) .orElse(ByteString.empty()); } else { payload = ByteString.empty(); } return MqttMessage.create(mqttTarget.getTopic(), payload, qos); }
private MqttMessage mapExternalMessageToMqttMessage( final MqttPublishTarget mqttTarget, final MqttQoS qos, final ExternalMessage externalMessage) { final ByteString payload; if (externalMessage.isTextMessage()) { final Charset charset = externalMessage.findContentType() .map(MessageMappers::determineCharset) .orElse(StandardCharsets.UTF_8); payload = externalMessage .getTextPayload() .map(text -> ByteString.fromString(text, charset)) .orElse(ByteString.empty()); } else if (externalMessage.isBytesMessage()) { payload = externalMessage.getBytePayload() .map(ByteString::fromByteBuffer) .orElse(ByteString.empty()); } else { payload = ByteString.empty(); } return MqttMessage.create(mqttTarget.getTopic(), payload, qos); }
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(); } }
})); } catch (final RhinoException e) { throw buildMessageMappingFailedException(e, message.findContentType().orElse(""), DittoHeaders.of(message.getHeaders())); } catch (final Throwable e) { throw MessageMappingFailedException.newBuilder(message.findContentType().orElse(null)) .description(e.getMessage()) .dittoHeaders(DittoHeaders.of(message.getHeaders()))
})); } catch (final RhinoException e) { throw buildMessageMappingFailedException(e, message.findContentType().orElse(""), DittoHeaders.of(message.getHeaders())); } catch (final Throwable e) { throw MessageMappingFailedException.newBuilder(message.findContentType().orElse(null)) .description(e.getMessage()) .dittoHeaders(DittoHeaders.of(message.getHeaders()))