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
