2012-02-06 88 views
3

我使用CXF開發了Web服務。今天,我爲Web服務添加了簡單的用戶名令牌安全性。在此之後,當我嘗試部署Web服務我得到以下異常javax.xml.ws.WebServiceException:java.lang.RuntimeException:包含值不正確:null

javax.xml.ws.WebServiceException: java.lang.RuntimeException: Incorrect inclusion value: null 
Failed to build the policy 'UsernameToken':Incorrect inclusion value: null 

我使用JBoss 6。以下是我在wsdl文件中添加的策略片段。

<wsp:Policy wsu:Id="UsernameToken" 
     xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
     xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"> 
     <wsp:ExactlyOne> 
      <wsp:All> 
       <!-- Empty <TransportBinding/> element required due to bug in CXF 2.2.6 --> 
       <sp:TransportBinding /> 
       <sp:SupportingTokens> 
        <wsp:Policy> 
         <sp:UsernameToken sp:IncludeToken=".../IncludeToken/AlwaysToRecipient" /> 
        </wsp:Policy> 
       </sp:SupportingTokens> 
      </wsp:All> 
     </wsp:ExactlyOne> 
    </wsp:Policy> 

以下是我cxf.xml文件

<jaxws:endpoint id="UpcLineOfBusinessServiceImpl" 
     address="/upcLineOfBusinessService" wsdlLocation="../wsdl/upclineofbusinessserviceimpl.wsdl"> 
     <jaxws:implementor> 
      <ref bean="upcLineOfBusinessService"></ref> 
     </jaxws:implementor> 
     <jaxws:inInterceptors> 
      <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" /> 
      <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor"> 
       <constructor-arg> 
        <map> 
         <entry key="action" value="UsernameToken" /> 
         <entry key="passwordType" value="PasswordText" /> 
         <entry key="passwordCallbackClass" value="com.tecnotree.upc.security.PasswordCallBack" /> 
        </map> 
       </constructor-arg> 
      </bean> 
     </jaxws:inInterceptors> 
    </jaxws:endpoint> 

請幫助我。在此先感謝

+0

這是WS-Policy中定義的任何問題? – Dilip 2012-02-06 09:01:31

+0

如果答案正確或有幫助,爲什麼你不接受它?如果它沒有幫助你,你至少可以發表評論。這是適當的禮儀。 – 2014-04-03 22:45:05

回答

4

我最近遇到了相同的例外。問題是不正確的sp:IncludeToken值。在我將其更改爲http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient之後,一切正常。

可用值在org.apache.cxf.ws.security.policy.SP12Constants定義(對於WS-安全1.2)或在org.apache.cxf.ws.security.policy.SP11Constants(1.1)

完成策略定義看起來像這樣:

<wsp:Policy xmlns:wsp="http://www.w3.org/ns/ws-policy"> 
    <wsp:ExactlyOne>  
     <wsp:All> 
      <sp:SupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"> 
       <wsp:Policy> 
        <sp:UsernameToken 
         sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"> 
         <wsp:Policy> 
          <sp:WssUsernameToken10 /> 
          <sp:HashPassword /> 
         </wsp:Policy> 
        </sp:UsernameToken> 
       </wsp:Policy> 
      </sp:SupportingTokens> 
     </wsp:All> 
    </wsp:ExactlyOne> 
</wsp:Policy> 
+0

這也適用於我。它應該被接受爲答案。 – joergl 2012-09-13 14:02:58