在 CXF SOAP Web 服务中,我使用以下注释来禁用 xsd 验证:
@EndpointProperties({
@EndpointProperty(key = "set-jaxb-validation-event-handler", value = "false")
})
我希望在运行时控制验证(根据从数据库检索的设置的值启用/禁用它)。我的问题是:是否可以在运行时禁用/启用此处理程序?也许通过编写自定义事件处理程序并且根本不使用此属性?
Thanks.
Edit:一个选项是不禁用验证set-jaxb-validation-handler
,而是子类验证事件处理程序 http://docs.oracle.com/javaee/6/api/javax/xml/bind/ValidationEventHandler.html。正如所解释的here http://blog.bdoughan.com/2010/12/jaxb-and-marshalunmarshal-schema.html,然后我会检查数据库设置handleEvent
并根据其值返回。
但这种方法仍然有一些缺点:首先,这个Web服务是用注释配置的,我似乎找不到一种方法来应用ValidationEventHandler
带注释(同样的问题:使用注释时如何在 JAXB 解组器上设置自定义 ValidationEventHandler https://stackoverflow.com/questions/23751249/how-to-set-custom-validationeventhandler-on-jaxb-unmarshaller-when-using-annotat).
其次,这意味着即使我不需要验证也会执行;然后我将失去任何性能优势。
事实上它并不完全适合我的需求,所以我仍然愿意接受任何建议。
对的,这是可能的。
MyService service = new MyService();
MyServiceInterface port = service.getMyServicePort();
BindingProvider bindingProvider = (BindingProvider) port;
bindingProvider.getRequestContext().put(
"set-jaxb-validation-event-handler", Boolean.FALSE);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)