2012-02-06 87 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