类com.google.protobuf.UnknownFieldSet.Field源码实例Demo

下面列出了怎么用com.google.protobuf.UnknownFieldSet.Field的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: krpc   文件: Bootstrap.java
private void loadProtoFile(RpcApp app, FileDescriptor base, String file) throws IOException, DescriptorValidationException {

        InputStream in = getResource(file);
        FileDescriptorSet descriptorSet = FileDescriptorSet.parseFrom(in);
        in.close();

        Map<String, Descriptor> descriptors = new HashMap<>();
        for (FileDescriptorProto fdp : descriptorSet.getFileList()) {
            FileDescriptor fd = FileDescriptor.buildFrom(fdp, new FileDescriptor[]{base});

            for (Descriptor descriptor : fd.getMessageTypes()) {
                String className = descriptor.getName();
                descriptors.put(className, descriptor);
            }
            for (ServiceDescriptor svr : fd.getServices()) {
                Field f = svr.getOptions().getUnknownFields().getField(KrpcExt.SERVICEID_FIELD_NUMBER);
                String serviceName = svr.getName();
                int serviceId = f.getVarintList().get(0).intValue();
                for (MethodDescriptor m : svr.getMethods()) {
                    String msgName = m.getName();
                    Field f2 = m.getOptions().getUnknownFields().getField(KrpcExt.MSGID_FIELD_NUMBER);
                    int msgId = f2.getVarintList().get(0).intValue();
                    log.info(String.format("dynamic proto resource loaded, serviceId=%d,msgId=%d,serviceName=%s,msgName=%s", serviceId, msgId, serviceName, msgName));
                    Descriptor reqDesc = m.getInputType();
                    Descriptor resDesc = m.getOutputType();
                    app.serviceMetas.addDynamic(serviceId, msgId, reqDesc, resDesc, serviceName, msgName);
                }
            }
        }
    }
 
源代码2 项目: dremio-oss   文件: TestLegacyProtobufSerializer.java
@Test
public void testParse() throws InvalidProtocolBufferException {
  // Creating a protobuf message as it would be generated by protostuff for the following message
  // SearchQuery -> Boolean -> [ SearchQuery -> Term, SearchQuery -> Term ]

  final UnknownFieldSet term1 = UnknownFieldSet.newBuilder()
      .addField(SearchQuery.Term.FIELD_FIELD_NUMBER, Field.newBuilder().addLengthDelimited(ByteString.copyFromUtf8("foo")).build())
      .addField(SearchQuery.Term.VALUE_FIELD_NUMBER, Field.newBuilder().addLengthDelimited(ByteString.copyFromUtf8("bar")).build())
      .build();
  final UnknownFieldSet sq1 = UnknownFieldSet.newBuilder()
      .addField(SearchQuery.TYPE_FIELD_NUMBER, Field.newBuilder().addVarint(SearchQuery.Type.TERM_VALUE).build())
      .addField(SearchQuery.TERM_FIELD_NUMBER, Field.newBuilder().addGroup(term1).build())
      .build();

  final UnknownFieldSet term2 = UnknownFieldSet.newBuilder()
      .addField(SearchQuery.Term.FIELD_FIELD_NUMBER, Field.newBuilder().addLengthDelimited(ByteString.copyFromUtf8("foo")).build())
      .addField(SearchQuery.Term.VALUE_FIELD_NUMBER, Field.newBuilder().addLengthDelimited(ByteString.copyFromUtf8("baz")).build())
      .build();
  final UnknownFieldSet sq2 = UnknownFieldSet.newBuilder()
      .addField(SearchQuery.TYPE_FIELD_NUMBER, Field.newBuilder().addVarint(SearchQuery.Type.TERM_VALUE).build())
      .addField(SearchQuery.TERM_FIELD_NUMBER, Field.newBuilder().addGroup(term2).build())
      .build();

  final UnknownFieldSet bool = UnknownFieldSet.newBuilder()
      .addField(SearchQuery.Boolean.OP_FIELD_NUMBER, Field.newBuilder().addVarint(SearchQuery.BooleanOp.AND_VALUE).build())
      .addField(SearchQuery.Boolean.CLAUSES_FIELD_NUMBER, Field.newBuilder().addGroup(sq1).addGroup(sq2).build())
      .build();

  final SearchQuery query = SearchQuery.newBuilder()
      .setType(SearchQuery.Type.BOOLEAN)
      .setUnknownFields(UnknownFieldSet.newBuilder().addField(SearchQuery.BOOLEAN_FIELD_NUMBER, Field.newBuilder().addGroup(bool).build()).build())
      .build();

  final SearchQuery expected = SearchQuery.newBuilder()
      .setType(SearchQuery.Type.BOOLEAN)
      .setBoolean(
          SearchQuery.Boolean.newBuilder()
            .setOp(SearchQuery.BooleanOp.AND)
            .addClauses(SearchQuery.newBuilder()
                .setType(SearchQuery.Type.TERM).setTerm(Term.newBuilder().setField("foo").setValue("bar")))
            .addClauses(SearchQuery.newBuilder()
                .setType(SearchQuery.Type.TERM).setTerm(Term.newBuilder().setField("foo").setValue("baz")))
            )
      .build();

  assertThat(LegacyProtobufSerializer.parseFrom(SearchQuery.PARSER, query.toByteString()), is(equalTo(expected)));
}
 
 类所在包
 同包方法