Search in sources :

Example 1 with ProtostuffException

use of io.protostuff.ProtostuffException in project incubator-servicecomb-java-chassis by apache.

the class RuntimeMapFieldProtobuf method mergeFrom.

@SuppressWarnings("unchecked")
@Override
protected void mergeFrom(Input input, T message) throws IOException {
    if (!ProtobufFeatureUtils.isUseProtobufMapCodec()) {
        runtimeMapField.mergeFrom(input, message);
        return;
    }
    Map<Object, Object> value = null;
    try {
        value = (Map<Object, Object>) field.get(message);
        if (value == null) {
            value = schema.newMessage();
            field.set(message, value);
        }
    } catch (Exception e) {
        throw new ProtostuffException("Failed to get or set map field " + field.getDeclaringClass().getName() + ":" + field.getName(), e);
    }
    MapWrapper<Object, Object> mapWrapper = MapSchemaUtils.createMapWrapper(value);
    if (ByteArrayInput.class.isInstance(input)) {
        ((ByteArrayInput) input).readRawVarint32();
    } else if (ByteBufferInput.class.isInstance(input)) {
        ((ByteBufferInput) input).readRawVarint32();
    } else {
        throw new Error("not handler " + input.getClass().getName());
    }
    int keyNumber = input.readFieldNumber(schema);
    if (keyNumber != 1) {
        throw new ProtostuffException("The map was incorrectly serialized, expect key number 1, but be " + keyNumber);
    }
    Object key = kFrom(input, null);
    int valueNumber = input.readFieldNumber(schema);
    if (valueNumber != 2) {
        throw new ProtostuffException("The map was incorrectly serialized, expect value number 2, but be " + valueNumber);
    }
    vPutFrom(input, mapWrapper, key);
}
Also used : ByteArrayInput(io.protostuff.ByteArrayInput) ByteBufferInput(io.protostuff.ByteBufferInput) ProtostuffException(io.protostuff.ProtostuffException) IOException(java.io.IOException) ProtostuffException(io.protostuff.ProtostuffException)

Aggregations

ByteArrayInput (io.protostuff.ByteArrayInput)1 ByteBufferInput (io.protostuff.ByteBufferInput)1 ProtostuffException (io.protostuff.ProtostuffException)1 IOException (java.io.IOException)1