public static String toJson(Message message) { StringWriter json = new StringWriter(); try (JsonWriter jsonWriter = JsonWriter.of(json)) { write(message, jsonWriter); } return json.toString(); }
private static void writeMessageValue(Message message, JsonWriter writer) { MessageType messageType = MessageType.of(message); if (messageType.doesWrapRepeated) { Descriptors.FieldDescriptor repeatedDescriptor = messageType.fieldDescriptors[0]; if (repeatedDescriptor.isMapField()) { writeMap((Collection<MapEntry>) message.getField(repeatedDescriptor), writer); } else { writeArray(writer, repeatedDescriptor, (Collection) message.getField(repeatedDescriptor)); } } else { writer.beginObject(); writeMessage(message, writer); writer.endObject(); } } }
private static void writeMessage(Message message, JsonWriter writer) { MessageType type = MessageType.of(message); for (Descriptors.FieldDescriptor fieldDescriptor : type.fieldDescriptors) { if (fieldDescriptor.isRepeated()) { writer.name(fieldDescriptor.getName()); if (fieldDescriptor.isMapField()) { writeMap((Collection<MapEntry>) message.getField(fieldDescriptor), writer); } else { writeArray(writer, fieldDescriptor, (Collection) message.getField(fieldDescriptor)); } } else if (message.hasField(fieldDescriptor)) { writer.name(fieldDescriptor.getName()); Object fieldValue = message.getField(fieldDescriptor); writeFieldValue(fieldDescriptor, fieldValue, writer); } } }
private static void writeArray(JsonWriter writer, Descriptors.FieldDescriptor fieldDescriptor, Collection array) { writer.beginArray(); for (Object o : array) { writeFieldValue(fieldDescriptor, o, writer); } writer.endArray(); }
public static void write(Message message, JsonWriter writer) { writer.setSerializeNulls(false).setSerializeEmptys(true); writer.beginObject(); writeMessage(message, writer); writer.endObject(); }
private static void writeFieldValue(Descriptors.FieldDescriptor fieldDescriptor, Object value, JsonWriter writer) { switch (fieldDescriptor.getJavaType()) { case INT: writer.value((Integer) value); break; case LONG: writer.value((Long) value); break; case DOUBLE: writer.value((Double) value); break; case BOOLEAN: writer.value((Boolean) value); break; case STRING: writer.value((String) value); break; case ENUM: writer.value(((Descriptors.EnumValueDescriptor) value).getName()); break; case MESSAGE: writeMessageValue((Message) value, writer); break; default: throw new IllegalStateException(String.format("JSON format does not support type '%s' of field '%s'", fieldDescriptor.getJavaType(), fieldDescriptor.getName())); } }
private static void writeMap(Collection<MapEntry> mapEntries, JsonWriter writer) { writer.beginObject(); for (MapEntry mapEntry : mapEntries) { // Key fields are always double-quoted in json writer.name(mapEntry.getKey().toString()); Descriptors.FieldDescriptor valueDescriptor = mapEntry.getDescriptorForType().findFieldByName("value"); writeFieldValue(valueDescriptor, mapEntry.getValue(), writer); } writer.endObject(); }
public static void write(Message message, JsonWriter writer) { writer.setSerializeNulls(false).setSerializeEmptys(true); writer.beginObject(); writeMessage(message, writer); writer.endObject(); }
private static void writeFieldValue(Descriptors.FieldDescriptor fieldDescriptor, Object value, JsonWriter writer) { switch (fieldDescriptor.getJavaType()) { case INT: writer.value((Integer) value); break; case LONG: writer.value((Long) value); break; case DOUBLE: writer.value((Double) value); break; case BOOLEAN: writer.value((Boolean) value); break; case STRING: writer.value((String) value); break; case ENUM: writer.value(((Descriptors.EnumValueDescriptor) value).getName()); break; case MESSAGE: writeMessageValue((Message) value, writer); break; default: throw new IllegalStateException(String.format("JSON format does not support type '%s' of field '%s'", fieldDescriptor.getJavaType(), fieldDescriptor.getName())); } }
public static void writeProtobuf(Message msg, Request request, Response response) { OutputStream output = response.stream().output(); try { if (request.getMediaType().equals(PROTOBUF)) { response.stream().setMediaType(PROTOBUF); msg.writeTo(output); } else { response.stream().setMediaType(JSON); try (JsonWriter writer = JsonWriter.of(new OutputStreamWriter(output, UTF_8))) { ProtobufJsonFormat.write(msg, writer); } } } catch (Exception e) { throw new IllegalStateException("Error while writing protobuf message", e); } finally { IOUtils.closeQuietly(output); } }
private static void writeMessageValue(Message message, JsonWriter writer) { MessageType messageType = MessageType.of(message); if (messageType.doesWrapRepeated) { Descriptors.FieldDescriptor repeatedDescriptor = messageType.fieldDescriptors[0]; if (repeatedDescriptor.isMapField()) { writeMap((Collection<MapEntry>) message.getField(repeatedDescriptor), writer); } else { writeArray(writer, repeatedDescriptor, (Collection) message.getField(repeatedDescriptor)); } } else { writer.beginObject(); writeMessage(message, writer); writer.endObject(); } } }
private static void writeMessage(Message message, JsonWriter writer) { MessageType type = MessageType.of(message); for (Descriptors.FieldDescriptor fieldDescriptor : type.fieldDescriptors) { if (fieldDescriptor.isRepeated()) { writer.name(fieldDescriptor.getName()); if (fieldDescriptor.isMapField()) { writeMap((Collection<MapEntry>) message.getField(fieldDescriptor), writer); } else { writeArray(writer, fieldDescriptor, (Collection) message.getField(fieldDescriptor)); } } else if (message.hasField(fieldDescriptor)) { writer.name(fieldDescriptor.getName()); Object fieldValue = message.getField(fieldDescriptor); writeFieldValue(fieldDescriptor, fieldValue, writer); } } }
private static void writeArray(JsonWriter writer, Descriptors.FieldDescriptor fieldDescriptor, Collection array) { writer.beginArray(); for (Object o : array) { writeFieldValue(fieldDescriptor, o, writer); } writer.endArray(); }
private void test(List<DuplicationsParser.Block> blocks, @Nullable String branch, @Nullable String pullRequest, String expected) { StringWriter output = new StringWriter(); JsonWriter jsonWriter = JsonWriter.of(output); ProtobufJsonFormat.write(underTest.build(db.getSession(), blocks, branch, pullRequest), jsonWriter); JsonAssert.assertJson(output.toString()).isSimilarTo(expected); }
private static void writeMap(Collection<MapEntry> mapEntries, JsonWriter writer) { writer.beginObject(); for (MapEntry mapEntry : mapEntries) { // Key fields are always double-quoted in json writer.name(mapEntry.getKey().toString()); Descriptors.FieldDescriptor valueDescriptor = mapEntry.getDescriptorForType().findFieldByName("value"); writeFieldValue(valueDescriptor, mapEntry.getValue(), writer); } writer.endObject(); }
@Test public void bytes_field_can_not_be_converted() { expectedException.expect(RuntimeException.class); expectedException.expectMessage("JSON format does not support type 'BYTE_STRING' of field 'bytesField'"); PrimitiveTypeMsg protobuf = PrimitiveTypeMsg.newBuilder() .setBytesField(ByteString.copyFrom(new byte[]{2, 4})) .build(); ProtobufJsonFormat.write(protobuf, JsonWriter.of(new StringWriter())); }
public static String toJson(Message message) { StringWriter json = new StringWriter(); try (JsonWriter jsonWriter = JsonWriter.of(json)) { write(message, jsonWriter); } return json.toString(); }
public static void writeProtobuf(Message msg, Request request, Response response) { OutputStream output = response.stream().output(); try { if (request.getMediaType().equals(PROTOBUF)) { response.stream().setMediaType(PROTOBUF); msg.writeTo(output); } else { response.stream().setMediaType(JSON); try (JsonWriter writer = JsonWriter.of(new OutputStreamWriter(output, UTF_8))) { ProtobufJsonFormat.write(msg, writer); } } } catch (Exception e) { throw new IllegalStateException("Error while writing protobuf message", e); } finally { IOUtils.closeQuietly(output); } }