Java 是否可以通过编程方式控制设置jaxb验证事件处理程序?

Java 是否可以通过编程方式控制设置jaxb验证事件处理程序?,java,web-services,cxf,jax-ws,jboss7.x,Java,Web Services,Cxf,Jax Ws,Jboss7.x,在CXF SOAP Web服务中,我使用以下注释禁用xsd验证: @EndpointProperties({ @EndpointProperty(key = "set-jaxb-validation-event-handler", value = "false") }) 我希望在运行时控制验证(根据从数据库检索的设置值启用/禁用它)。我的问题是:是否可以在运行时禁用/启用此处理程序?可能通过编写自定义事件处理程序而根本不使用此属性 谢谢 编辑:一个选项不是使用设置jaxb验证处理程

在CXF SOAP Web服务中,我使用以下注释禁用xsd验证:

@EndpointProperties({ 
    @EndpointProperty(key = "set-jaxb-validation-event-handler", value = "false") 
})
我希望在运行时控制验证(根据从数据库检索的设置值启用/禁用它)。我的问题是:是否可以在运行时禁用/启用此处理程序?可能通过编写自定义事件处理程序而根本不使用此属性

谢谢

编辑:一个选项不是使用
设置jaxb验证处理程序来禁用验证,而是使用子类。如前所述,我将检查
handleEvent
中的数据库设置,并根据其值返回

但是这种方法仍然有一些缺点:首先,这个Web服务配置了注释,我似乎找不到一种方法来应用带有注释的
ValidationEventHandler
(问题与:)

第二,这意味着即使我不需要验证,也会执行验证;我将失去任何性能优势


事实上,它并不完全适合我的需要,所以我仍然愿意接受任何建议。

我终于找到了一个可行的解决方案

在JBoss EAP 6.0上运行CXF时,我将以下配置添加到standalone.xml中的webservices子系统中:

<subsystem xmlns="urn:jboss:domain:webservices:1.2">
    <!-- ... -->
    <endpoint-config name="myconfig">
        <property name="set-jaxb-validation-event-handler" value="false"/>
    </endpoint-config>
    <!-- ...-->
</subsystem>
这是相关的Maven依赖项:

    <dependency>
        <groupId>org.jboss.ws</groupId>
        <artifactId>jbossws-api</artifactId>
        <version>1.0.1.Final</version>
        <scope>provided</scope>
    </dependency>

org.jboss.ws
JBossWSAPI
1.0.1.最终版本
假如
如果要更改属性值,我们仍然需要重新启动服务器,但这不是什么坏事。

是的,这是可能的

MyService service = new MyService();
MyServiceInterface port = service.getMyServicePort();
BindingProvider bindingProvider = (BindingProvider) port;
bindingProvider.getRequestContext().put(
    "set-jaxb-validation-event-handler", Boolean.FALSE);

对于试图在总线级别配置的人员,以下内容对我很有用:

<cxf:bus id="soapClientCxfBus" bus="soapClientCxfBus" >
    <cxf:properties>
        <entry key="set-jaxb-validation-event-handler" value="false" />
    </cxf:properties>
</cxf:bus>


通过将Spring的
属性PlaceHolderConfigure
与禁用Spring配置文件的模式验证相结合,这是可行的。在运行时禁用它有什么意义?您是否计划将验证从一个请求切换到下一个请求?我在这个应用程序中没有使用Spring,因此它不是一个选项。不,验证不会从一个请求切换到下一个请求,但我希望它是可控的,无需更改代码或重新启动服务器。最简单的方法似乎是在数据库中保留一个设置。这确实适用于客户端,但我正在寻找一个服务器端解决方案。无论如何谢谢你!
<cxf:bus id="soapClientCxfBus" bus="soapClientCxfBus" >
    <cxf:properties>
        <entry key="set-jaxb-validation-event-handler" value="false" />
    </cxf:properties>
</cxf:bus>