【问题标题】:Custom exception mapping for bean validation on TomEE 7?TomEE 7 上 bean 验证的自定义异常映射?
【发布时间】:2015-11-17 14:55:29
【问题描述】:

上下文

我们使用注释为@javax.ws.rs.ext.Providerjavax.ws.rs.ext.ExceptionMapper<Exception> 来处理所有异常。在内部,这个ExceptionMapper 区分不同类型的异常以确定要向客户显示哪些信息。

对于javax.validation.ConstraintViolationException,我们返回有关哪个字段无效以及原因的附加信息。

问题

我们刚刚从TomEE 1.7.2 JAX-RS 切换到TomEE 7.0.0-SNAPSHOT webprofile

对于TomEE 1.7.2 JAX-RS,我们使用了openejb.jaxrs.providers.auto=true 系统属性,我们的ExceptionMapper 被自动找到并使用了。

使用TomEE 7.0.0-SNAPSHOT webprofile,该属性不再需要从自动发现中受益。

但是,org.apache.cxf.jaxrs.validation.ValidationExceptionMapper 也被发现,现在充当javax.validation.ConstraintViolationException 的首选ExceptionMapper。我们自己的ExceptionMapper 无法运行,因此客户端无法获得有关验证期间出现问题的信息。

我们自己的ExceptionMapper<Exception> 仍然处理所有其他异常。

我已经尝试过的

“复制”专门的ExceptionMapper

我将自己的javax.ws.rs.ext.ExceptionMapper<javax.validation.ConstraintViolationException> 放在我的资源旁边,希望它优先于 CXF。

org.apache.cxf.jaxrs.validation.ValidationExceptionMapper 仍然优先。

更新:事实证明这确实有效。我不知道为什么我的初始测试不起作用。

通过system.properties禁用ValidationExceptionMapper

TomEE 7.0.0-SNAPSHOTchangelog 中我注意到了

TOMEE-1336 支持自动发现提供程序的 classname.activated = true/false

查看相应的changeset 我希望我可以通过添加禁用org.apache.cxf.jaxrs.validation.ValidationExceptionMapper org.apache.cxf.jaxrs.validation.ValidationExceptionMapper.activated=false 到我们的system.properties

这仍然无效。

问题

  • 这是 CXF 还是 TomEE 行为?
  • 我们如何配置ExceptionMapper 优先?

【问题讨论】:

    标签: java cxf bean-validation apache-tomee tomee-7


    【解决方案1】:

    现在需要一些时间,但认为规范需要它,但您可以通过设置 cxf.jaxrs.skip-provider-scanning=true 来禁用它。

    它完全禁用自动提供程序,包括已扫描的提供程序,但随后您可以在 openejb-jar.xml 中控制您想要的提供程序 - 恕我直言,这肯定是最好和更安全的解决方案,否则您会依赖很多您使用的库和容器设置。

    由于使用了异常层次结构,因此没有优先级。

    编辑:遗漏了一部分:您需要实现 ExceptionMapper{ValidationException} 否则 CXF 的优先级高于您自己的优先级(例外不太具体) 编辑 2:https://issues.apache.org/jira/browse/TOMEE-1656 用于激活的支持

    【讨论】:

    • 不错。你能链接到这个问题吗?
    猜你喜欢
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 2019-09-18
    • 1970-01-01
    相关资源
    最近更新 更多