java - 是否可以通过编程方式控制 set-jaxb-validation-event-handler?

标签 java web-services cxf jax-ws jboss7.x

在 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/

相关文章:

java - 如何从不同的枚举元素创建数组

java - JPA 在创建 JoinTable 语句之前关闭连接

java - 如何获取 Kubernetes 中 POD 中的特定应用程序(在多个正在运行的应用程序中)提供的特定请求?

.net - 如何修复 Visual Studio 生成的用于处理锯齿状数组的 Web 引用代理?

java - Apache CXF geronimo-servlet_3.0_spec-1.0.jar - 未加载具有 Tomcat servlet jar 的 jar

java - 使用JAVA递归的二叉树查找节点方法

java - Unmarshal 在具有 List<T> 字段的泛型上生成空字段

c# - 如何让 WCF 服务运行在 SSL 上?

jms - 如何为 CXF 重新发布失败的 QPid 消息进行 JMS 传输?或者,我是否缺少更好的解决方案?

cxf - 在 CXF 代理客户端上设置超时