【问题标题】:Spring JAX-WS- using Custom HandlerResolver to add dynamic headerSpring JAX-WS- 使用自定义 HandlerResolver 添加动态标头
【发布时间】:2013-10-25 22:38:36
【问题描述】:

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

【问题讨论】:

    标签: java spring web-services soap jax-ws


    【解决方案1】:

    您是否尝试过使用 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"/>
    

    【讨论】:

    • 我试过了,但是 customHandleResolver 方法只被调用了一次。我什至将 customHandlerResolver 作为原型。仍然是相同的行为。
    【解决方案2】:

    正如我所说,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 配置更简洁

    【讨论】:

      猜你喜欢
      • 2011-01-20
      • 2011-03-11
      • 2010-10-24
      • 2018-07-25
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      • 2011-05-02
      • 1970-01-01
      相关资源
      最近更新 更多