efficiencyIsBliss
efficiencyIsBliss

Reputation: 3093

Error implementing the Thrift API

I'm implementing the Thrift Remote Procedure call framework in Java. I set up thrift and generated my skeleton code without a lot of issues, but now that I'm actually using the API methods, I get strange errors.

Here are the errors I get:

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)

I don't think I'm not making any mistakes, but just to make sure, here's the code that's leading to the errors:

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

    client.registerClient("[email protected]");

The error is said to be generated from the client.registerClient() call, but that is a call to the code generated by Thrift, which makes me feel that I'm doing something wrong in setting up the connection itself.

The part about making a TProtocol instance I included myself, and it's likely that that's where the problem lies.

I was hoping that someone would have more of an idea about what's going wrong that I do.

Please let me know if more information or clarification is needed.

Edit: I found the TProtocol instantiation statement from the Cassandra Wiki

Upvotes: 3

Views: 3485

Answers (1)

SimonJ
SimonJ

Reputation: 21306

You need to call the open() method on your TSocket instance in order for it to connect and obtain the input/output streams it needs.

Source: TSocket.java

Upvotes: 2

Related Questions