2016-04-22 109 views
5

我有几个从jax-rs Web服务调用的EJB。但是,每次我调用其中一个EJB方法时,我都会使用拦截器拦截该调用。这个拦截器检查API密钥的参数,如果它不存在或不存在于我的数据库中,它会抛出一个我希望在我的jax-rs代码中捕获的异常。然而,由于我的jax-rs类不知道这个异常被抛出的可能性,即使异常可能是一个检查异常,这里最好的做法是什么?声明抛出异常而不抛出它

  1. 声明我EJB抛出异常(而没有把他们自己)
  2. 使我异常的未经检查的异常,并检查反正它?
  3. 还有别的吗?

回答

1

我想通过抛出未经检查的异常是最好的。然后我使用异常映射器来捕获异常并处理它。

https://docs.oracle.com/javaee/6/api/javax/ws/rs/ext/ExceptionMapper.html

剩下的唯一的事情就是异常输出抑制到日志文件。

+1

请注意,如果您使用EJB引发未经检查的异常,则需要使用'@ ApplicationException',否则EJB容器将回滚该异常并将其转换为EJBException。 –

0

拦截器可以抛出一些RuntimeException(例如InvalidParametersException)。你可以创建特殊的servlet来处理所有的异常。为此,您应该在web.xml中创建特殊的mapping

+0

除了特殊的servlet还有其他的选择来处理异常吗?也许我可以把拦截器放到工作中去? – Terabyte