Невозможно преодолеть «неверный тип провода» при использовании буферов протокола с данными GTFS - PullRequest
1 голос
/ 06 июля 2019

Я пытаюсь использовать данные GTFS Google, но получаю эту ошибку при попытке проанализировать загруженный поток из API GTFS

Это настройка:

вы можете открыть этот файл с помощью блокнота, он говорит, что это версия 2.0

Я запускаю загруженный исполняемый файл, который генерирует Java-пакет, который должен быть использован позже, предположив, что мой загруженный прото-файл выглядит следующим образом:

protoc-2.5.0-windows-x86_64.exe --proto_path=. --java_out=. gtfs.proto
  • Я запустил проект Java и включил пакет, сгенерированный предыдущим шагом, и ..

  • Я загрузил java-библиотеку protobuf версии 2.5 времени выполнения из репозитория Maven - здесь: https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java/2.5.0

  • Я включил эту библиотеку времени выполнения в свой проект

  • Я позвонил в REST (используя другую технологию), чтобы получить поток данных от транзитного провайдера, к которому я хочу подключиться. Я поместил этот поток в c: \ temp \ GTFSR.data, это то, что я буду использовать в качестве исходных данных.

Я создаю метод main (), предназначенный для открытия данных, и извлекаю записи транзитного обновления следующим образом:

import com.google.transit.realtime.GtfsRealtime.FeedEntity;
import com.google.transit.realtime.GtfsRealtime.FeedMessage;
import java.io.File;
import java.io.FileInputStream;

public class GtfsRealtimeExample {

public static void main(String[] args) throws Exception {

  File file = new File("c:/temp/GTFSR.data"); 
  FeedMessage feed = FeedMessage.parseFrom(new FileInputStream(file));

  for (FeedEntity entity : feed.getEntityList()) {
       if (entity.hasTripUpdate()) {
          System.out.println(entity.getTripUpdate());
       }
   }
  }
}

Однако, когда я запускаю это, я получаю ошибку:

Exception in thread "main" com.google.protobuf.InvalidProtocolBufferException: Protocol message tag had invalid wire type.
    at com.google.protobuf.InvalidProtocolBufferException.invalidWireType(InvalidProtocolBufferException.java:99)
    at com.google.protobuf.UnknownFieldSet$Builder.mergeFieldFrom(UnknownFieldSet.java:498)
    at com.google.protobuf.AbstractMessage$Builder.mergeFieldFrom(AbstractMessage.java:508)
    at com.google.protobuf.GeneratedMessage$ExtendableMessage.parseUnknownField(GeneratedMessage.java:661)
    at com.google.transit.realtime.GtfsRealtime$FeedHeader.<init>(GtfsRealtime.java:1234)
    at com.google.transit.realtime.GtfsRealtime$FeedHeader.<init>(GtfsRealtime.java:1217)
    at com.google.transit.realtime.GtfsRealtime$FeedHeader$1.parsePartialFrom(GtfsRealtime.java:1291)
    at com.google.transit.realtime.GtfsRealtime$FeedHeader$1.parsePartialFrom(GtfsRealtime.java:1)
    at com.google.protobuf.CodedInputStream.readMessage(CodedInputStream.java:309)
    at com.google.transit.realtime.GtfsRealtime$FeedMessage.<init>(GtfsRealtime.java:154)
    at com.google.transit.realtime.GtfsRealtime$FeedMessage.<init>(GtfsRealtime.java:126)
    at com.google.transit.realtime.GtfsRealtime$FeedMessage$1.parsePartialFrom(GtfsRealtime.java:203)
    at com.google.transit.realtime.GtfsRealtime$FeedMessage$1.parsePartialFrom(GtfsRealtime.java:1)
    at com.google.protobuf.AbstractParser.parsePartialFrom(AbstractParser.java:200)
    at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:217)
    at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:223)
    at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:49)
    at com.google.transit.realtime.GtfsRealtime$FeedMessage.parseFrom(GtfsRealtime.java:400)
    at GtfsRealtimeExample.main(GtfsRealtimeExample.java:20)

Я пробовал это с последними выпусками protoc (версия 3) и соответствующей версией 3 библиотеки времени выполнения, но получаю тот же результат.

Что я делаю не так? !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...