[英]Exception type hierarchy in thrift / java
有没有一种方法可以将类型层次结构信息添加到Java的节俭异常类型中。
我想定义一些常见的例外集,人们可以重用。 客户经常要处理一组异常,而不是处理单个异常。 例如,假设一个Java客户端想要捕获所有错误请求并打印异常消息。 客户端不想处理个别异常,例如TooBigParamException,MissingParamException等,而只是想捕获这些异常的父级:BadRequestException。 有没有办法更改TooBigParamException,MissingParamException等生成的代码以添加扩展关系?
我尝试了Facebook swift(Java-> Thrift转换),但是它似乎无法与Apache thrift无缝兼容。
在当前状态下,Apache Thrift不支持继承,既不支持struct
/ union
也不支持exception
。 我的猜测是,这是因为存在一些语言,因为继承并不是语言的真正组成部分,因此实现起来过于复杂。
这使我想到的一个解决办法是把异常转换为结构,只有一个例外,节俭和union
异常的数据转换成一个。 客户端捕获“常见”异常并重新引发该程序包中的异常。
struct OverflowError {
1: double operator1
2: double operator2
3: string operation
}
struct DivByZeroError {
1: double numerator
}
union AllTheErrors {
1: OverflowError over
2: DivByZeroError div0
// more to come
}
exception MathError {
1: AllTheErrors theError
}
service ExceptionalCalculator {
double Add(1: double arg1, 2: double arg2) throws (1: MathError mex)
double Subtract(1: double arg1, 2: double arg2) throws (1: MathError mex)
double Divide(1: double arg1, 2: double arg2) throws (1: MathError mex)
double PriceOfDowJonesNextThursday() throws (1: MathError mex)
}
涉及很多工作,但可以解决。
上面有关于protobuf的相关讨论 ,这可能也会有所帮助。
我找到了一个不错的解决方案。 尽管我不会说那没有任何技巧。
当我开始时,只有两个选择:
通过结合上面的2,我能够解决这些问题。我首先编写了Java异常,然后使用swift生成了IDL。 然后从idl生成另一个版本的Java异常。 我使用modelmapper在原始Java类型和生成的Java类型之间进行转换。 我的服务核心使用异常的第一个版本和服务-Thrift层,使用modelmapper将其转换为其Thrift版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.