@Test(expected=UnrecognizedMessageTypeException.class) public void deserializeWellFormedButConfusedMessage() throws IOException, UnrecognizedMessageTypeException { // Build a simple message that's missing a name BinaryMessages.VehicleMessage.Builder builder = BinaryMessages.VehicleMessage.newBuilder(); builder.setType(BinaryMessages.VehicleMessage.Type.SIMPLE); BinaryMessages.SimpleMessage.Builder messageBuilder = BinaryMessages.SimpleMessage.newBuilder(); BinaryMessages.DynamicField.Builder fieldBuilder = BinaryMessages.DynamicField.newBuilder(); fieldBuilder.setType(BinaryMessages.DynamicField.Type.NUM); fieldBuilder.setNumericValue(42); messageBuilder.setValue(fieldBuilder); builder.setSimpleMessage(messageBuilder); BinaryMessages.VehicleMessage serialized = builder.build(); ByteArrayOutputStream output = new ByteArrayOutputStream(); serialized.writeTo(output); InputStream input = new ByteArrayInputStream(output.toByteArray()); BinaryFormatter.deserialize(input); }
@Test public void deserializeNoErrors() throws IOException, UnrecognizedMessageTypeException { BinaryMessages.VehicleMessage.Builder builder = BinaryMessages.VehicleMessage.newBuilder(); builder.setType(BinaryMessages.VehicleMessage.Type.SIMPLE); BinaryMessages.SimpleMessage.Builder messageBuilder = BinaryMessages.SimpleMessage.newBuilder(); messageBuilder.setName(messageName); BinaryMessages.DynamicField.Builder fieldBuilder = BinaryMessages.DynamicField.newBuilder(); fieldBuilder.setType(BinaryMessages.DynamicField.Type.NUM); fieldBuilder.setNumericValue(42); messageBuilder.setValue(fieldBuilder); builder.setSimpleMessage(messageBuilder); BinaryMessages.VehicleMessage serialized = builder.build(); ByteArrayOutputStream output = new ByteArrayOutputStream(); serialized.writeTo(output); InputStream input = new ByteArrayInputStream(output.toByteArray()); try { message = (SimpleVehicleMessage) BinaryFormatter.deserialize(input); } catch(UnrecognizedMessageTypeException e) {} assertEquals(message.getName(), messageName); assertEquals(message.getValue(), value); }
public static MessageLite preSerialize(VehicleMessage message) throws SerializationException { if(message.hasExtras()) { throw new SerializationException("Messages with extras cannot be " + "serialized to the binary format - use JSON instead"); } BinaryMessages.VehicleMessage.Builder builder = BinaryMessages.VehicleMessage.newBuilder(); if(message instanceof CanMessage) { serializeCanMessage(builder, (CanMessage) message); } else if(message instanceof DiagnosticResponse) { serializeDiagnosticResponse(builder, (DiagnosticResponse) message); } else if(message instanceof Command) { serializeCommand(builder, (Command) message); } else if(message instanceof CommandResponse) { serializeCommandResponse(builder, (CommandResponse) message); } else if(message instanceof EventedSimpleVehicleMessage) { serializeEventedSimpleVehicleMessage(builder, (EventedSimpleVehicleMessage) message); } else if(message instanceof SimpleVehicleMessage) { serializeSimpleVehicleMessage(builder, (SimpleVehicleMessage) message); } else if(message instanceof NamedVehicleMessage) { serializeNamedVehicleMessage(builder, (NamedVehicleMessage) message); } else { serializeGenericVehicleMessage(builder, message); } return builder.build(); }