2017-04-12 70 views
0

在我的項目中,有必要以將來自application.properties文件,配置文件相關的值,到端點類的命名空間變量@PayloadRoot註釋。如何注入從application.properties一個值@PayloadRoot命名空間價值

問題:命名空間值必須是一個常量,並且在春天我不能將值注入最終變量。 我找到一個建議以這種方式注入:

@PayloadRoot(namespace = "${my.namespace}", localPart = "getMyRequest") 
@ResponsePayload 
public JAXBElement<MyResult> myMethod(@RequestPayload JAXBElement<MyInput> request) { 

,但...這是行不通的。 有沒有人有工作的解決方案?

謝謝...

回答

0

你可以做以下之一:

1)使用反射,一旦你有合適的值(但你必須確保你的端點映射之前設置的值發生):example here

2)擴展的類PayloadRootAnnotationMethodEndpointMapping和方法getLookupKeysForMethod,使用自定義的方法getQNameFromAnnotation在那裏你會注入命名空間的正確值。

private QName getQNameFromAnnotation(PayloadRoot payloadRoot) { 
    return new QName(/*INJECT YOURNAMESPACE HERE*/, payloadRoot.localPart()); 
} 
+0

嗨VirtualTroll, 感謝您的合格的答卷。 我的問題是,我有三個服務器(devel,test,prod)與我的web服務運行。每個不同的webservice都需要一個擁有單獨地址位置(指向正確的服務器)的wsdl。這是必不可少的事實。 wsdl文件中的命名空間在三個wsdl文件中可以是相同的。因此在PayloadRoot註釋中不需要與配置文件相關的命名空間值。 這解決了我的問題。但很高興知道,如果它必須依賴於配置文件,還有另一種解決方案。 – JMarky