/** * 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(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(); }
private static Adaptable jsonifiableToAdaptable(final Jsonifiable.WithPredicate<JsonObject, JsonField> jsonifiable, final TopicPath.Channel channel, final ProtocolAdapter adapter) { final Adaptable adaptable; if (jsonifiable instanceof Command) { adaptable = adapter.toAdaptable((Command) jsonifiable, channel); } else if (jsonifiable instanceof Event) { adaptable = adapter.toAdaptable((Event) jsonifiable, channel); } else if (jsonifiable instanceof CommandResponse) { adaptable = adapter.toAdaptable((CommandResponse) jsonifiable, channel); } else if (jsonifiable instanceof DittoRuntimeException) { final DittoHeaders enhancedHeaders = ((DittoRuntimeException) jsonifiable).getDittoHeaders().toBuilder() .channel(channel.getName()) .build(); ThingErrorResponse errorResponse; try { errorResponse = ThingErrorResponse.of(MessageHeaders.of(enhancedHeaders).getThingId(), (DittoRuntimeException) jsonifiable, enhancedHeaders); } catch (final IllegalStateException | IllegalArgumentException | DittoRuntimeException e) { // thrown if headers did not contain the thing ID: errorResponse = ThingErrorResponse.of((DittoRuntimeException) jsonifiable, enhancedHeaders); } adaptable = adapter.toAdaptable(errorResponse, channel); } else { throw new IllegalArgumentException("Jsonifiable was neither Command nor CommandResponse nor" + " Event nor DittoRuntimeException: " + jsonifiable.getClass().getSimpleName()); } return adaptable; }
/** * 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(); }
/** * Creates a new {@code SendMessageAcceptedResponse} from a JSON object. * * @param jsonObject the JSON object of which the SendMessageAcceptedResponse is to be created. * @param dittoHeaders the headers. * @return the command. * @throws NullPointerException if {@code jsonObject} is {@code null}. * @throws org.eclipse.ditto.json.JsonParseException if the passed in {@code jsonObject} was not in the expected * format. */ public static SendMessageAcceptedResponse fromJson(final JsonObject jsonObject, final DittoHeaders dittoHeaders) { return new CommandResponseJsonDeserializer<SendMessageAcceptedResponse>(TYPE, jsonObject).deserialize( statusCode -> { final String thingId = jsonObject.getValueOrThrow(MessageCommandResponse.JsonFields.JSON_THING_ID); final JsonObject jsonHeaders = jsonObject.getValueOrThrow(MessageCommandResponse.JsonFields.JSON_MESSAGE) .getValueOrThrow(MessageCommandResponse.JsonFields.JSON_MESSAGE_HEADERS); final MessageHeaders messageHeaders = MessageHeaders.of(jsonHeaders); return newInstance(thingId, messageHeaders, statusCode, dittoHeaders); }); }
/** * Creates a new {@code SendMessageAcceptedResponse} from a JSON object. * * @param jsonObject the JSON object of which the SendMessageAcceptedResponse is to be created. * @param dittoHeaders the headers. * @return the command. * @throws NullPointerException if {@code jsonObject} is {@code null}. * @throws org.eclipse.ditto.json.JsonParseException if the passed in {@code jsonObject} was not in the expected * format. */ public static SendMessageAcceptedResponse fromJson(final JsonObject jsonObject, final DittoHeaders dittoHeaders) { return new CommandResponseJsonDeserializer<SendMessageAcceptedResponse>(TYPE, jsonObject).deserialize( statusCode -> { final String thingId = jsonObject.getValueOrThrow(MessageCommandResponse.JsonFields.JSON_THING_ID); final JsonObject jsonHeaders = jsonObject.getValueOrThrow(MessageCommandResponse.JsonFields.JSON_MESSAGE) .getValueOrThrow(MessageCommandResponse.JsonFields.JSON_MESSAGE_HEADERS); final MessageHeaders messageHeaders = MessageHeaders.of(jsonHeaders); return newInstance(thingId, messageHeaders, statusCode, dittoHeaders); }); }