3

我正在用 Java 实现 Thrift 远程过程调用框架。我设置了 thrift 并生成了我的骨架代码,没有很多问题,但是现在我实际上正在使用 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实例的部分包括我自己,很可能这就是问题所在。

我希望有人会对我做错了什么有更多的了解。

如果需要更多信息或澄清,请告诉我。

编辑:我从Cassandra WikiTProtocol中找到了实例化语句

4

1 回答 1

2

您需要在实例open()上调用该方法TSocket才能连接并获取所需的输入/输出流。

来源:TSocket.java

于 2010-11-16T00:27:53.100 回答