无法捕获Spark Java中的路由错误?

无法捕获Spark Java中的路由错误?,java,exception-handling,spark-java,Java,Exception Handling,Spark Java,类Spark上有一个静态异常路径,但它只接受从异常扩展而来的内容。如果发生了一个可丢弃但不扩展异常的错误,则在将500返回到客户端之前,似乎无法在Spark API中捕获该错误以记录或处理它 无法映射到Spark.exception的常见可丢弃类型示例:java.lang.ExceptionInInitializeError 有没有办法在Spark中找到这些错误,在它们消失到客户端之前,不将每个路由的功能包装在一个try/catch(Throwable)中?您无法在Spark中捕获Throwab

类Spark上有一个静态异常路径,但它只接受从异常扩展而来的内容。如果发生了一个可丢弃但不扩展异常的错误,则在将500返回到客户端之前,似乎无法在Spark API中捕获该错误以记录或处理它

无法映射到Spark.exception的常见可丢弃类型示例:java.lang.ExceptionInInitializeError


有没有办法在Spark中找到这些错误,在它们消失到客户端之前,不将每个路由的功能包装在一个try/catch(Throwable)中?

您无法在Spark中捕获
Throwable
错误

问题是,
Throwable
包括
Error
错误在编程上是不可恢复的,因此通常不会被捕获。 另一方面,
异常
是可编程恢复的,因此您可能希望捕获一些异常

我建议你读书


您应该问问自己,为什么要捕获可丢弃的
并可能修改该部分(如果是您的代码)。

大多数API框架,例如Jersey,都会为可丢弃的提供一个全面的挂钩点,因为不管它是可恢复的还是不可恢复的,一个错误即将流到您的客户端,您至少要在它发生之前记录它。正如Spark现在所指出的,如果抛出Java错误子类,那么在500发送到客户机之前,在每个端点方法中没有显式的try/catch块来记录它们是不可能的。我认为你的答案是正确的,但是-和我得出的结论一样-他们只是没有办法做到这一点。顺便说一句,如果你愿意在项目中使用方面,可以这样做,以确保记录任何逃离spark类的可丢弃内容。将某些内容返回给客户也可能是不可能的。如果发生
错误
,例如,您可能没有更多内存。在那一点上做事情是没有保证的。尽管尝试记录一些东西可能会很好。。