private SendMessageAcceptedResponse(final String thingId, final MessageHeaders messageHeaders, final HttpStatusCode statusCode, final DittoHeaders dittoHeaders) { super(TYPE, thingId, Message.<Void>newBuilder(messageHeaders).build(), statusCode, dittoHeaders); }
private static MessageBuilder<Object> initMessageBuilder(final ByteBuffer payload, final ContentType contentType, final MessageHeaders headers) { // reset bytebuffer offset, otherwise payload will not be appended final ByteBuffer payloadWithoutOffset = ByteBuffer.wrap(payload.array()); final MessageBuilder<Object> messageBuilder = MessagesModelFactory.newMessageBuilder(headers) .rawPayload(payloadWithoutOffset); final Charset charset = contentType.getCharsetOption() .map(HttpCharset::nioCharset) .orElse(StandardCharsets.UTF_8); final String payloadString = charset.decode(payload).toString(); if (contentType.mediaType().isText()) { messageBuilder.payload(payloadString); } else if (ContentTypes.APPLICATION_JSON.equals(contentType)) { messageBuilder.payload(JsonFactory.readFrom(payloadString)); } return messageBuilder; }
if (shouldBeInterpretedAsText) { if (isAnyText(contentType) && value.filter(JsonValue::isString).isPresent()) { messageBuilder.payload((T) value.get().asString()); } else { value.ifPresent(jsonValue -> messageBuilder.payload((T) jsonValue)); .ifPresent(bytes -> messageBuilder.rawPayload(ByteBuffer.wrap(tryToDecode(bytes)))); return messageBuilder.build();
if (shouldBeInterpretedAsText) { if (isAnyText(contentType) && value.filter(JsonValue::isString).isPresent()) { messageBuilder.payload((T) value.get().asString()); } else { value.ifPresent(jsonValue -> messageBuilder.payload((T) jsonValue)); .ifPresent(bytes -> messageBuilder.rawPayload(ByteBuffer.wrap(tryToDecode(bytes)))); return messageBuilder.build();
static void deserialize(final Optional<JsonValue> messagePayloadOptional, final MessageBuilder messageBuilder, final MessageHeaders messageHeaders) { final String contentType = messageHeaders.getContentType().orElse(""); if (messagePayloadOptional.isPresent()) { final JsonValue payload = messagePayloadOptional.get(); if (shouldBeInterpretedAsText(contentType)) { messageBuilder.payload(payload.isString() ? payload.asString() : payload); } else { final String payloadStr = payload.isString() ? payload.asString() : payload.toString(); final byte[] payloadBytes = payloadStr.getBytes(StandardCharsets.UTF_8); MessageCommandSizeValidator.getInstance().ensureValidSize(() -> payloadBytes.length, () -> messageHeaders); messageBuilder.rawPayload(ByteBuffer.wrap(BASE64_DECODER.decode(payloadBytes))); } } }
private SendMessageAcceptedResponse(final String thingId, final MessageHeaders messageHeaders, final HttpStatusCode statusCode, final DittoHeaders dittoHeaders) { super(TYPE, thingId, Message.<Void>newBuilder(messageHeaders).build(), statusCode, dittoHeaders); }
static void deserialize(final Optional<JsonValue> messagePayloadOptional, final MessageBuilder messageBuilder, final MessageHeaders messageHeaders) { final String contentType = messageHeaders.getContentType().orElse(""); if (messagePayloadOptional.isPresent()) { final JsonValue payload = messagePayloadOptional.get(); if (shouldBeInterpretedAsText(contentType)) { messageBuilder.payload(payload.isString() ? payload.asString() : payload); } else { final String payloadStr = payload.isString() ? payload.asString() : payload.toString(); final byte[] payloadBytes = payloadStr.getBytes(StandardCharsets.UTF_8); MessageCommandSizeValidator.getInstance().ensureValidSize(() -> payloadBytes.length, () -> messageHeaders); messageBuilder.rawPayload(ByteBuffer.wrap(BASE64_DECODER.decode(payloadBytes))); } } }
/** * Deserializes the {@link Message} from the JSON representation - the {@code rawPayload} is decoded with Base64. * * @param <T> the type of the message's payload. * @param jsonObject the JsonObjectReader to use for reading the message * @return the Message */ protected static <T> Message<T> deserializeMessageFromJson(final JsonObject jsonObject) { final JsonObject messageObject = jsonObject.getValueOrThrow(MessageCommandResponse.JsonFields.JSON_MESSAGE); final JsonObject messageHeadersObject = messageObject.getValue(MessageCommandResponse.JsonFields.JSON_MESSAGE_HEADERS) .filter(JsonValue::isObject) .map(JsonValue::asObject) .orElseThrow(() -> JsonMissingFieldException.newBuilder() .fieldName( MessageCommandResponse.JsonFields.JSON_MESSAGE_HEADERS.getPointer().toString()) .build()); final Optional<JsonValue> messagePayloadOptional = messageObject.getValue(MessageCommand.JsonFields.JSON_MESSAGE_PAYLOAD); final MessageHeaders messageHeaders = MessageHeaders.of(messageHeadersObject); final MessageBuilder<T> messageBuilder = Message.<T>newBuilder(messageHeaders); MessagePayloadSerializer.deserialize(messagePayloadOptional, messageBuilder, messageHeaders); return messageBuilder.build(); }
/** * Deserializes the {@link Message} from the JSON representation - the {@code rawPayload} is decoded with Base64. * * @param <T> the type of the message's payload. * @param jsonObject the JsonObjectReader to use for reading the message * @return the Message */ protected static <T> Message<T> deserializeMessageFromJson(final JsonObject jsonObject) { final JsonObject messageObject = jsonObject.getValueOrThrow(MessageCommandResponse.JsonFields.JSON_MESSAGE); final JsonObject messageHeadersObject = messageObject.getValue(MessageCommandResponse.JsonFields.JSON_MESSAGE_HEADERS) .filter(JsonValue::isObject) .map(JsonValue::asObject) .orElseThrow(() -> JsonMissingFieldException.newBuilder() .fieldName( MessageCommandResponse.JsonFields.JSON_MESSAGE_HEADERS.getPointer().toString()) .build()); final Optional<JsonValue> messagePayloadOptional = messageObject.getValue(MessageCommand.JsonFields.JSON_MESSAGE_PAYLOAD); final MessageHeaders messageHeaders = MessageHeaders.of(messageHeadersObject); final MessageBuilder<T> messageBuilder = Message.<T>newBuilder(messageHeaders); MessagePayloadSerializer.deserialize(messagePayloadOptional, messageBuilder, messageHeaders); return messageBuilder.build(); }
/** * Deserializes the {@link Message} from the JSON representation - the {@code rawPayload} is decoded with Base64. * * @param <T> the type of the message's payload. * @param jsonObject the JsonObjectReader to use for reading the message. * @return the Message. */ protected static <T> Message<T> deserializeMessageFromJson(final JsonObject jsonObject) { final JsonObject messageObject = jsonObject.getValueOrThrow(MessageCommand.JsonFields.JSON_MESSAGE); final JsonObject messageHeadersObject = messageObject.getValueOrThrow(MessageCommand.JsonFields.JSON_MESSAGE_HEADERS); final Optional<JsonValue> messagePayloadOptional = messageObject.getValue(MessageCommand.JsonFields.JSON_MESSAGE_PAYLOAD); final MessageHeaders messageHeaders = MessageHeaders.of(messageHeadersObject); final MessageBuilder<T> messageBuilder = Message.newBuilder(messageHeaders); MessagePayloadSerializer.deserialize(messagePayloadOptional, messageBuilder, messageHeaders); return messageBuilder.build(); }
/** * Deserializes the {@link Message} from the JSON representation - the {@code rawPayload} is decoded with Base64. * * @param <T> the type of the message's payload. * @param jsonObject the JsonObjectReader to use for reading the message. * @return the Message. */ protected static <T> Message<T> deserializeMessageFromJson(final JsonObject jsonObject) { final JsonObject messageObject = jsonObject.getValueOrThrow(MessageCommand.JsonFields.JSON_MESSAGE); final JsonObject messageHeadersObject = messageObject.getValueOrThrow(MessageCommand.JsonFields.JSON_MESSAGE_HEADERS); final Optional<JsonValue> messagePayloadOptional = messageObject.getValue(MessageCommand.JsonFields.JSON_MESSAGE_PAYLOAD); final MessageHeaders messageHeaders = MessageHeaders.of(messageHeadersObject); final MessageBuilder<T> messageBuilder = Message.newBuilder(messageHeaders); MessagePayloadSerializer.deserialize(messagePayloadOptional, messageBuilder, messageHeaders); return messageBuilder.build(); }
private Function<ByteBuffer, MessageCommand<?, ?>> buildSendFeatureMessage(final MessageDirection direction, final RequestContext ctx, final DittoHeaders dittoHeaders, final String thingId, final String featureId, final String msgSubject, final Duration timeout) { final HttpRequest httpRequest = ctx.getRequest(); return payload -> { final ContentType contentType = httpRequest.entity() .getContentType(); final MessageHeaders headers = MessageHeaders.newBuilder(direction, thingId, normalizeSubject(msgSubject)) .featureId(featureId) .correlationId(dittoHeaders.getCorrelationId().orElse(null)) .contentType(contentType .toString()) .timeout(timeout) .timestamp(OffsetDateTime.now()) .validationUrl(httpRequest.getHeader(X_DITTO_VALIDATION_URL) .map(HttpHeader::value) .orElse(null)) .putHeaders(dittoHeaders) .build(); final MessageBuilder<Object> messageBuilder = initMessageBuilder(payload, contentType, headers); return SendFeatureMessage.of(thingId, featureId, messageBuilder.build(), enhanceHeaders(dittoHeaders)); }; }
private Function<ByteBuffer, MessageCommand<?, ?>> buildSendClaimMessage(final RequestContext ctx, final DittoHeaders dittoHeaders, final String thingId, final Duration timeout) { return payload -> { final ContentType contentType = ctx.getRequest() .entity() .getContentType(); final MessageHeaders headers = MessageHeaders.newBuilderForClaiming(thingId) .correlationId(dittoHeaders.getCorrelationId().orElse(null)) .contentType(contentType.toString()) .timeout(timeout) .timestamp(OffsetDateTime.now()) .putHeaders(dittoHeaders) .build(); final MessageBuilder<Object> messageBuilder = initMessageBuilder(payload, contentType, headers); return SendClaimMessage.of(thingId, messageBuilder.build(), enhanceHeaders(dittoHeaders)); }; }
private Function<ByteBuffer, MessageCommand<?, ?>> buildSendThingMessage(final MessageDirection direction, final RequestContext ctx, final DittoHeaders dittoHeaders, final String thingId, final String msgSubject, final Duration timeout) { return payload -> { final HttpRequest httpRequest = ctx.getRequest(); final ContentType contentType = httpRequest.entity().getContentType(); final MessageHeaders headers = MessageHeaders.newBuilder(direction, thingId, normalizeSubject(msgSubject)) .correlationId(dittoHeaders.getCorrelationId().orElse(null)) .contentType(contentType.toString()) .timeout(timeout) .timestamp(OffsetDateTime.now()) .putHeaders(dittoHeaders) .build(); final MessageBuilder<Object> messageBuilder = initMessageBuilder(payload, contentType, headers); return SendThingMessage.of(thingId, messageBuilder.build(), enhanceHeaders(dittoHeaders)); }; }