我正在用 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
中找到了实例化语句