【发布时间】:2015-04-16 10:03:35
【问题描述】:
在 CXF SOAP 网络服务中,我使用以下注释来禁用 xsd 验证:
@EndpointProperties({
@EndpointProperty(key = "set-jaxb-validation-event-handler", value = "false")
})
我希望在运行时控制验证(根据从数据库中检索到的设置值启用/禁用它)。我的问题是:是否可以在运行时禁用/启用此处理程序?也许通过编写自定义事件处理程序而不使用此属性?
谢谢。
编辑:一个选项是不禁用set-jaxb-validation-handler 的验证,而是使用ValidationEventHandler 的子类。正如here 解释的那样,我将检查handleEvent 中的数据库设置并根据其值返回。
但是这种方法仍然有一些缺点:首先,这个 web 服务配置了注释,我似乎无法找到一种方法来应用带有注释的ValidationEventHandler(同样的问题:How to set custom ValidationEventHandler on JAXB unmarshaller when using annotations) .
其次,这意味着即使我不需要它也会执行验证;然后我将失去任何性能优势。
它实际上并不完全适合我的需要,所以我仍然愿意接受任何建议。
【问题讨论】:
-
结合 Spring 的
PropertyPlaceHolderConfigurer和禁用 spring 配置文件的模式验证是可行的。能够在运行时禁用它有什么意义?您是否打算将验证从一个请求切换到下一个请求? -
我没有在这个应用程序中使用 Spring,所以它不是一个选项。不,验证不会从一个请求切换到下一个请求,但我希望它是可控的,无需更改代码或重新启动服务器。最简单的方法似乎是将设置保存在数据库中。
标签: java web-services cxf jax-ws jboss7.x