2016-09-08 30 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