在 CXF SOAP Web 服务中,我使用以下注释来禁用 xsd 验证:
@EndpointProperties({
@EndpointProperty(key = "set-jaxb-validation-event-handler", value = "false")
})
我希望在运行时控制验证(根据从数据库检索的设置的值启用/禁用它)。我的问题是:是否可以在运行时禁用/启用此处理程序?也许通过编写自定义事件处理程序而不使用此属性?
谢谢。
编辑:一个选项是不使用 set-jaxb-validation-handler
禁用验证,而是子类 ValidationEventHandler 。正如所解释的here ,然后我会检查 handleEvent
中的数据库设置并根据其值返回。
但是这种方法仍然有一些缺点:首先,这个网络服务是用注释配置的,我似乎找不到一种方法来应用带有注释的 ValidationEventHandler
(与: How to set custom ValidationEventHandler on JAXB unmarshaller when using annotations )。
其次,这意味着即使我不需要验证也会执行;然后我将失去任何性能优势。
它实际上并不完全满足我的需求,所以我仍然愿意接受任何建议。
最佳答案
是的,这是可能的。
MyService service = new MyService();
MyServiceInterface port = service.getMyServicePort();
BindingProvider bindingProvider = (BindingProvider) port;
bindingProvider.getRequestContext().put(
"set-jaxb-validation-event-handler", Boolean.FALSE);
关于java - 是否可以通过编程方式控制 set-jaxb-validation-event-handler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29671437/