Search in sources :

Example 1 with RootSerializer

use of org.apache.servicecomb.foundation.protobuf.RootSerializer in project java-chassis by ServiceComb.

the class AnyEntrySchema method createEntryWriter.

private SchemaWriter<Object> createEntryWriter(String actualTypeName, Object _value) {
    Message message = protoMapper.getProto().getMessage(actualTypeName);
    if (message == null) {
        // not standard, protobuf can not support or not define this type , just extend
        return this::jsonExtend;
    }
    // standard pack
    RootSerializer valueSerializer = protoMapper.createRootSerializer(message, _value.getClass());
    String valueCanonicalName = message.getCanonicalName();
    return (output, value) -> {
        standardPack(output, value, valueCanonicalName, valueSerializer);
    };
}
Also used : SchemaWriter(io.protostuff.SchemaWriter) WireFormat(io.protostuff.WireFormat) OutputEx(io.protostuff.OutputEx) SchemaEx(io.protostuff.SchemaEx) ProtoMapper(org.apache.servicecomb.foundation.protobuf.ProtoMapper) IOException(java.io.IOException) InputEx(io.protostuff.InputEx) Type(java.lang.reflect.Type) TypeFactory(com.fasterxml.jackson.databind.type.TypeFactory) ProtoConst(org.apache.servicecomb.foundation.protobuf.internal.ProtoConst) Map(java.util.Map) RootDeserializer(org.apache.servicecomb.foundation.protobuf.RootDeserializer) Message(io.protostuff.compiler.model.Message) ConcurrentHashMapEx(org.apache.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx) JavaType(com.fasterxml.jackson.databind.JavaType) RootSerializer(org.apache.servicecomb.foundation.protobuf.RootSerializer) PropertyWrapper(org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyWrapper) Message(io.protostuff.compiler.model.Message) RootSerializer(org.apache.servicecomb.foundation.protobuf.RootSerializer)

Example 2 with RootSerializer

use of org.apache.servicecomb.foundation.protobuf.RootSerializer in project incubator-servicecomb-java-chassis by apache.

the class AnyEntrySchema method createEntryWriter.

private SchemaWriter<Object> createEntryWriter(String actualTypeName, Object _value) {
    Message message = protoMapper.getProto().getMessage(actualTypeName);
    if (message == null) {
        // not standard, protobuf can not support or not define this type , just extend
        return this::jsonExtend;
    }
    // standard pack
    RootSerializer valueSerializer = protoMapper.createRootSerializer(message, _value.getClass());
    String valueCanonicalName = message.getCanonicalName();
    return (output, value) -> {
        standardPack(output, value, valueCanonicalName, valueSerializer);
    };
}
Also used : SchemaWriter(io.protostuff.SchemaWriter) WireFormat(io.protostuff.WireFormat) OutputEx(io.protostuff.OutputEx) SchemaEx(io.protostuff.SchemaEx) ProtoMapper(org.apache.servicecomb.foundation.protobuf.ProtoMapper) IOException(java.io.IOException) InputEx(io.protostuff.InputEx) Type(java.lang.reflect.Type) TypeFactory(com.fasterxml.jackson.databind.type.TypeFactory) ProtoConst(org.apache.servicecomb.foundation.protobuf.internal.ProtoConst) Map(java.util.Map) RootDeserializer(org.apache.servicecomb.foundation.protobuf.RootDeserializer) Message(io.protostuff.compiler.model.Message) ConcurrentHashMapEx(org.apache.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx) JavaType(com.fasterxml.jackson.databind.JavaType) RootSerializer(org.apache.servicecomb.foundation.protobuf.RootSerializer) PropertyWrapper(org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyWrapper) Message(io.protostuff.compiler.model.Message) RootSerializer(org.apache.servicecomb.foundation.protobuf.RootSerializer)

Example 3 with RootSerializer

use of org.apache.servicecomb.foundation.protobuf.RootSerializer in project incubator-servicecomb-java-chassis by apache.

the class SerializerSchemaManager method createRootSerializer.

public RootSerializer createRootSerializer(Message message, Type type) {
    if (ProtoUtils.isAnyMessage(message)) {
        SchemaEx<Object> messageSchema = new AnyEntrySchema(protoMapper, type);
        return new RootSerializer(messageSchema);
    }
    JavaType javaType = TypeFactory.defaultInstance().constructType(type);
    SchemaEx<Object> messageSchema = getOrCreateMessageSchema(message, javaType);
    return new RootSerializer(messageSchema);
}
Also used : AnyEntrySchema(org.apache.servicecomb.foundation.protobuf.internal.schema.any.AnyEntrySchema) JavaType(com.fasterxml.jackson.databind.JavaType) RootSerializer(org.apache.servicecomb.foundation.protobuf.RootSerializer)

Example 4 with RootSerializer

use of org.apache.servicecomb.foundation.protobuf.RootSerializer in project java-chassis by ServiceComb.

the class TestModelWrap method pojoModel.

@SuppressWarnings("unchecked")
@Test
public void pojoModel() throws IOException {
    RootSerializer pojoSerializer = modelProtoMapper.createRootSerializer("PojoModel", PojoModel.class);
    RootDeserializer<Map<String, Object>> pojoMapDeserializer = modelProtoMapper.createRootDeserializer("PojoModel", Map.class);
    RootDeserializer<PojoModel> pojoModelDeserializer = modelProtoMapper.createRootDeserializer("PojoModel", PojoModel.class);
    RootSerializer protoSerializer = modelProtoMapper.createRootSerializer("ProtoModel", ProtoModel.class);
    RootDeserializer<Map<String, Object>> protoMapDeserializer = modelProtoMapper.createRootDeserializer("ProtoModel", Map.class);
    RootDeserializer<ProtoModel> protoModelDeserializer = modelProtoMapper.createRootDeserializer("ProtoModel", ProtoModel.class);
    PojoModel pojoModel = new PojoModel();
    pojoModel.init();
    String jsonPojoModel = Json.encode(pojoModel);
    Map<String, Object> mapFromPojoModel = (Map<String, Object>) Json.decodeValue(jsonPojoModel, Map.class);
    ProtoModel protoModel = new ProtoModel();
    protoModel.init();
    String jsonProtoModel = Json.encode(protoModel);
    Map<String, Object> mapFromProtoModel = (Map<String, Object>) Json.decodeValue(jsonProtoModel, Map.class);
    // serialize
    byte[] bytes = protoSerializer.serialize(protoModel);
    Assert.assertArrayEquals(bytes, protoSerializer.serialize(mapFromProtoModel));
    Assert.assertArrayEquals(bytes, pojoSerializer.serialize(pojoModel));
    Assert.assertArrayEquals(bytes, pojoSerializer.serialize(mapFromPojoModel));
    // deserialize pojoModel
    PojoModel newPojoModel = pojoModelDeserializer.deserialize(bytes);
    Assert.assertEquals(jsonPojoModel, Json.encode(newPojoModel));
    Map<String, Object> mapFromNewPojoModel = pojoMapDeserializer.deserialize(bytes);
    Assert.assertEquals(jsonPojoModel, Json.encode(mapFromNewPojoModel));
    // deserialize protoModel
    ProtoModel newProtoModel = protoModelDeserializer.deserialize(bytes);
    Assert.assertEquals(jsonProtoModel, Json.encode(newProtoModel));
    Map<String, Object> mapFromNewProtoModel = protoMapDeserializer.deserialize(bytes);
    Assert.assertEquals(jsonProtoModel, Json.encode(mapFromNewProtoModel));
}
Also used : RootSerializer(org.apache.servicecomb.foundation.protobuf.RootSerializer) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) Test(org.junit.Test)

Example 5 with RootSerializer

use of org.apache.servicecomb.foundation.protobuf.RootSerializer in project java-chassis by ServiceComb.

the class SerializerSchemaManager method createRootSerializer.

public RootSerializer createRootSerializer(Message message, Type type) {
    if (ProtoUtils.isAnyMessage(message)) {
        SchemaEx<Object> messageSchema = new AnyEntrySchema(protoMapper, type);
        return new RootSerializer(messageSchema);
    }
    JavaType javaType = TypeFactory.defaultInstance().constructType(type);
    SchemaEx<Object> messageSchema = getOrCreateMessageSchema(message, javaType);
    return new RootSerializer(messageSchema);
}
Also used : AnyEntrySchema(org.apache.servicecomb.foundation.protobuf.internal.schema.any.AnyEntrySchema) JavaType(com.fasterxml.jackson.databind.JavaType) RootSerializer(org.apache.servicecomb.foundation.protobuf.RootSerializer)

Aggregations

RootSerializer (org.apache.servicecomb.foundation.protobuf.RootSerializer)6 JavaType (com.fasterxml.jackson.databind.JavaType)4 Map (java.util.Map)4 TypeFactory (com.fasterxml.jackson.databind.type.TypeFactory)2 InputEx (io.protostuff.InputEx)2 OutputEx (io.protostuff.OutputEx)2 SchemaEx (io.protostuff.SchemaEx)2 SchemaWriter (io.protostuff.SchemaWriter)2 WireFormat (io.protostuff.WireFormat)2 Message (io.protostuff.compiler.model.Message)2 IOException (java.io.IOException)2 Type (java.lang.reflect.Type)2 LinkedHashMap (java.util.LinkedHashMap)2 ConcurrentHashMapEx (org.apache.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx)2 ProtoMapper (org.apache.servicecomb.foundation.protobuf.ProtoMapper)2 RootDeserializer (org.apache.servicecomb.foundation.protobuf.RootDeserializer)2 ProtoConst (org.apache.servicecomb.foundation.protobuf.internal.ProtoConst)2 PropertyWrapper (org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyWrapper)2 AnyEntrySchema (org.apache.servicecomb.foundation.protobuf.internal.schema.any.AnyEntrySchema)2 Test (org.junit.Test)2