Hi Christian,

We have the doc here [1] about the ws-security configuration.

And I spoke too fast, missing SAAJInInterceptor isn't the reason, I rechecked 
the code, now WSS4JInInterceptor can pull in SAAJInInterceptor automatically.
Most likely it's a camel-cxf specific issue

[1]http://cxf.apache.org/docs/ws-security.html
-------------
Freeman(Yue) Fang

Red Hat, Inc. 
FuseSource is now part of Red Hat
Web: http://fusesource.com | http://www.redhat.com/
Twitter: freemanfang
Blog: http://freemanfang.blogspot.com
http://blog.sina.com.cn/u/1473905042
weibo: @Freeman小屋

On 2013-1-10, at 下午3:12, Christian Müller wrote:

> Is this documented somewhere?
> 
> Best,
> Christian
> Am 10.01.2013 06:14 schrieb "Freeman Fang" <freeman.f...@gmail.com>:
> 
>> Hi Charles,
>> 
>> Please also add org.apache.cxf.binding.soap.saaj.SAAJInInterceptor
>> for <cxf:inInterceptors>
>> -------------
>> Freeman(Yue) Fang
>> 
>> Red Hat, Inc.
>> FuseSource is now part of Red Hat
>> Web: http://fusesource.com | http://www.redhat.com/
>> Twitter: freemanfang
>> Blog: http://freemanfang.blogspot.com
>> http://blog.sina.com.cn/u/1473905042
>> weibo: @Freeman小屋
>> 
>> On 2013-1-10, at 上午3:30, Charles Moulliard wrote:
>> 
>>> Hi,
>>> 
>>> When I try to authenticate an HTTP request using WS-Security with
>> camel-cxf
>>> & wss4j interceptor, I get the following error :
>>> 
>>> qtp370155726-26 DEBUG
>> [org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor]
>>> - WSS4JInInterceptor: enter handleMessage()
>>> qtp370155726-26 WARN
>> [org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor]
>>> - Security processing failed (actions mismatch)
>>> qtp370155726-26 WARN
>> [org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor]
>>> -
>>> org.apache.ws.security.WSSecurityException: An error was discovered
>>> processing the <wsse:Security> header
>>> at
>>> 
>> org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.checkActions(WSS4JInInterceptor.java:383)
>>> at
>>> 
>> org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.handleMessage(WSS4JInInterceptor.java:333)
>>> at
>>> 
>> org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.handleMessage(WSS4JInInterceptor.java:97)
>>> at
>>> 
>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262)
>>> at
>>> 
>> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
>>> at
>>> 
>> org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequest(JettyHTTPDestination.java:348)
>>> at
>>> 
>> org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:312)
>>> at
>>> 
>> org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:72)
>>> at
>>> 
>> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:943)
>>> at
>>> 
>> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:879)
>>> at
>>> 
>> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
>>> at
>>> 
>> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250)
>>> at
>>> 
>> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)
>>> at org.eclipse.jetty.server.Server.handle(Server.java:349)
>>> at
>>> 
>> org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:441)
>>> at
>>> 
>> org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:936)
>>> at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:801)
>>> at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:224)
>>> at
>>> 
>> org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:51)
>>> at
>>> 
>> org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:586)
>>> at
>>> 
>> org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:44)
>>> at
>>> 
>> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598)
>>> at
>>> 
>> org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533)
>>> at java.lang.Thread.run(Thread.java:722)
>>> qtp370155726-26 WARN [org.apache.cxf.phase.PhaseInterceptorChain] -
>>> Interceptor for {http://training.fusesource.com/}CustomerServiceServicehas
>>> thrown exception, unwinding now
>>> org.apache.cxf.binding.soap.SoapFault: An error was discovered processing
>>> the <wsse:Security> header
>>> at
>>> 
>> org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.createSoapFault(WSS4JInInterceptor.java:804)
>>> at
>>> 
>> org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.handleMessage(WSS4JInInterceptor.java:357)
>>> at
>>> 
>> org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.handleMessage(WSS4JInInterceptor.java:97)
>>> at
>>> 
>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262)
>>> at
>>> 
>> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
>>> at
>>> 
>> org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequest(JettyHTTPDestination.java:348)
>>> at
>>> 
>> org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:312)
>>> at
>>> 
>> org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:72)
>>> at
>>> 
>> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:943)
>>> at
>>> 
>> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:879)
>>> at
>>> 
>> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
>>> at
>>> 
>> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250)
>>> at
>>> 
>> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)
>>> at org.eclipse.jetty.server.Server.handle(Server.java:349)
>>> at
>>> 
>> org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:441)
>>> at
>>> 
>> org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:936)
>>> at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:801)
>>> at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:224)
>>> at
>>> 
>> org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:51)
>>> at
>>> 
>> org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:586)
>>> at
>>> 
>> org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:44)
>>> at
>>> 
>> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598)
>>> at
>>> 
>> org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533)
>>> at java.lang.Thread.run(Thread.java:722)
>>> Caused by: org.apache.ws.security.WSSecurityException: An error was
>>> discovered processing the <wsse:Security> header
>>> at
>>> 
>> org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.checkActions(WSS4JInInterceptor.java:383)
>>> at
>>> 
>> org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.handleMessage(WSS4JInInterceptor.java:333)
>>> ... 22 more
>>> 
>>> even if SOAPEnvelopper message received by CXF contains SOAP Security
>> Header
>>> 
>>> ID: 1
>>> Address: http://127.0.0.1:9090/training/WebService
>>> Encoding: UTF-8
>>> Http-Method: POST
>>> Content-Type: text/xml;charset=UTF-8
>>> Headers: {accept-encoding=[gzip,deflate], connection=[keep-alive],
>>> Content-Length=[1590], content-type=[text/xml;charset=UTF-8], Host=[
>>> 127.0.0.1:9090], SOAPAction=["
>> http://training.fusesource.com/saveCustomer";],
>>> User-Agent=[Apache-HttpClient/4.1.1 (java 1.5)]}
>>> Payload: <soapenv:Envelope xmlns:soapenv="
>>> http://schemas.xmlsoap.org/soap/envelope/"; xmlns:tra="
>>> http://training.fusesource.com/";>
>>>  <soapenv:Header>
>>>          <wsse:Security xmlns:wsse="
>>> 
>> http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd
>>> "
>>>               soap:mustUnderstand="1">
>>> <wsse:UsernameToken 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
>> "
>>> wsu:Id="UsernameToken-1">
>>> <wsse:Username>charles</wsse:Username>
>>> <wsse:Password Type="
>>> 
>> http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest
>>> ">TVzWGxNvhlixNVWol8poD9DHxl8=</wsse:Password>
>>> <wsse:Nonce EncodingType="
>>> 
>> http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary
>>> ">WsMNSm/C4dzdPS3OhUi94Q==</wsse:Nonce>
>>> <wsu:Created>2013-01-09T15:46:14.908Z</wsu:Created>
>>> </wsse:UsernameToken>
>>> </wsse:Security>
>>>  </soapenv:Header>
>>>  <soapenv:Body>
>>>     <tra:saveCustomer>
>>>        <customer>
>>>           <!--Optional:-->
>>>           <name>?</name>
>>>           <!--Zero or more repetitions:-->
>>>           <address>?</address>
>>>           <numOrders>?</numOrders>
>>>           <revenue>?</revenue>
>>>           <!--Optional:-->
>>>           <test>?</test>
>>>           <!--Optional:-->
>>>           <birthDate>?</birthDate>
>>>           <!--Optional:-->
>>>           <type>?</type>
>>>        </customer>
>>>     </tra:saveCustomer>
>>>  </soapenv:Body>
>>> </soapenv:Envelope>
>>> --------------------------------------
>>> 
>>> CXF & Camel config
>>> 
>>>   <cxf:cxfEndpoint id="WS"
>>>                    address="http://localhost:9090/training/WebService";
>>> 
>> serviceClass="com.fusesource.training.CustomerService">
>>>       <cxf:outInterceptors>
>>>           <ref bean="loggingOutInterceptor"/>
>>>        </cxf:outInterceptors>
>>>       <cxf:inInterceptors>
>>>           <ref bean="loggingInInterceptor"/>
>>>           <ref bean="wss4jInInterceptor"/>
>>>       </cxf:inInterceptors>
>>>   </cxf:cxfEndpoint>
>>> 
>>>   <bean id="loggingOutInterceptor"
>>> class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
>>>   <bean id="loggingInInterceptor"
>>> class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
>>> 
>>>   <bean id="wss4jInInterceptor"
>>> class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
>>>       <constructor-arg>
>>>           <map>
>>>               <entry key="action" value="UsernameToken"/>
>>>               <entry key="passwordType" value="PasswordDigest"/>
>>>               <entry key="passwordCallbackClass"
>>> value="com.fusesource.training.camel.UTPasswordCallback"/>
>>>           </map>
>>>       </constructor-arg>
>>>   </bean>
>>> 
>>> Version of CXF used : 2.7.1
>>> WSS4J : 1.6.8
>>> 
>>> In debug mode, I can see that in the class WSS4JInInterceptor when we
>>> handle the message (handleMessage(SoapMessage msg) throws Fault), the
>>> element is null ( Element elem =
>>> WSSecurityUtil.getSecurityHeader(doc.getSOAPPart(),
>>> actor); ) like also wsResult.
>>> 
>>> Does anybody knows how to solve this issue and why SoapHeaders have been
>>> removed ?
>>> 
>>> Regards,
>>> 
>>> Charles Moulliard
>>> Apache Committer / Sr. Enterprise Architect (RedHat)
>>> Twitter : @cmoulliard | Blog : http://cmoulliard.blogspot.com
>> 
>> 

Reply via email to