Hi,

I am trying to do UsernameToken using ws-policy. But getting exception "No
username available". I don't know if I am missing something.

part of my wsdl is

<wsdl:service name="HelloWorldImplService">
                <wsdl:port binding="tns:HelloWorldImplServiceSoapBinding"
                        name="HelloWorldImplPort">
                        <wsp:PolicyReference
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy";
                                URI="#username_plain" />
                        <soap:address 
location="http://localhost:8080/cxf5/HelloWorld"; />
                </wsdl:port>
</wsdl:service>
<wsp:Policy wsu:Id="username_plain"
xmlns:wsp="http://www.w3.org/ns/ws-policy";
        
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd";>
                <sp:SupportingTokens>
                        <wsp:Policy>
                                <sp:UsernameToken
                                
sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient";>
                                        <wsp:Policy>
                                                <sp:WssUsernameToken10 />
                                        </wsp:Policy>
                                </sp:UsernameToken>
                        </wsp:Policy>
                </sp:SupportingTokens>
</wsp:Policy>


my client configuration file is 

<beans xmlns="http://www.springframework.org/schema/beans";
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xmlns:jaxws="http://cxf.apache.org/jaxws";
        xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd";>

        <bean id="logInBound"
class="org.apache.cxf.interceptor.LoggingInInterceptor" />
        <bean id="logOutBound"
class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
        <bean id="clientCallback"
class="com.test.cxf_client1.ClientPasswordCallback"/>

        <jaxws:client id="helloClient" serviceClass="com.test.cxf5.HelloWorld"
                address="http://localhost:8080/cxf5/HelloWorld";>
                <jaxws:properties>
                        <entry key="ws-security.username" value="testuser" />
                        <entry key="ws-security.username" value="password" />
                        <entry key="ws-security.callback-handler"
value="com.test.cxf_client1.ClientPasswordCallback" />
                </jaxws:properties>
                
                <jaxws:inInterceptors><ref bean="logInBound" 
/></jaxws:inInterceptors>
                <jaxws:outInterceptors> <ref 
bean="logOutBound"/></jaxws:outInterceptors>
                                
        </jaxws:client>

</beans>

my server configuration file is 

<beans xmlns="http://www.springframework.org/schema/beans";
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xmlns:jaxws="http://cxf.apache.org/jaxws";
        xmlns:wsa="http://cxf.apache.org/ws/addressing";
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
http://cxf.apache.org/ws/addressing
http://cxf.apache.org/schemas/ws-addr-conf.xsd";>

        <import resource="classpath:META-INF/cxf/cxf.xml" />
        <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
        


        <bean id="logInBound"
class="org.apache.cxf.interceptor.LoggingInInterceptor" />
        <bean id="logOutBound"
class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
        <bean id="serverCallback" class="com.test.cxf5.ServerPasswordCallback"/>

        <jaxws:endpoint id="helloWorld" 
implementor="com.test.cxf5.HelloWorldImpl"
                address="/HelloWorld">

                
                <jaxws:properties>
                        <entry key="ws-security.callback-handler" 
value-ref="serverCallback" />
                </jaxws:properties>
        </jaxws:endpoint>

</beans>


But when I execute client I get following error. Please note that apart from
all required dependencies for wss4j, cxf security I also have added
following dependency in both client and server

<dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-ws-policy</artifactId>
            <version>${cxf.version}</version>
</dependency>   



The exception is.

org.apache.cxf.ws.policy.PolicyException: No username available
        at
org.apache.cxf.ws.security.wss4j.UsernameTokenInterceptor.policyNotAsserted(UsernameTokenInterceptor.java:398)
        at
org.apache.cxf.ws.security.wss4j.UsernameTokenInterceptor.addUsernameToken(UsernameTokenInterceptor.java:341)
        at
org.apache.cxf.ws.security.wss4j.UsernameTokenInterceptor.addUsernameToken(UsernameTokenInterceptor.java:267)
        at
org.apache.cxf.ws.security.wss4j.UsernameTokenInterceptor.handleMessage(UsernameTokenInterceptor.java:112)
        at
org.apache.cxf.ws.security.wss4j.UsernameTokenInterceptor.handleMessage(UsernameTokenInterceptor.java:76)
        at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)
        at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:531)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:464)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:367)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:320)
        at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:89)
        at 
org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:134)
        at $Proxy25.sayHello(Unknown Source)
        at com.test.cxf_client1.Client.main(Client.java:55)

Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: No username
available
        at 
org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:156)
        at $Proxy25.sayHello(Unknown Source)
        at com.test.cxf_client1.Client.main(Client.java:55)
Caused by: org.apache.cxf.ws.policy.PolicyException: No username available
        at
org.apache.cxf.ws.security.wss4j.UsernameTokenInterceptor.policyNotAsserted(UsernameTokenInterceptor.java:398)
        at
org.apache.cxf.ws.security.wss4j.UsernameTokenInterceptor.addUsernameToken(UsernameTokenInterceptor.java:341)
        at
org.apache.cxf.ws.security.wss4j.UsernameTokenInterceptor.addUsernameToken(UsernameTokenInterceptor.java:267)
        at
org.apache.cxf.ws.security.wss4j.UsernameTokenInterceptor.handleMessage(UsernameTokenInterceptor.java:112)
        at
org.apache.cxf.ws.security.wss4j.UsernameTokenInterceptor.handleMessage(UsernameTokenInterceptor.java:76)
        at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)
        at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:531)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:464)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:367)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:320)
        at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:89)
        at 
org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:134)



--
View this message in context: 
http://cxf.547215.n5.nabble.com/org-apache-cxf-ws-policy-PolicyException-No-username-available-cxf-2-70-tp5721900.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to