2014-11-20 127 views
0

我正試圖把一個肥皂服務的小型CXF客戶端,其wsdl中有SignedSupportingTokens ws-security策略。我已配置CXF客戶端如下SignedSupportingTokens wssecurity策略cxf客戶端

<jaxws:client id="secretService" name="{http:/mySecretServiceEndpoint//}Service" createdFromAPI="true"> 
     <jaxws:properties> 
      <entry key="ws-security.signature.properties" value="keystore/secret.properties" /> 
      <entry key="ws-security.encryption.properties" value="keystore/secret.properties" /> 
      <entry key="ws-security.timestamp.timeToLive" value="600" /> 
     </jaxws:properties> 
    </jaxws:client> 

不幸的是,它不能發出具有以下錯誤的消息。

Caused by: org.apache.cxf.ws.policy.PolicyException: None of the policy alternatives can be satisfied. 
    at org.apache.cxf.ws.policy.EffectivePolicyImpl.chooseAlternative(EffectivePolicyImpl.java:199) 
    at org.apache.cxf.ws.policy.EffectivePolicyImpl.chooseAlternative(EffectivePolicyImpl.java:192) 
    at org.apache.cxf.ws.policy.EffectivePolicyImpl.initialise(EffectivePolicyImpl.java:96) 
    at org.apache.cxf.ws.policy.PolicyEngineImpl.getEffectiveClientRequestPolicy(PolicyEngineImpl.java:205) 
    at org.apache.cxf.ws.policy.PolicyOutInterceptor.handle(PolicyOutInterceptor.java:98) 
    at org.apache.cxf.ws.policy.AbstractPolicyInterceptor.handleMessage(AbstractPolicyInterceptor.java:44) 
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307) 
    at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:514) 
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:423) 
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:326) 
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:279) 
    at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96) 
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:138) 

我想知道CXF默認支持SignedSupportingTokens策略嗎?我需要註冊一些處理程序還是缺少其他的東西?我對WS-SecurityWS-SecurityPolicy沒有太多的經驗,任何迴應將不勝感激。

+0

感謝Leonel的編輯,現在看起來好多了。 – andrew 2014-11-20 23:29:00

回答

1

回答我自己的問題,因爲它可能有助於某一天! CXF確實支持SignedSupportingTokens以及更多,就我而言,服務WSDL對於SignedSupportingToken具有不同的名稱空間,CXF客戶端的Dint理解(無法匹配)。

我能夠通過使用ws-security攔截器來配置客戶端來解決此問題。