Uploaded image for project: 'Thrift'
  1. Thrift
  2. THRIFT-2582

"FileTransport error" exception is raised when trying to use Java's TFileTransport

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 0.9.1
    • 0.9.2
    • Java - Library
    • None

    Description

      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

          
      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)
      

      This is how my Python client looks:

          
       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")
      

      and this is my server (or rather one version I have tried):

          
      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();
      			}
      

      I have been able to read the JSON file using Python, but not Java. JensG suggested on StackOverFlow that this is a bug.

      Attachments

        Activity

          People

            Unassigned Unassigned
            ahmedaley Ahmed Ali-Eldin
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: