2016-09-08 31 views
0

我有用於進行Web服務調用的spring集成出站網關。 我有一個截取soap請求並記錄到日誌文件的攔截器。現在我想傳遞一個參數給攔截器類的handleRequest方法,這樣我就可以將每個已記錄的soap請求關聯到數據庫中的一個id。將參數傳遞給Spring肥皂攔截器

我需要傳遞給攔截器的值id存儲在頭與名id 代碼看起來像下面。

<int-ws:outbound-gateway uri="${soap.url} interceptor="interceptor" > 
</int-ws:outbound-gateway> 

下面是攔截器。

public class Interceptor implements ClientInterceptor { 

@Override 
public boolean handleRequest(MessageContext messageContext) throws WebServiceClientException { 

//id below is parameter that needs to be passed. 

    LOGGER.info("soap request for "+id +" is " +messageContext.getRequest().getDocument().toString()); 

    return true; 
} 

}

我想設置一個屬性在bean定義接口。

<bean id="interceptor" class="com.services.Interceptor" > 
    <property name="id" value="#{headers['id']}" /> 
</bean> 

但這不起作用,因爲我無法以某種方式訪問​​標題。在服務器啓動時出現異常。即使我解決了這個異常,但由於對象是singleton,所以會出現問題。這裏還有其他的指針嗎?

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): Property or field 'headers' cannot be found on object of type 'org.spri 
ngframework.beans.factory.config.BeanExpressionContext' - maybe not public? 
     at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:224) 
     at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:94) 
     at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:81) 
     at org.springframework.expression.spel.ast.CompoundExpression.getValueRef(CompoundExpression.java:51) 
     at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:87) 
     at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:120) 
     at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:242) 

回答

0

查看我的回答your other question爲什麼你不能做你正在嘗試的。

要將參數傳遞給攔截器,可以使用ThreadLocal - 在網關上游添加服務來設置值,然後在攔截器中檢索/刪除它。

+0

好吧,我試過ThreadLocal,工作正常,謝謝你。我仍然希望使用更好的方法使用彈簧集成。任何指針? – ViratKohli