簡體   English   中英

是否可以通過編程方式控制set-jaxb-validation-event-handler?

[英]Is it possible to control set-jaxb-validation-event-handler programmatically?

在CXF SOAP Web服務中,我使用以下注釋來禁用xsd驗證:

@EndpointProperties({ 
    @EndpointProperty(key = "set-jaxb-validation-event-handler", value = "false") 
})

我希望在運行時控制驗證(根據從數據庫檢索的設置的值啟用/禁用它)。 我的問題是:是否可以在運行時禁用/啟用此處理程序? 也許通過編寫自定義事件處理程序而根本不使用此屬性?

謝謝。

編輯:一個選項不是使用set-jaxb-validation-handler禁用驗證,而是使用ValidationEventHandler子類。 正如解釋在這里 ,我會再檢查數據庫中設置handleEvent並根據其價值回歸。

但是這種方法仍有一些缺點:首先,這個web服務配置了注釋,我似乎無法找到一種方法來應用帶注釋的ValidationEventHandler (同樣的問題: 如何在JAXB unmarshaller上設置自定義ValidationEventHandler時使用注釋 )。

其次,這意味着即使我不需要驗證也會執行; 然后我將失去任何性能優勢。

它實際上並不完全符合我的需要,所以我仍然願意接受任何建議。

對的,這是可能的。

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

我終於找到了一個有效的解決方

當我在JBoss EAP 6.0上運行CXF時,我將以下配置添加到standalone.xml中的webservices subsytem:

<subsystem xmlns="urn:jboss:domain:webservices:1.2">
    <!-- ... -->
    <endpoint-config name="myconfig">
        <property name="set-jaxb-validation-event-handler" value="false"/>
    </endpoint-config>
    <!-- ...-->
</subsystem>

以及SEI實施的以下注釋:

@org.jboss.ws.api.annotation.EndpointConfig(configName = "myconfig")

這是相關的Maven依賴:

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

如果我們想要更改屬性值,我們仍然需要重新啟動服務器,但它是一個較小的邪惡。

對於試圖在總線級別配置它的人,以下對我有用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM