It's a bug...either in CXF or WSS4J. It manifests when there is whitespace
between the SOAP Body tag and the first Element in the Body itself. For a
workaround, you can just use the DOM WSS4JInInterceptor instead.

Colm.

On Sat, Jan 14, 2017 at 9:20 AM, martijn.list <[email protected]>
wrote:

> Hi,
>
> I have CXF configured server side with spring and enabled UsernameToken
> authentication:
>
> <bean id="publicWebServicePasswordInterceptor"
>   class="org.apache.cxf.ws.security.wss4j.WSS4JStaxInInterceptor">
>   <constructor-arg>
>     <map>
>      <entry key="action" value="UsernameToken" />
>      <entry key="passwordType" value="PasswordText" />
>      <entry key="passwordCallbackRef">
>        <ref bean="publicWebServicePasswordHandler"/>
>      </entry>
>    </map>
>  </constructor-arg>
> </bean>
>
> <jaxws:inInterceptors>
>    <ref bean="publicWebServicePasswordInterceptor"/>
> </jaxws:inInterceptors>
>
> This works when the SOAP client is created with CXF. However when I use
> SoapUI to test the web service I always get the following error in the
> SOAP server:
>
> "Security processing failed (actions mismatch)"
>
> With some debugging I noticed that the "incomingSecurityEventList" is
> empty when
>
> From StaxActionInInterceptor:
>
> public void handleMessage(SoapMessage soapMessage)
> {
> [SNIP]
> ...
> List<SecurityEvent> incomingSecurityEventList =
> (List)soapMessage.get(SecurityEvent.class.getName() + ".in");
> ...
>
> This is why a few lines later a SoapFault exception is thrown because
> the incomingSecurityEventList should not be empty.
>
> If I use the CXF SOAP client (which works), the
> incomingSecurityEventList contains the following object:
>
> org.apache.wss4j.stax.securityEvent.UsernameTokenSecurityEvent
>
> It might be that the SOAP call from SoapUI is incorrect or that
> something is missing but I have not figured out why this is not working.
>
> I hope someone can tell me what's not correct with the SOAP call from
> SoapUI:
>
> SOAP call from SoapUI (from tcpdump):
>
> POST /usersws HTTP/1.1
>
> Content-Type: text/xml;charset=UTF-8
>
> SOAPAction: ""
>
> Content-Length: 829
>
> Host: 127.0.0.1:9009
>
> Connection: Keep-Alive
>
> User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
>
>
>
> <soapenv:Envelope
> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
> xmlns:ws="http://ws.djigzo.application.mitm/";>
>    <soapenv:Header><wsse:Security soapenv:mustUnderstand="1"
> xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-
> 200401-wss-wssecurity-secext-1.0.xsd"
> xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-
> 200401-wss-wssecurity-utility-1.0.xsd"><wsse:UsernameToken
> wsu:Id="UsernameToken-A74ECD7A71C7695F3D148438453965
> 395"><wsse:Username>admin</wsse:Username><wsse:Password
> Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-
> wss-username-token-profile-1.0#PasswordText">password</
> wsse:Password></wsse:UsernameToken></wsse:Security></soapenv:Header>
>    <soapenv:Body>
>       <ws:isUser>
>          <!--Optional:-->
>          <email>?</email>
>       </ws:isUser>
>    </soapenv:Body>
> </soapenv:Envelope>
>
> I have tested it with CXF 3.0.9 and with 3.0.12
>
> Any idea why this is not working?
>
> Kind regards,
>
> Martijn Brinkers
>



-- 
Colm O hEigeartaigh

Talend Community Coder
http://coders.talend.com

Reply via email to