我使用这样的弹簧配置来添加CustomHandler。它工作正常。根据{{3}} - 每个代理调用一次customHandlerResolver 。
这就是问题所在。我需要为每个SOAP请求添加一个动态安全令牌头,因为处理程序只被调用一次,我的令牌在一定时间后到期,我无法设置刷新令牌。
<bean id="myServicePort" class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean">
<property name="serviceInterface" value="org.my.myService" />
<property name="wsdlDocumentUrl" value="classpath:wsdl/mysoap.wsdl" />
<property name="namespaceUri" value="http://services.mycom.org" />
<property name="serviceName" value="OrderService" />
<property name="endpointAddress" ref="OrderEndPoint" />
<property name="handlerResolver" ref="customHandlerResolver"/>
</bean>
答案 0 :(得分:0)
您是否尝试过使用bean范围原型。
<bean id="myServicePort" class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean" scope="prototype">
<property name="serviceInterface" value="org.my.myService" />
<property name="wsdlDocumentUrl" value="classpath:wsdl/mysoap.wsdl" />
<property name="namespaceUri" value="http://services.mycom.org" />
<property name="serviceName" value="OrderService" />
<property name="endpointAddress" ref="OrderEndPoint" />
<property name="handlerResolver" ref="customHandlerResolver"/>
答案 1 :(得分:0)
正如我所说,HandlerResolver只被调用一次,无论bean的范围是什么。我使用了CXF - org.apache.cxf.jaxws.JaxWsProxyFactoryBean,因为我可以更好地控制bean的创建,不像上面的Spring代理,Spring自己创建了代理。
<bean id="proxyFactory"
class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
<property name="serviceClass" value="org.my.myService"/>
<property name="address" value="http://localhost:9002/HelloWorld"/>
</bean>
在我的客户端代码中
//Set a handler
proxyFactory.setHandlers( Arrays.asList((Handler) new TokenHandler(Token)));
OrderService orderServicePort= (myService) proxyFactory.create();
//Call service method, as SOAP message has desired dynamic header
orderServicePort.getXXX()
这完全可行,并且比我的初始配置
更简洁