/** * Registers proto files and marshallers. * * @param ctx the serialization context * @throws org.infinispan.protostream.DescriptorParserException if a proto definition file fails * to parse correctly * @throws IOException if proto file registration fails */ public static void registerMarshallers(SerializationContext ctx) throws IOException { ctx.registerProtoFiles(FileDescriptorSource.fromResources(PROTOBUF_RES)); ctx.registerMarshaller(new UserMarshaller()); ctx.registerMarshaller(new GenderMarshaller()); ctx.registerMarshaller(new AddressMarshaller()); ctx.registerMarshaller(new AccountMarshaller()); ctx.registerMarshaller(new TransactionMarshaller()); }
@Override public void registerProtoFiles(FileDescriptorSource source) throws IOException { Map<String, char[]> fileDescriptors = source.getFileDescriptors(); Map<String, String> files = new HashMap<String, String>(fileDescriptors.size()); for (String key : fileDescriptors.keySet()) { files.put(key, new String(fileDescriptors.get(key))); } protobufMetadataManager.getCache().putAll(files); }
@BeforeClass protected void registerProtobufSchema() throws Exception { // initialize client-side serialization context String authorSchemaFile = "/* @Indexed */\n" + "message Author {\n" + " required int32 id = 1;\n" + " /* @IndexedField */\n" + " required string name = 2;\n" + "}"; SerializationContext serializationContext = ProtoStreamMarshaller.getSerializationContext(remoteCacheManager); serializationContext.registerProtoFiles( FileDescriptorSource.fromString("author.proto", authorSchemaFile)); serializationContext.registerMarshaller( new MessageMarshaller<Author>() { @Override public Author readFrom(ProtoStreamReader reader) throws IOException { int id = reader.readInt("id"); String name = reader.readString("name"); Author author = new Author(); author.setId(id); author.setName(name); return author; } @Override public void writeTo(ProtoStreamWriter writer, Author author) throws IOException { writer.writeInt("id", author.getId()); writer.writeString("name", author.getName()); } @Override public Class<? extends Author> getJavaClass() { return Author.class; } @Override public String getTypeName() { return "Author"; } }); ProtoSchemaBuilder protoSchemaBuilder = new ProtoSchemaBuilder(); String memoSchemaFile = protoSchemaBuilder.fileName("memo.proto").addClass(Memo.class).build(serializationContext); // initialize server-side serialization context RemoteCache<String, String> metadataCache = remoteCacheManager.getCache(ProtobufMetadataManagerConstants.PROTOBUF_METADATA_CACHE_NAME); metadataCache.put("author.proto", authorSchemaFile); metadataCache.put("memo.proto", memoSchemaFile); assertFalse(metadataCache.containsKey(ProtobufMetadataManagerConstants.ERRORS_KEY_SUFFIX)); }