java类com.google.protobuf.ExtensionRegistry的实例源码

JsonJacksonFormat.java 文件源码 项目:jigsaw-payment 阅读 33 收藏 0 点赞 0 评论 0
/**
 * Parse a text-format message from {@code input} and merge the contents into {@code builder}.
 * Extensions will be recognized if they are registered in {@code extensionRegistry}.
 * @throws IOException
 */
public void merge(JsonParser parser,
                         ExtensionRegistry extensionRegistry,
                         Message.Builder builder) throws IOException {

    JsonToken token = parser.nextToken();
    if (token.equals(JsonToken.START_OBJECT)) {
        token = parser.nextToken();
    }
    while (token != null && !token.equals(JsonToken.END_OBJECT)) {
        mergeField(parser, extensionRegistry, builder);
        token = parser.nextToken();
    }

    // Test to make sure the tokenizer has reached the end of the stream.
    if (parser.nextToken() != null) {
        throw new RuntimeException("Expecting the end of the stream, but there seems to be more data!  Check the input for a valid JSON format.");
    }
}
JsonJacksonFormat.java 文件源码 项目:jigsaw-payment 阅读 25 收藏 0 点赞 0 评论 0
private void handleMissingField(String fieldName, JsonParser parser,
                                       ExtensionRegistry extensionRegistry,
                                       UnknownFieldSet.Builder builder) throws IOException {

    JsonToken token = parser.nextToken();
    if (token.equals(JsonToken.START_OBJECT)) {
        // Message structure
        token = parser.nextToken(); // skip name
        while (token != null && !token.equals(JsonToken.END_OBJECT)) {
            handleMissingField(fieldName, parser, extensionRegistry, builder);
            token = parser.nextToken(); // get } or field name
        }
    } else if (token.equals(JsonToken.START_ARRAY)) {
        // Collection
        do {
            handleMissingField(fieldName, parser, extensionRegistry, builder);
            token = parser.getCurrentToken(); // got value or ]
        } while (token != null && !token.equals(JsonToken.END_ARRAY));
    } else {
        // Primitive value
        // NULL, INT, BOOL, STRING
        // nothing to do..
    }
}
JsonJacksonFormat.java 文件源码 项目:jigsaw-payment 阅读 51 收藏 0 点赞 0 评论 0
private void handleValue(JsonParser parser,
                                ExtensionRegistry extensionRegistry,
                                Message.Builder builder,
                                FieldDescriptor field,
                                ExtensionRegistry.ExtensionInfo extension,
                                boolean unknown) throws IOException {

    Object value = null;
    if (field.getJavaType() == FieldDescriptor.JavaType.MESSAGE) {
        value = handleObject(parser, extensionRegistry, builder, field, extension, unknown);
    } else {
        value = handlePrimitive(parser, field);
    }
    if (value != null) {
        if (field.isRepeated()) {
            builder.addRepeatedField(field, value);
        } else {
            builder.setField(field, value);
        }
    }
}
JsonFormat.java 文件源码 项目:jigsaw-payment 阅读 73 收藏 0 点赞 0 评论 0
/**
 * Parse a text-format message from {@code input} and merge the contents into {@code builder}.
 * Extensions will be recognized if they are registered in {@code extensionRegistry}.
 */
public void merge(CharSequence input,
                         ExtensionRegistry extensionRegistry,
                         Message.Builder builder) throws ParseException {
    Tokenizer tokenizer = new Tokenizer(input);

    // Based on the state machine @ http://json.org/

    tokenizer.consume("{"); // Needs to happen when the object starts.
    while (!tokenizer.tryConsume("}")) { // Continue till the object is done
        mergeField(tokenizer, extensionRegistry, builder);
    }
    // Test to make sure the tokenizer has reached the end of the stream.
    if (!tokenizer.atEnd()) {
        throw tokenizer.parseException("Expecting the end of the stream, but there seems to be more data!  Check the input for a valid JSON format.");
    }
}
JsonFormat.java 文件源码 项目:jigsaw-payment 阅读 43 收藏 0 点赞 0 评论 0
private void handleValue(Tokenizer tokenizer,
                                ExtensionRegistry extensionRegistry,
                                Message.Builder builder,
                                FieldDescriptor field,
                                ExtensionRegistry.ExtensionInfo extension,
                                boolean unknown) throws ParseException {

    Object value = null;
    if (field.getJavaType() == FieldDescriptor.JavaType.MESSAGE) {
        value = handleObject(tokenizer, extensionRegistry, builder, field, extension, unknown);
    } else {
        value = handlePrimitive(tokenizer, field);
    }
    if (value != null) {
        if (field.isRepeated()) {
            builder.addRepeatedField(field, value);
        } else {
            builder.setField(field, value);
        }
    }
}
ProtoCoder.java 文件源码 项目:beam 阅读 35 收藏 0 点赞 0 评论 0
/**
 * Returns a {@link ProtoCoder} like this one, but with the extensions from the given classes
 * registered.
 *
 * <p>Each of the extension host classes must be an class automatically generated by the
 * Protocol Buffers compiler, {@code protoc}, that contains messages.
 *
 * <p>Does not modify this object.
 */
public ProtoCoder<T> withExtensionsFrom(Iterable<Class<?>> moreExtensionHosts) {
  for (Class<?> extensionHost : moreExtensionHosts) {
    // Attempt to access the required method, to make sure it's present.
    try {
      Method registerAllExtensions =
          extensionHost.getDeclaredMethod("registerAllExtensions", ExtensionRegistry.class);
      checkArgument(
          Modifier.isStatic(registerAllExtensions.getModifiers()),
          "Method registerAllExtensions() must be static");
    } catch (NoSuchMethodException | SecurityException e) {
      throw new IllegalArgumentException(
          String.format("Unable to register extensions for %s", extensionHost.getCanonicalName()),
          e);
    }
  }

  return new ProtoCoder<>(
      protoMessageClass,
      new ImmutableSet.Builder<Class<?>>()
          .addAll(extensionHostClasses)
          .addAll(moreExtensionHosts)
          .build());
}
ProtoCoder.java 文件源码 项目:beam 阅读 22 收藏 0 点赞 0 评论 0
/**
 * Returns the {@link ExtensionRegistry} listing all known Protocol Buffers extension messages
 * to {@code T} registered with this {@link ProtoCoder}.
 */
public ExtensionRegistry getExtensionRegistry() {
  if (memoizedExtensionRegistry == null) {
    ExtensionRegistry registry = ExtensionRegistry.newInstance();
    for (Class<?> extensionHost : extensionHostClasses) {
      try {
        extensionHost
            .getDeclaredMethod("registerAllExtensions", ExtensionRegistry.class)
            .invoke(null, registry);
      } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
        throw new IllegalStateException(e);
      }
    }
    memoizedExtensionRegistry = registry.getUnmodifiable();
  }
  return memoizedExtensionRegistry;
}
ProtobufUtil.java 文件源码 项目:beam 阅读 29 收藏 0 点赞 0 评论 0
/**
 * Recursively checks whether the specified class uses any Protocol Buffers fields that cannot
 * be deterministically encoded.
 *
 * @throws NonDeterministicException if the object cannot be encoded deterministically.
 */
static void verifyDeterministic(ProtoCoder<?> coder) throws NonDeterministicException {
  Class<? extends Message> message = coder.getMessageType();
  ExtensionRegistry registry = coder.getExtensionRegistry();
  Set<Descriptor> descriptors = getRecursiveDescriptorsForClass(message, registry);
  for (Descriptor d : descriptors) {
    for (FieldDescriptor fd : d.getFields()) {
      // If there is a transitively reachable Protocol Buffers map field, then this object cannot
      // be encoded deterministically.
      if (fd.isMapField()) {
        String reason =
            String.format(
                "Protocol Buffers message %s transitively includes Map field %s (from file %s)."
                    + " Maps cannot be deterministically encoded.",
                message.getName(),
                fd.getFullName(),
                fd.getFile().getFullName());
        throw new NonDeterministicException(coder, reason);
      }
    }
  }
}
Main.java 文件源码 项目:protoc-gen-as3 阅读 27 收藏 0 点赞 0 评论 0
public static void main(String[] args) throws IOException {
    ExtensionRegistry registry = ExtensionRegistry.newInstance();
    Options.registerAllExtensions(registry);
    PluginProtos.CodeGeneratorRequest request = PluginProtos.CodeGeneratorRequest.
            parseFrom(System.in, registry);
    PluginProtos.CodeGeneratorResponse response;
    try {
        Scope<Object> root = buildScopeTree(request);
        PluginProtos.CodeGeneratorResponse.Builder responseBuilder =
                PluginProtos.CodeGeneratorResponse.newBuilder();
        writeFiles(root, responseBuilder);
        response = responseBuilder.build();
    } catch (Exception e) {
        // 出错,报告给 protoc ,然后退出
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        e.printStackTrace(pw);
        pw.flush();
        PluginProtos.CodeGeneratorResponse.newBuilder().setError(sw.toString()).
                build().writeTo(System.out);
        System.out.flush();
        return;
    }
    response.writeTo(System.out);
    System.out.flush();
}
Xbuf.java 文件源码 项目:jme3_xbuf 阅读 25 收藏 0 点赞 0 评论 0
/**
 * A full constructor that allow to define every service (to injection).
 * @param assetManager the AssetManager used to load assets (texture, sound,...)
 * @param registry the protobuf registry for extensions
 * @param loader4Materials the xbuf way to load materials (null == use default implementation)
 * @param loader4Relations the xbuf way to load relations (null == use default implementation)
 */
public Xbuf(AssetManager assetManager, ExtensionRegistry registry, MaterialsMerger loader4Materials, RelationsMerger loader4Relations){
    loader4Materials = (loader4Materials != null) ?loader4Materials : new MaterialsMerger(assetManager);
    loader4Relations = (loader4Relations != null) ?loader4Relations : new RelationsMerger(loader4Materials);
    mergers=new LinkedList<Merger>();
    mergers.add(new NodesMerger());
    mergers.add(new MeshesMerger(loader4Materials));
    mergers.add(loader4Materials);
    mergers.add(new LightsMerger());
    mergers.add(new SkeletonsMerger());
    mergers.add(new AnimationsMerger());
    mergers.add(new CustomParamsMerger());
    mergers.add(new PhysicsMerger());

    // relations should be the last because it reuse data provide by other (put in components)
    mergers.add(loader4Relations);

    this.registry=registry!=null?registry:ExtensionRegistry.newInstance();
    setupExtensionRegistry(this.registry);
}
SpatialPartition.java 文件源码 项目:HIndex 阅读 31 收藏 0 点赞 0 评论 0
public static ValuePartition parseFrom(final byte[] bytes) throws DeserializationException {
  ValuePartitionProtos.ValuePartition valuePartition = null;
  try {
    ExtensionRegistry registry = ExtensionRegistry.newInstance();
    registry
        .add(org.apache.hadoop.hbase.index.protobuf.generated.ValuePartitionProtos.SpatialPartition.offset);
    registry
        .add(org.apache.hadoop.hbase.index.protobuf.generated.ValuePartitionProtos.SpatialPartition.length);
    valuePartition =
        ValuePartitionProtos.ValuePartition.newBuilder().mergeFrom(bytes, registry).build();
  } catch (InvalidProtocolBufferException e) {
    throw new DeserializationException(e);
  }
  return new SpatialPartition(
      valuePartition
          .getExtension(org.apache.hadoop.hbase.index.protobuf.generated.ValuePartitionProtos.SpatialPartition.offset),
      valuePartition
          .getExtension(org.apache.hadoop.hbase.index.protobuf.generated.ValuePartitionProtos.SpatialPartition.length));
}
SeparatorPartition.java 文件源码 项目:HIndex 阅读 25 收藏 0 点赞 0 评论 0
public static ValuePartition parseFrom(final byte[] bytes) throws DeserializationException {
  ValuePartitionProtos.ValuePartition valuePartition;
  try {
    ExtensionRegistry registry = ExtensionRegistry.newInstance();
    registry
        .add(org.apache.hadoop.hbase.index.protobuf.generated.ValuePartitionProtos.SeparatorPartition.separator);
    registry
        .add(org.apache.hadoop.hbase.index.protobuf.generated.ValuePartitionProtos.SeparatorPartition.position);
    valuePartition = ValuePartitionProtos.ValuePartition.parseFrom(bytes, registry);
  } catch (InvalidProtocolBufferException e) {
    throw new DeserializationException(e);
  }
  return new SeparatorPartition(
      valuePartition
          .getExtension(
            org.apache.hadoop.hbase.index.protobuf.generated.ValuePartitionProtos.SeparatorPartition.separator)
          .toByteArray(),
      valuePartition
          .getExtension(org.apache.hadoop.hbase.index.protobuf.generated.ValuePartitionProtos.SeparatorPartition.position));
}
ProtobufDataParser.java 文件源码 项目:datacollector 阅读 26 收藏 0 点赞 0 评论 0
public ProtobufDataParser(
    ProtoConfigurableEntity.Context context,
    String messageId,
    Descriptors.Descriptor descriptor,
    Map<String, Set<Descriptors.FieldDescriptor>> messageTypeToExtensionMap,
    ExtensionRegistry extensionRegistry,
    InputStream inputStream,
    String readerOffset,
    int maxObjectLength,
    boolean isDelimited
) throws IOException, Descriptors.DescriptorValidationException, DataParserException {
  this.context = context;
  this.inputStream = new OverrunInputStream(inputStream, maxObjectLength, true);
  this.messageId = messageId;
  this.messageTypeToExtensionMap = messageTypeToExtensionMap;
  this.extensionRegistry = extensionRegistry;
  this.descriptor = descriptor;
  this.builder = DynamicMessage.newBuilder(descriptor);
  this.isDelimited = isDelimited;

  // skip to the required location
  if (readerOffset != null && !readerOffset.isEmpty() && !readerOffset.equals("0")) {
    int offset = Integer.parseInt(readerOffset);
    this.inputStream.skip(offset);
  }
}
ProtobufDataParserFactory.java 文件源码 项目:datacollector 阅读 41 收藏 0 点赞 0 评论 0
public ProtobufDataParserFactory(Settings settings) throws StageException {
  super(settings);
  this.protoDescriptorFile = settings.getConfig(ProtobufConstants.PROTO_DESCRIPTOR_FILE_KEY);
  this.messageType = settings.getConfig(ProtobufConstants.MESSAGE_TYPE_KEY);
  this.isDelimited = settings.getConfig(ProtobufConstants.DELIMITED_KEY);
  messageTypeToExtensionMap = new HashMap<>();
  defaultValueMap = new HashMap<>();
  // Get the descriptor for the expected message type
  descriptor = ProtobufTypeUtil.getDescriptor(
    settings.getContext(),
    protoDescriptorFile,
    messageType,
    messageTypeToExtensionMap,
    defaultValueMap
  );

  // Build the extension registry based on the cached extension map
  extensionRegistry = ExtensionRegistry.newInstance();
  for(Map.Entry<String, Set<Descriptors.FieldDescriptor>> e : messageTypeToExtensionMap.entrySet()) {
    Set<Descriptors.FieldDescriptor> value = e.getValue();
    for (Descriptors.FieldDescriptor f : value) {
      extensionRegistry.add(f);
    }
  }
}
MessageInputStream.java 文件源码 项目:protobuf-utils 阅读 32 收藏 0 点赞 0 评论 0
public static <T extends GeneratedMessage> MessageInputStream<T> createBinaryStream(final InputStream is, String msgType) throws IOException {
    final Registry reg = Registry.getInstance();
    final ExtensionRegistry extReg = reg.getExtensionRegistry();
    final GeneratedMessage msg = reg.getInstanceForType(msgType);

    if (msg == null) {
        throw new RuntimeException("Type " + msgType + " not found.");
    }

    final Parser parser = msg.getParserForType();
    return new MessageInputStream<T>() {

        {
            next = readNext();
        }

        @Override
        protected T readNext()  throws IOException {
            if (is.available() > 0) {
                return (T) parser.parseDelimitedFrom(is, extReg);
            }
            return null;
        }
    };
}
CompareWithOriginalsTest.java 文件源码 项目:protobuf-el 阅读 38 收藏 0 点赞 0 评论 0
private void assertReserializationInvariant(final FileDescriptor fileWithUnknownFieldsProto,
    final ExtensionRegistry registry) throws InvalidProtocolBufferException {
  final FileDescriptorProto expectedProtoWithUnknownFields = fileWithUnknownFieldsProto.toProto();

  final FileDescriptorProto actualProtoWithExtensions =
      FileDescriptorProto.parseFrom(expectedProtoWithUnknownFields.toByteString(), registry);
  final FileDescriptorProto actualProtoWithUnknownFields =
      FileDescriptorProto.parseFrom(actualProtoWithExtensions.toByteString());

  softly
      .assertThat(actualProtoWithUnknownFields.toString())
      .as("check reserialization invariant textual equality for %s",
          fileWithUnknownFieldsProto.getName())
      .isEqualTo(expectedProtoWithUnknownFields.toString());

  softly.assertThat(actualProtoWithUnknownFields)
      .as("check reserialization invariant for %s", fileWithUnknownFieldsProto.getName())
      .isEqualTo(expectedProtoWithUnknownFields);
}
PipeconfHelper.java 文件源码 项目:onos 阅读 24 收藏 0 点赞 0 评论 0
/**
 * Extracts and returns a P4Info protobuf message from the given pipeconf. If the pipeconf does not define any
 * extension of type {@link PiPipeconf.ExtensionType#P4_INFO_TEXT}, returns null;
 *
 * @param pipeconf pipeconf
 * @return P4Info or null
 */
static P4Info getP4Info(PiPipeconf pipeconf) {
    return P4INFOS.computeIfAbsent(pipeconf.id(), piPipeconfId -> {
        if (!pipeconf.extension(P4_INFO_TEXT).isPresent()) {
            log.warn("Missing P4Info extension in pipeconf {}", pipeconf.id());
            return null;
        }

        InputStream p4InfoStream = pipeconf.extension(P4_INFO_TEXT).get();
        P4Info.Builder p4iInfoBuilder = P4Info.newBuilder();
        try {
            TextFormat.getParser().merge(new InputStreamReader(p4InfoStream), ExtensionRegistry.getEmptyRegistry(),
                                         p4iInfoBuilder);
        } catch (IOException ex) {
            log.warn("Unable to parse P4Info of pipeconf {}: {}", pipeconf.id(), ex.getMessage());
            return null;
        }

        return p4iInfoBuilder.build();
    });
}
ProtoConverterFactoryTest.java 文件源码 项目:GitHub 阅读 34 收藏 0 点赞 0 评论 0
@Before public void setUp() {
  Retrofit retrofit = new Retrofit.Builder()
      .baseUrl(server.url("/"))
      .addConverterFactory(ProtoConverterFactory.create())
      .build();
  service = retrofit.create(Service.class);

  ExtensionRegistry registry = ExtensionRegistry.newInstance();
  PhoneProtos.registerAllExtensions(registry);
  Retrofit retrofitWithRegistry = new Retrofit.Builder()
      .baseUrl(server.url("/"))
      .addConverterFactory(ProtoConverterFactory.createWithRegistry(registry))
      .build();
  serviceWithRegistry = retrofitWithRegistry.create(ServiceWithRegistry.class);
}
ProtoConverterFactoryTest.java 文件源码 项目:GitHub 阅读 34 收藏 0 点赞 0 评论 0
@Before public void setUp() {
  Retrofit retrofit = new Retrofit.Builder()
      .baseUrl(server.url("/"))
      .addConverterFactory(ProtoConverterFactory.create())
      .build();
  service = retrofit.create(Service.class);

  ExtensionRegistry registry = ExtensionRegistry.newInstance();
  PhoneProtos.registerAllExtensions(registry);
  Retrofit retrofitWithRegistry = new Retrofit.Builder()
      .baseUrl(server.url("/"))
      .addConverterFactory(ProtoConverterFactory.createWithRegistry(registry))
      .build();
  serviceWithRegistry = retrofitWithRegistry.create(ServiceWithRegistry.class);
}
AbstractCharBasedFormatter.java 文件源码 项目:jigsaw-payment 阅读 34 收藏 0 点赞 0 评论 0
/**
   * Parse a text-format message from {@code input} and merge the contents into {@code builder}.
   * Extensions will be recognized if they are registered in {@code extensionRegistry}.
   */
  public void merge(Readable input,
        ExtensionRegistry extensionRegistry,
        Message.Builder builder) throws IOException {
      // Read the entire input to a String then parse that.

      // If StreamTokenizer were not quite so crippled, or if there were a kind
      // of Reader that could read in chunks that match some particular regex,
      // or if we wanted to write a custom Reader to tokenize our stream, then
      // we would not have to read to one big String. Alas, none of these is
      // the case. Oh well.

merge(TextUtils.toStringBuilder(input), extensionRegistry, builder);
  }
XmlJavaxFormat.java 文件源码 项目:jigsaw-payment 阅读 31 收藏 0 点赞 0 评论 0
/**
 * Parse a text-format message from {@code input} and merge the contents into {@code builder}.
 * Extensions will be recognized if they are registered in {@code extensionRegistry}.
 * @throws IOException 
 */
public void merge(InputStream input, Charset cs,
        ExtensionRegistry extensionRegistry, Message.Builder builder) throws IOException {

    XMLEventReader parser;
    try {
        parser = xmlInputFactory.createXMLEventReader(input);
        merge(parser, extensionRegistry, builder);
    } catch (XMLStreamException e) {
        throw new IOException(e);
    }
}
XmlJavaxFormat.java 文件源码 项目:jigsaw-payment 阅读 29 收藏 0 点赞 0 评论 0
/**
 * Parse a text-format message from {@code input} and merge the contents into {@code builder}.
 * Extensions will be recognized if they are registered in {@code extensionRegistry}.
 * @throws IOException 
 */
public void merge(XMLEventReader parser, 
        ExtensionRegistry extensionRegistry,
        Message.Builder builder) throws IOException {

    try {
        XMLEvent messageElement = parser.nextTag();

        if (messageElement.isStartElement()) {
            final String messageName = messageElement.asStartElement().getName().getLocalPart();
            assert builder.getDescriptorForType().getName().equals(messageName);

            while (parser.hasNext() && !parser.peek().isEndDocument()) {
                XMLEvent event = parser.nextTag();

                if (event.isStartElement()) {
                    mergeField(parser, 
                            event, 
                            extensionRegistry, builder);
                    XMLEvent endElement = parser.nextTag();
                    assert endElement.isEndElement();
                } else if (event.isEndElement()) {
                    //parser.nextTag().isEndDocument()
                    break;
                } else {
                    throw new RuntimeException("Expecting the end of the stream, but there seems to be more data!  Check the input for a valid XML format.");
                }
            }
        }
    } catch (XMLStreamException e) {
        throw new IOException(e);
    }
}
XmlJavaxFormat.java 文件源码 项目:jigsaw-payment 阅读 42 收藏 0 点赞 0 评论 0
private void handleMissingField(String fieldName, XMLEventReader parser,
        XMLEvent event, ExtensionRegistry extensionRegistry, 
        UnknownFieldSet.Builder builder) throws XMLStreamException {

    // skip over the unknown fields, since we can't map them by id, then this message must not know about them.
    // We 'could' map them into the UnknownFieldSet, however none of the other formatters support this..
    // but in the future it would probably be useful for the case: Message A (v2) -> Message B (v1) -> Xml -> Message A (v2) 
    // this would require extra meta data in the xml to know the type of the unknown-field.


    if (event.isStartElement()) {
        /**
         * This loop will eat up everything inside "6"
         * So when this method is called, fieldName = 6, and event is set at index="11"
         * <unknown-field index="6">
         *      <unknown-field index="11">566667</unknown-field>
         *      <unknown-field index="15">
         *          <unknown-field index="16">566667</unknown-field>
         *      </unknown-field>
         * </unknown-field>
         */
        int depth = 1; // we start 1 level down, the value of "6"
        while (parser.hasNext()) {
            XMLEvent nextEvent = parser.nextEvent();
            if (nextEvent.isEndElement()) {
                depth--;
                if (depth <= 0 && parser.peek().isEndElement()) {
                    break;
                }
            } else if (nextEvent.isStartElement()) {
                depth++;
            }
        }
    } else if (event.isCharacters()) {
        // done, let it slide.
    }
}
XmlJavaxFormat.java 文件源码 项目:jigsaw-payment 阅读 26 收藏 0 点赞 0 评论 0
private Message.Builder createSubBuilder(Message.Builder builder,
        FieldDescriptor field, 
        ExtensionRegistry.ExtensionInfo extension) {

    Message.Builder subBuilder;
    if (extension == null) {
        subBuilder = builder.newBuilderForField(field);
    } else {
        subBuilder = extension.defaultInstance.newBuilderForType();
    }
    return subBuilder;
}
XmlJavaxFormat.java 文件源码 项目:jigsaw-payment 阅读 28 收藏 0 点赞 0 评论 0
private Object handleObject(XMLEventReader parser,
        XMLEvent startEvent,
        ExtensionRegistry extensionRegistry, 
        Message.Builder builder,
        FieldDescriptor field, 
        ExtensionRegistry.ExtensionInfo extension) throws XMLStreamException {

    Message.Builder subBuilder = createSubBuilder(builder, field, extension);

    XMLEvent event = startEvent;
    int depth = 0; // initialize to 0
    do {
        if (event.isStartElement()) {
            depth++; // we're inside the element
            mergeField(parser, event, 
                    extensionRegistry, subBuilder);
            XMLEvent nextEvent = parser.nextTag();

            if (nextEvent.isEndElement()) {
                depth--;
                // if we're back under the top level obj, and there is another close, we're done.
                if (depth <= 0 && parser.peek().isEndElement()) {
                    break;
                }
            } else if (nextEvent.isStartElement()) {
                depth++;
            }
        } else {
            // something is potentially wrong..
            break;
        }
    } while (parser.hasNext() && (event = parser.nextTag()) != null);

    return subBuilder.build();
}
CouchDBFormat.java 文件源码 项目:jigsaw-payment 阅读 34 收藏 0 点赞 0 评论 0
/**
 * Parse a text-format message from {@code input} and merge the contents into {@code builder}.
 * Extensions will be recognized if they are registered in {@code extensionRegistry}.
 */
public void merge(CharSequence input,
                         ExtensionRegistry extensionRegistry,
                         Message.Builder builder) throws ParseException {
    Tokenizer tokenizer = new Tokenizer(input);

    // Based on the state machine @ http://json.org/

    tokenizer.consume("{"); // Needs to happen when the object starts.
    while (!tokenizer.tryConsume("}")) { // Continue till the object is done
        mergeField(tokenizer, extensionRegistry, builder);
    }
}
XmlFormat.java 文件源码 项目:jigsaw-payment 阅读 33 收藏 0 点赞 0 评论 0
/**
 * Parse a text-format message from {@code input} and merge the contents into {@code builder}.
 * Extensions will be recognized if they are registered in {@code extensionRegistry}.
 */
public void merge(CharSequence input,
                         ExtensionRegistry extensionRegistry,
                         Message.Builder builder) throws ParseException {
    Tokenizer tokenizer = new Tokenizer(input);

    // Need to first consume the outer object name element
    consumeOpeningElement(tokenizer);

    while (!tokenizer.tryConsume("</")) { // Continue till the object is done
        mergeField(tokenizer, extensionRegistry, builder);
    }

    consumeClosingElement(tokenizer);
}
XmlFormat.java 文件源码 项目:jigsaw-payment 阅读 33 收藏 0 点赞 0 评论 0
private Object handleValue(Tokenizer tokenizer,
                                ExtensionRegistry extensionRegistry,
                                Message.Builder builder,
                                FieldDescriptor field,
                                ExtensionRegistry.ExtensionInfo extension) throws ParseException {

    Object value = null;
    if (field.getJavaType() == FieldDescriptor.JavaType.MESSAGE) {
        value = handleObject(tokenizer, extensionRegistry, builder, field, extension);
    } else {
        value = handlePrimitive(tokenizer, field);
    }

    return value;
}
XmlFormat.java 文件源码 项目:jigsaw-payment 阅读 35 收藏 0 点赞 0 评论 0
private Object handleObject(Tokenizer tokenizer,
                                   ExtensionRegistry extensionRegistry,
                                   Message.Builder builder,
                                   FieldDescriptor field,
                                   ExtensionRegistry.ExtensionInfo extension) throws ParseException {

    Object value;
    Message.Builder subBuilder;
    if (extension == null) {
        subBuilder = builder.newBuilderForField(field);
    } else {
        subBuilder = extension.defaultInstance.newBuilderForType();
    }

    //tokenizer.consume("<");
    String endToken = "</";

    while (!tokenizer.tryConsume(endToken)) {
        if (tokenizer.atEnd()) {
            throw tokenizer.parseException("Expected \"" + endToken + "\".");
        }
        mergeField(tokenizer, extensionRegistry, subBuilder);
    }

    value = subBuilder.build();
    return value;
}
JavaPropsFormat.java 文件源码 项目:jigsaw-payment 阅读 31 收藏 0 点赞 0 评论 0
/**
 * Parse a text-format message from {@code input} and merge the contents
 * into {@code builder}.  Extensions will be recognized if they are
 * registered in {@code extensionRegistry}.
 */
public void merge(final CharSequence input,
                         final ExtensionRegistry extensionRegistry,
                         final Message.Builder builder)
                         throws ParseException {
  final Tokenizer tokenizer = new Tokenizer(input);
  final Map<String, Message> subMessages = new HashMap<String, Message>();

  while (!tokenizer.atEnd()) {
    mergeField(tokenizer, extensionRegistry, subMessages, builder);
  }
}


问题


面经


文章

微信
公众号

扫码关注公众号