gpt4 book ai didi

java - 用于 TomEE 7 上的 bean 验证的自定义异常映射?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:49:58 25 4
gpt4 key购买 nike

上下文

我们使用 javax.ws.rs.ext.ExceptionMapper<Exception>注释为 @javax.ws.rs.ext.Provider处理所有异常。在内部这个 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也被发现,现在作为首选 ExceptionMapper对于 javax.validation.ConstraintViolationException .我们自己的ExceptionMapper不会运行,因此客户端无法获得有关验证期间出现问题的信息。

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

我已经尝试过的

“复制”专门的ExceptionMapper

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

还是org.apache.cxf.jaxrs.validation.ValidationExceptionMapper优先。

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

禁用ValidationExceptionMapper通过system.properties

changelogTomEE 7.0.0-SNAPSHOT我注意到了

TOMEE-1336 Support classname.activated = true/false for auto discovered providers

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

这仍然没有效果。

问题

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

最佳答案

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

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

没有优先级 afaik,因为使用了异常层次结构。

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

关于java - 用于 TomEE 7 上的 bean 验证的自定义异常映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33760035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com