You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@thrift.apache.org by "mhyang@jhinno.com" <mh...@jhinno.com> on 2014/02/11 10:57:59 UTC

Error Read an invalid frame size of 0. Are you using TFramedTransport on the client side?

Hi all,
I write two thrift server A and B, A is C++ and B is JAVA and I use TFramedTransport and TCompactProtocol in both server and client, the java server B will proxy some C++ server A interface, If call the java server directly ,the error message not occured.But when java client call the B and in B will create a another client to call server A, the error message will occur when B return the data

2014-01-27 14:22:11,567 ERROR org.apache.thrift.server.AbstractNonblockingServer$FrameBuffer.read(AbstractNonblockingServer.java:348) - Read an invalid frame size of 0. Are you using TFramedTransport on the client side? 
The method executeCmd is the interface of B, when the "return result" is execute , the error message will occur.
@Override
public CmdResult executeCmd(String cmd, List<String> params,
Map<String,String> envs, String execuser) throws InvokeException {
CmdResult result = new CmdResult();
if(StringUtils.isEmpty(cmd)){
throw new InvokeException(0, "Command is null.");
}
if(params == null){
params = new ArrayList<String>();
}
try{
ExecproxyClient client = (ExecproxyClient)ctx.getBean("execproxyClient");
TCmdRequest cmdReq = new TCmdRequest();
cmdReq.setAppName(cmd);
cmdReq.setArguments(params);
cmdReq.setEnvs(envs);
cmdReq.setExecUser(execuser);
TCmdResponse cmdRes = client.execute(cmdReq);
result.setExitCode(cmdRes.getExitCode());
result.setStderr(cmdRes.getStdError());
result.setStdout(cmdRes.getStdOutput());
}catch(Exception e){
InvokeException ie = new InvokeException();
ie.setExpCause("Execproxy : " + e.getMessage());
throw ie;
}
return result;
}




mhyang@jhinno.com