Yes, if you just want to throw the soap fault without any Camel default
error handling involved, you need to set the soap fault into exchange
fault message body instead of throw it.

BTW, here is a DSL .throwFault[1] to help you throw the soap fault message.

from(routerEndpointURI).throwFault(SOAP_FAULT);

[1]
http://svn.apache.org/repos/asf/activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfCustomizedExceptionTest.java

Willem

mario_horny wrote:
> Hi all,
> 
> I fixed the problem based on a hint given by Marc Giger. The snippet
> 
> catch( MTransformationException ex ) {
> 
>   SoapFault f = new SoapFault( ex.getMessage(), new QNAME
> (SOAPConstants.URI_NS_SOAP_1_1_ENVELOPE, "Client" ) );
> 
>   Message m = exchangeObj.getFault();
> 
>   m.setBody( f );
> 
>   return;
> }
> works fine. No need to throw the exception explicitly. Just set the fault
> body and return from process(Exchange), Camel will then not proceed to route
> the request to the target endpoint, but give the exception immediatly back
> to the caller. 
> 
> Bye,
> Mario
> 
> 
> mario_horny wrote:
>> Hi,
>>
>> I've got a problem, throwing an exception in a custom processer.
>>
>> The code snippet:
>>
>> try {
>>  
>>    outMsg = doTransform(inMsg);
>>
>> }
>> catch (MTransformationException ex ) {
>>
>>  try{
>>    log.error("Error in transformation.", ex );
>>
>>    SOAPFactorysf = SOAPFactory.newInstance();
>>    throw new SOAPFaultException( sf.createFault (ex.getMessage, new QNAME
>> (SOAPCONSTANTS.URI_NS_SOAP_1_1_ENVELOPE, "CLient" ) ) );
>>
>>  }
>>  catch( Exception ex2 ) {
>>
>>     log.debug("Cannot throw exception !", ex2 );
>>  }
>> }
>>
>> gives me the following stacktrace:
>>
>> 2008-11-20 10:08:09,608 ERROR | Error in transformation. |
>> processor.WSTXProcessor
>> de.dzbank.sop.router.wstx.exception.MTransformationException: Could not
>> transform message. rc= [8]. Detailed message = [One or more inputs was
>> invalid]
>>      at
>> de.dzbank.sop.router.wstx.processor.WSTXProcessor.transform(WSTXProcessor.java:164)
>>      at
>> de.dzbank.sop.router.wstx.processor.WSTXProcessor.process(WSTXProcessor.java:79)
>>      at
>> org.apache.camel.impl.converter.AsyncProcessorTypeConverter$ProcessorToAsynProcessorBridge.process(AsyncProcessorTypeConverter.java:44)
>>      at
>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:146)
>>      at
>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:90)
>>      at org.apache.camel.processor.Pipeline.process(Pipeline.java:101)
>>      at org.apache.camel.processor.Pipeline.process(Pipeline.java:85)
>>      at
>> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:40)
>>      at
>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:44)
>>      at
>> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:68)
>>      at
>> org.apache.camel.component.cxf.CamelInvoker.invoke(CamelInvoker.java:59)
>>      at
>> org.apache.camel.component.cxf.feature.MessageInvokerInterceptor$1.run(MessageInvokerInterceptor.java:51)
>>      at
>> org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
>>      at
>> org.apache.camel.component.cxf.feature.MessageInvokerInterceptor.handleMessage(MessageInvokerInterceptor.java:71)
>>      at
>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:221)
>>      at
>> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:77)
>>      at
>> org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequest(JettyHTTPDestination.java:280)
>>      at
>> org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:254)
>>      at
>> org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:70)
>>      at
>> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
>>      at
>> org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
>>      at
>> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
>>      at org.mortbay.jetty.Server.handle(Server.java:324)
>>      at
>> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
>>      at
>> org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:842)
>>      at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:730)
>>      at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
>>      at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
>>      at
>> org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
>>      at
>> org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
>> 2008-11-20 10:08:09,684 ERROR | Cannot throw exception !  |
>> processor.WSTXProcessor
>> java.lang.UnsupportedOperationException
>>      at
>> com.iona.webservices.saaj.SOAPFaultImpl.addFaultReasonText(SOAPFaultImpl.java:238)
>>      at
>> com.iona.webservices.saaj.SOAPFactoryImpl.createFault(SOAPFactoryImpl.java:48)
>>      at
>> de.dzbank.sop.router.wstx.processor.WSTXProcessor.process(WSTXProcessor.java:90)
>>      at
>> org.apache.camel.impl.converter.AsyncProcessorTypeConverter$ProcessorToAsynProcessorBridge.process(AsyncProcessorTypeConverter.java:44)
>>      at
>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:146)
>>      at
>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:90)
>>      at org.apache.camel.processor.Pipeline.process(Pipeline.java:101)
>>      at org.apache.camel.processor.Pipeline.process(Pipeline.java:85)
>>      at
>> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:40)
>>      at
>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:44)
>>      at
>> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:68)
>>      at
>> org.apache.camel.component.cxf.CamelInvoker.invoke(CamelInvoker.java:59)
>>      at
>> org.apache.camel.component.cxf.feature.MessageInvokerInterceptor$1.run(MessageInvokerInterceptor.java:51)
>>      at
>> org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
>>      at
>> org.apache.camel.component.cxf.feature.MessageInvokerInterceptor.handleMessage(MessageInvokerInterceptor.java:71)
>>      at
>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:221)
>>      at
>> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:77)
>>      at
>> org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequest(JettyHTTPDestination.java:280)
>>      at
>> org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:254)
>>      at
>> org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:70)
>>      at
>> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
>>      at
>> org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
>>      at
>> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
>>      at org.mortbay.jetty.Server.handle(Server.java:324)
>>      at
>> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
>>      at
>> org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:842)
>>      at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:730)
>>      at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
>>      at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
>>      at
>> org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
>>
>>
>> The first stacktrace is the one logged via log.error(). The second one is
>> the reason, why the SOAPFault could'nt be thrown. It's because of an
>> UnsupportedOperationException. 
>>
>> Does anyone have an idea, why this happens / how to fix it ?
>>
>> Many greets,
>> Mario
>>
>>
> 

Reply via email to