Ошибка реализации Thrift API - PullRequest
3 голосов
/ 16 ноября 2010

Я реализую инфраструктуру вызовов Thrift Remote Процедура в Java. Я настроил бережливость и сгенерировал свой скелетный код без особых проблем, но теперь, когда я на самом деле использую методы API, я получаю странные ошибки.

Вот ошибки, которые я получаю:

Exception in thread "main" org.apache.thrift.transport.TTransportException: Cannot write to null outputStream
at org.apache.thrift.transport.TIOStreamTransport.write(TIOStreamTransport.java:142)
at org.apache.thrift.protocol.TBinaryProtocol.writeI32(TBinaryProtocol.java:163)
at org.apache.thrift.protocol.TBinaryProtocol.writeMessageBegin(TBinaryProtocol.java:91)
at SimonSays$Client.send_registerClient(SimonSays.java:102)
at SimonSays$Client.registerClient(SimonSays.java:96)
at simon.main(testClass.java:16)

Я не думаю, что я не делаю никаких ошибок, но просто чтобы убедиться, вот код, который приводит к ошибкам:

TProtocol prot = new TBinaryProtocol(new TSocket("http://thriftpuzzle.facebook.com",9030));
    SimonSays.Client client = new SimonSays.Client(prot);

    client.registerClient("userEmailAddress@gmail.com");

Ошибка, как говорят, сгенерирована из вызова client.registerClient(), но это вызов кода, сгенерированного Thrift, что заставляет меня чувствовать, что я что-то не так делаю при настройке самого соединения.

Часть о создании TProtocol экземпляра, которую я включил в себя, и, вероятно, именно в этом проблема.

Я надеялся, что у кого-то будет больше представления о том, что происходит не так, как я.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация или разъяснения.

Редактировать: я нашел TProtocol оператор создания экземпляра из Cassandra Wiki

1 Ответ

2 голосов
/ 16 ноября 2010

Вам необходимо вызвать метод open() в экземпляре TSocket, чтобы он мог подключиться и получить необходимые ему потоки ввода / вывода.

Источник: TSocket.java

...