Apache Thrift:抛出方法中执行的代码抛出的异常

时间:2013-02-22 17:02:02

标签: java thrift

我正在研究Thrift服务器,它基本上只是斯坦福分析器的一个包装器(虽然这不太重要)。有时斯坦福分析器会根据给出的输入抛出有用的异常;例如,如果输入太长(根据解析器),生成输入的用户应该收到此异常,以便他们决定如何处理它。但是,我似乎无法让Thrift通过此异常,而只返回

Internal error processing <name of Thrift method being called>

给客户。

我在该方法中有以下代码:

try
{
    // a whole bunch of Stanford Parser stuff
}
catch (Exception e)
{
    throw new TApplicationException(TApplicationException.INTERNAL_ERROR, e.getMessage());
}

并且该方法会抛出TApplicationException,但不会将e.getMessage()的任何内容发送到客户端。我怎样才能让斯坦福分析师抛出的异常被Thrift抛给客户?

1 个答案:

答案 0 :(得分:0)

我担心你必须定义自己的异常,而不是使用TException或它的任何子类。

那是因为Thrift框架像这样包装你的代码(ProcessFunction.java):

try {
  result = getResult(iface, args);
} catch(TException tex) {
  LOGGER.error("Internal error processing " + getMethodName(), tex);
  TApplicationException x = new TApplicationException(TApplicationException.INTERNAL_ERROR, 
    "Internal error processing " + getMethodName());
  oprot.writeMessageBegin(new TMessage(getMethodName(), TMessageType.EXCEPTION, seqid));
  x.write(oprot);
  oprot.writeMessageEnd();
  oprot.getTransport().flush();
  return;
}

因此,无论您在TException中提供什么消息,都将被忽略并替换为Thrift框架。

相关问题