This is "proper" behavior as per spec.   In a one way, the client just knows 
that the message was posted, that's it.  As an example, if using JMS, the 
client just posts the message to the queue and returns.  There is absolutely 
no way to get any information about whether the request was able to be 
parsed or processed back from the server.

In 2.6.0, Aki did add a "robust in-only" mode (set the 
"org.apache.cxf.oneway.robust" property on the endpoint to true) which would 
allow returning faults to the client.  This is against spec and transports 
like JMS I don't think can handle it (not really sure, Aki?), but but it may 
work for you.

Dan



On Tuesday, April 17, 2012 03:55:55 PM Hervé BARRAULT wrote:
> Hi,
> I'm trying to use CXF with both WS-Addressing and One Way.
> 
> My client send a message (not with CXF) with the following SOAP Header:
>   <soapenv:Header>
> <wsa:Action soapenv:mustUnderstand="1">
>       http://docs.oasis-open.org/wsn/bw-2/NotificationConsumer/Notify
>     </wsa:Action>
>   </soapenv:Header>
> 
> In my logs, I had :
> 14:10:31,210 | WARN  | ault-workqueue-2 |
> PhaseInterceptorChain                                            |
> org.apache.cxf.common.logging.LogUtils                            369 |  -
> -  | Interceptor for {
> http://example.com/test1}StatusBrokerService#{http://docs.oasis-open.org/w
> sn/brw-2}Notifyhas thrown exception, unwinding now
> org.apache.cxf.binding.soap.SoapFault: MustUnderstand headers: [{
> http://www.w3.org/2005/08/addressing}Action] are not understood.
>     at
> org.apache.cxf.binding.soap.interceptor.MustUnderstandInterceptor$Ultimate
> ReceiverMustUnderstandInterceptor.handleMessage(MustUnderstandInterceptor.
> java:225) at
> org.apache.cxf.binding.soap.interceptor.MustUnderstandInterceptor$Ultimate
> ReceiverMustUnderstandInterceptor.handleMessage(MustUnderstandInterceptor.
> java:199) at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorCha
> in.java:243) at
> org.apache.cxf.phase.PhaseInterceptorChain.resume(PhaseInterceptorChain.ja
> va:218) at
> org.apache.cxf.interceptor.OneWayProcessorInterceptor$1.run(OneWayProcesso
> rInterceptor.java:105) at
> org.apache.cxf.workqueue.AutomaticWorkQueueImpl$2.run(AutomaticWorkQueueIm
> pl.java:332) at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.
> java:886) at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java
> :908) at java.lang.Thread.run(Thread.java:662)
> 
> And there was a classical 202/Accepted for a One Way message (fault not
> returned as it is one way).
> 
> 
> 
> So, I found an interesting topics which says, enable the ws-addressing
> feature (to avoid this fault) :
> I added the feature
> <cxf:features>
>       <wsa:addressing/>
> </cxf:features>
> 
> Now when i receive a message, an answer is automatically sent (which i
> guess is no more compliant with the One Way):
> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";>
>    <soap:Header>
>       <MessageID xmlns="http://www.w3.org/2005/08/addressing
> ">urn:uuid:67074ee9-455b-4488-b48d-e2a9b16a7c1b</MessageID>
>       <To xmlns="http://www.w3.org/2005/08/addressing";>
> http://www.w3.org/2005/08/addressing/anonymous</To>
>       <ReplyTo xmlns="http://www.w3.org/2005/08/addressing";>
>          <Address>http://www.w3.org/2005/08/addressing/none</Address>
>       </ReplyTo>
>    </soap:Header>
>    <soap:Body/>
> </soap:Envelope>
> 
> I know, i use an old version of CXF : 2.2.12-fuse-00-00 but i have not
> seen a related JIRA (and a post said that 2.4.0 had the same behavior).
> (I am using also the PAYLOAD mode)
> 
> I am doing it the right way ?
> Is this behavior normal ?
> 
> Thanks for answers
> Regards
> Hervé
-- 
Daniel Kulp
[email protected] - http://dankulp.com/blog
Talend Community Coder - http://coders.talend.com

Reply via email to