camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From William Tam <email.w...@gmail.com>
Subject Re: Unable to throw Soap Fault
Date Wed, 24 Mar 2010 13:45:22 GMT
I think it is hard to workaround the problem.   If you can rebuild just 
the camel-cxf component yourself, you can merge the fix (the change is 
quite small).  Please make sure you pick up 
https://issues.apache.org/activemq/browse/CAMEL-2544 too.


Willem Jiang wrote:
> I'm afraid CXF interceptor can help you to do that,as we setup some 
> customer interceptor when the camel-cxf endpoint working in PAYLOAD 
> dataformat.
>
> Can you try the latest Camel to see if the Error still there?
> BTW, is there any stack trace in the log that can help us trace the 
> issue ?
>
> Willem
>
> HiS wrote:
>> Hi,
>>
>> For generalization I had written the endpoint as ("http:requestset"), 
>> but
>> this is actually a custom endpoint which internally uses CXF to 
>> create the
>> web-service endpoint.
>> Its working fine when sending normal response but only when soap 
>> fault needs
>> to be returned does is not work.
>>
>> We can't migrate to the latest camel but wanted to fix this problem 
>> in the
>> current version, can I use CXF interceptors to send soap fault?
>>
>> Thanks,
>> Himanshu
>>
>>
>> willem.jiang wrote:
>>> Hi,
>>>
>>> Is the from("http:requestset") a CXF endpoint or other something ?
>>> I just went through the CxfConsumer code of camel trunk, it should 
>>> be able to deal with the fault message that you set in the 
>>> ErrorProcessor.
>>>
>>> If you can't upgrade the Camel version, I'm afraid you need to buy a 
>>> customer support, as we don't do min patch release for Camel 2.0.0.
>>>
>>> Willem
>>>
>>>
>>> HiS wrote:
>>>> Hi Willem,
>>>>
>>>> Thanks for your response.
>>>> I am having the following groovy route:
>>>>
>>>> from("http:requestset")
>>>>    .onException(Exception.class)
>>>>       .handled(true)
>>>>       .processRef('ErrorProcessor').end()
>>>> .process(new ValidateRequestProcessor());
>>>>
>>>> Here the 'ValidateRequestProcessor' validates the request and on 
>>>> finding
>>>> missing parameter throws an exception. The exception is caught by the
>>>> 'ErrorProcessor' where the code for returning soap fault is written.
>>>>
>>>> We are using PAYLOAD DataFormat for camel-cxf but could not migrate to
>>>> Camel
>>>> 2.3.0 due to other dependencies.
>>>> Is there any workaround to the issue which can be used to return 
>>>> the soap
>>>> fault (I saw examples of using setFaultBody in the route but that also
>>>> did
>>>> not seem to work) ?
>>>>
>>>> Thanks,
>>>> Himanshu
>>>>
>>>>
>>>> willem.jiang wrote:
>>>>> Hi,
>>>>>
>>>>> Can I have a look at your Camel route?
>>>>> And which camel-cxf DataFormat are you using ?
>>>>> If you are using PAYLOAD DataFormat, I'm afraid you need to use 
>>>>> Latest Camel 2.3.0 SNAPSHOT. As William Tam just added a 
>>>>> enhancement for it[1]
>>>>>
>>>>> [1]https://issues.apache.org/activemq/browse/CAMEL-2495
>>>>>
>>>>> HiS wrote:
>>>>>> Hi All,
>>>>>>
>>>>>> We are using CXF 2.2.3 with Camel 2.0.0 for exposing an end-point
on
>>>>>> Tomcat
>>>>>> 6.0. A requirement is that if incoming request does not have a
>>>>>> parameter,
>>>>>> soap fault needs to be thrown.
>>>>>>
>>>>>> As the Fault and Out Consolidation has happened in Camel 2.0.0, I
am
>>>>>> creating a soap fault and setting it in the Out stream of Exchange
>>>>>> inside
>>>>>> a
>>>>>> processor.
>>>>>>
>>>>>> SOAPMessage msg = null;
>>>>>>             try {
>>>>>>                 MessageFactory factory =
>>>>>> MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
>>>>>>                 msg = factory.createMessage();
>>>>>>                 SOAPBody body = msg.getSOAPBody();
>>>>>>                 QName qName = SOAPConstants.SOAP_SENDER_FAULT;
>>>>>>                                                SOAPFault 
>>>>>> soapFault = body.addFault(qName, "Test
>>>>>> Code");
>>>>>>                 Detail detail = soapFault.addDetail();
>>>>>>                 detail.setValue("Test Description");
>>>>>>                                 exchange.getOut().setFault(true);
>>>>>>                
>>>>>> exchange.getOut().setHeader(org.apache.cxf.message.Message.RESPONSE_CODE,

>>>>>>
>>>>>> new Integer(500));
>>>>>>                 exchange.getOut().setBody(body);
>>>>>>
>>>>>>             } catch (SOAPException e) {
>>>>>>                 e.printStackTrace();
>>>>>>             }
>>>>>>
>>>>>> After doing this, I am not getting any exception but the soap 
>>>>>> fault is
>>>>>> also
>>>>>> not getting thrown, instead a Soap Envelope with empty Body is 
>>>>>> coming
>>>>>> as
>>>>>> output.
>>>>>>
>>>>>> Any ideas on what could be going wrong in the above?
>>>>>>
>>>>>> Thanks,
>>>>>> Himanshu
>>>>>
>>>
>>>
>>
>
>

Mime
View raw message