[
https://issues.apache.org/jira/browse/THRIFT-2582?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14039955#comment-14039955
]
Jens Geyer commented on THRIFT-2582:
------------------------------------
{quote}
Anyone any idea what that is intended for?
{quote}
According to the [docs in the
wiki|http://people.apache.org/~jfarrell/thrift/0.7.0/javadoc/org/apache/thrift/transport/TFileTransport.html],
the Java and C++ TFileTransport is actually a TFramedFileTransport.
In contrast, the Python TFileObjectTransport used is just a simple wrapper.
> "FileTransport error" exception is raised when trying to use Java's
> TFileTransport
> -----------------------------------------------------------------------------------
>
> Key: THRIFT-2582
> URL: https://issues.apache.org/jira/browse/THRIFT-2582
> Project: Thrift
> Issue Type: Bug
> Components: Java - Library
> Affects Versions: 0.9.1
> Reporter: Ahmed Ali-Eldin
>
> I am trying to wrap a Java class to be called from Python using thrift's
> TFileTransport. I tried using two protocols TJSON and TBinary but I keep
> getting an exception
> {code}
> org.apache.thrift.transport.TTransportException: FileTransport error: bad
> event size
> at
> org.apache.thrift.transport.TFileTransport.readEvent(TFileTransport.java:327)
> at
> org.apache.thrift.transport.TFileTransport.read(TFileTransport.java:468)
> at
> org.apache.thrift.transport.TFileTransport.readAll(TFileTransport.java:439)
> at
> org.apache.thrift.protocol.TJSONProtocol$LookaheadReader.read(TJSONProtocol.java:263)
> at
> org.apache.thrift.protocol.TJSONProtocol.readJSONSyntaxChar(TJSONProtocol.java:320)
> at
> org.apache.thrift.protocol.TJSONProtocol.readJSONArrayStart(TJSONProtocol.java:784)
> at
> org.apache.thrift.protocol.TJSONProtocol.readMessageBegin(TJSONProtocol.java:795)
> at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:27)
> at
> org.apache.thrift.transport.TFileProcessor.processUntil(TFileProcessor.java:69)
> at
> org.apache.thrift.transport.TFileProcessor.processChunk(TFileProcessor.java:102)
> at
> org.apache.thrift.transport.TFileProcessor.processChunk(TFileProcessor.java:111)
> at
> org.apache.thrift.transport.TFileProcessor.processChunk(TFileProcessor.java:118)
> at
> com.netflix.suro.client.SendToPyServer.startThriftServer(SendToPyServer.java:51)
> at com.netflix.suro.client.SendToPyServer.main(SendToPyServer.java:67)
> {code}
> This is how my Python client looks:
> {code}
> def __init__(self):
> self.outFile=open("../../ThriftFile.in","a")
> self.transport = TTransport.TFileObjectTransport(self.outFile)
> self.protocol = TJSONProtocol.TJSONProtocol(self.transport)
> self.client = sendPyInterface.Client(self.protocol)
> self.transport.open()
>
> def send(self,routingKey, message):
> self.client.send_send(routingKey, message)
>
> def configClient(self,configurationDict):
> self.client.send_ClientConfig(configurationDict)
>
> if __name__ == "__main__":
> SuroClient=SuroPyClient()
>
> configurationDict={"ClientConfig.LB_TYPE":"static","ClientConfig.LB_SERVER":"localhost:7101"}
> SuroClient.configClient(configurationDict)
> SuroClient.send("routingKey", "testMessage")
> {code}
> and this is my server (or rather one version I have tried):
> {code}
> public static void startThriftServer(SendPyInterface.Processor processor) {
> try {
> File input = new
> File("src/main/java/com/netflix/suro/client/ThriftFile.in");
> if(!input.exists()){
> input.createNewFile();
> }
> File output = new
> File("src/main/java/com/netflix/suro/client/ThriftFile.out");
> if(!output.exists()){
> output.createNewFile();
> }
>
> TFileTransport inputFileTransport = new
> TFileTransport(input.getAbsolutePath(), true);
> TFileTransport outputFileTransport = new
> TFileTransport(output.getAbsolutePath(), false);
> inputFileTransport.open();
> outputFileTransport.open();
>
>
> inputFileTransport.setTailPolicy(tailPolicy.WAIT_FOREVER);
> TFileProcessor fProcessor =
> new TFileProcessor(processor,
> new TJSONProtocol.Factory(), inputFileTransport, outputFileTransport);
> try {
> fProcessor.processChunk();
> } catch (TTransportException e) {
> e.printStackTrace();
> }
>
> System.out.println("File Thrift service started
> ...");
> } catch (Exception e) {
> e.printStackTrace();
> }
> {code}
> I have been able to read the JSON file using Python, but not Java. JensG
> suggested on StackOverFlow that this is a bug.
--
This message was sent by Atlassian JIRA
(v6.2#6252)