0

我正在使用这样的弹簧配置来添加 CustomHandler。它工作正常。根据 文档- 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>
4

2 回答 2

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"/>

于 2013-10-26T11:08:39.323 回答
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()

这工作得很好,比我最初的 spring 配置更简洁

于 2013-10-29T17:11:40.747 回答