/** * Returns new {@code Headers} for the specified {@code headers} map. * * @param headers the headers map. * @return the headers. */ public static DittoHeaders newHeaders(final Collection<Map.Entry<String, String>> headers) { return DittoHeaders.of(headers.stream().collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))); }
/** * Returns new {@code Headers} for the specified {@code headers} map. * * @param headers the headers map. * @return the headers. */ public static DittoHeaders newHeaders(final Collection<Map.Entry<String, String>> headers) { return DittoHeaders.of(headers.stream().collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))); }
/** * Merge message headers of message and adaptable. Adaptable headers do override message headers! * * @param message the message * @param adaptable the adaptable * @return the merged headers */ private static DittoHeaders mergeHeaders(final ExternalMessage message, final Adaptable adaptable) { final Map<String, String> headers = new HashMap<>(message.getHeaders()); adaptable.getHeaders().ifPresent(headers::putAll); return DittoHeaders.of(headers); }
/** * Merge message headers of message and adaptable. Adaptable headers do override message headers! * * @param message the message * @param adaptable the adaptable * @return the merged headers */ private static DittoHeaders mergeHeaders(final ExternalMessage message, final Adaptable adaptable) { final Map<String, String> headers = new HashMap<>(message.getHeaders()); adaptable.getHeaders().ifPresent(headers::putAll); return DittoHeaders.of(headers); }
/** * Returns new {@code Headers} for the specified {@code headers} map. * * @param headers the headers map. * @return the headers. */ public static DittoHeaders newHeadersWithDittoContentType(final Map<String, String> headers) { return DittoHeaders.of(headers).toBuilder().contentType(DittoConstants.DITTO_PROTOCOL_CONTENT_TYPE).build(); }
/** * Returns new {@code Headers} for the specified {@code headers} map. * * @param headers the headers map. * @return the headers. */ public static DittoHeaders newHeadersWithDittoContentType(final Map<String, String> headers) { return DittoHeaders.of(headers).toBuilder().contentType(DittoConstants.DITTO_PROTOCOL_CONTENT_TYPE).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 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()); }
@Override public final Adaptable toAdaptable(final T signal, final TopicPath.Channel channel) { final Adaptable adaptable = constructAdaptable(signal, channel); final Map<String, String> externalHeaders = headerTranslator.toExternalHeaders(adaptable.getDittoHeaders()); return adaptable.setDittoHeaders(DittoHeaders.of(externalHeaders)); }
@Override public final Adaptable toAdaptable(final T signal, final TopicPath.Channel channel) { final Adaptable adaptable = constructAdaptable(signal, channel); final Map<String, String> externalHeaders = headerTranslator.toExternalHeaders(adaptable.getDittoHeaders()); return adaptable.setDittoHeaders(DittoHeaders.of(externalHeaders)); }
private void handleSendException(final ExternalMessage message, final Exception e, final ActorRef sender) { log.info("Failed to send JMS message: [{}] {}", e.getClass().getSimpleName(), e.getMessage()); final MessageSendingFailedException sendFailedException = MessageSendingFailedException.newBuilder() .cause(e) .dittoHeaders(DittoHeaders.of(message.getHeaders())) .build(); sender.tell(sendFailedException, getSelf()); }
private void handleSendException(final ExternalMessage message, final Exception e, final ActorRef sender) { log.info("Failed to send JMS message: [{}] {}", e.getClass().getSimpleName(), e.getMessage()); final MessageSendingFailedException sendFailedException = MessageSendingFailedException.newBuilder() .cause(e) .dittoHeaders(DittoHeaders.of(message.getHeaders())) .build(); sender.tell(sendFailedException, getSelf()); }
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(); } }
final MessageSendingFailedException sendFailedException = MessageSendingFailedException.newBuilder() .message("Failed to send message, no producer available.") .dittoHeaders(DittoHeaders.of(message.getHeaders())) .build(); getSender().tell(sendFailedException, getSelf());
final MessageSendingFailedException sendFailedException = MessageSendingFailedException.newBuilder() .message("Failed to send message, no producer available.") .dittoHeaders(DittoHeaders.of(message.getHeaders())) .build(); getSender().tell(sendFailedException, getSelf());
messageMappingProcessor.forward(e.setDittoHeaders(DittoHeaders.of(headers)), getContext());
messageMappingProcessor.forward(e.setDittoHeaders(DittoHeaders.of(headers)), getContext());
@Override public Adaptable toAdaptable(final ThingErrorResponse thingErrorResponse, final TopicPath.Channel channel) { final Payload payload = Payload.newBuilder(thingErrorResponse.getResourcePath()) // .withStatus(thingErrorResponse.getStatusCode()) // .withValue(thingErrorResponse.toJson(thingErrorResponse.getImplementedSchemaVersion()) // .getValue(CommandResponse.JsonFields.PAYLOAD) .orElse(JsonFactory.nullObject())) // only use the error payload .build(); final TopicPathBuilder topicPathBuilder = ProtocolFactory.newTopicPathBuilder(thingErrorResponse.getId()); final TopicPathBuildable topicPathBuildable; if (channel == TopicPath.Channel.TWIN) { topicPathBuildable = topicPathBuilder.twin().errors(); } else if (channel == TopicPath.Channel.LIVE) { topicPathBuildable = topicPathBuilder.live().errors(); } else { throw new IllegalArgumentException("Unknown Channel '" + channel + "'"); } final DittoHeaders responseHeaders = ProtocolFactory.newHeadersWithDittoContentType(thingErrorResponse.getDittoHeaders()); return Adaptable.newBuilder(topicPathBuildable.build()) .withPayload(payload) .withHeaders(DittoHeaders.of(headerTranslator.toExternalHeaders(responseHeaders))) .build(); }
@Override public Adaptable toAdaptable(final ThingErrorResponse thingErrorResponse, final TopicPath.Channel channel) { final Payload payload = Payload.newBuilder(thingErrorResponse.getResourcePath()) // .withStatus(thingErrorResponse.getStatusCode()) // .withValue(thingErrorResponse.toJson(thingErrorResponse.getImplementedSchemaVersion()) // .getValue(CommandResponse.JsonFields.PAYLOAD) .orElse(JsonFactory.nullObject())) // only use the error payload .build(); final TopicPathBuilder topicPathBuilder = ProtocolFactory.newTopicPathBuilder(thingErrorResponse.getId()); final TopicPathBuildable topicPathBuildable; if (channel == TopicPath.Channel.TWIN) { topicPathBuildable = topicPathBuilder.twin().errors(); } else if (channel == TopicPath.Channel.LIVE) { topicPathBuildable = topicPathBuilder.live().errors(); } else { throw new IllegalArgumentException("Unknown Channel '" + channel + "'"); } final DittoHeaders responseHeaders = ProtocolFactory.newHeadersWithDittoContentType(thingErrorResponse.getDittoHeaders()); return Adaptable.newBuilder(topicPathBuildable.build()) .withPayload(payload) .withHeaders(DittoHeaders.of(headerTranslator.toExternalHeaders(responseHeaders))) .build(); }