[英]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.