log4j.logger.org.apache.camel.processor.SendProcessor=DEBUG => some redelivery seems to be happening but still getting errors: org.apache.cxf.interceptor.Fault: Response was of unexpected text/html ContentType. Incoming portion of HTML stream: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <soapenv:Fault> <faultcode>Server</faultcode> <faultstring>Missing operation for soapAction [] and body element [null] with SOAP Version [SOAP 1.1]</faultstring> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> I can see in SOAPUI in my mockservice that no actual redelivery was made.
log4j.logger.org.apache.camel.processor.SendProcessor=INFO => no redelivery happens! Can't see anything in the SendProcessor code that would cause this though.. On Fri, Apr 5, 2013 at 3:55 PM, Nico Mommaerts <[email protected]>wrote: > I'm getting nearer: > > from("cxf:bean:brokerOrderLimit?dataFormat=PAYLOAD") > .onException(SoapFault.class) > .onWhen(thalerLoginExceptionPredicate) > .handled(true) > .maximumRedeliveries(3) > .redeliveryDelay(100) > .retryAttemptedLogLevel(LoggingLevel.WARN) > .onRedelivery(new Processor() { > @Override > public void process(Exchange exchange) throws Exception { > AccessKey accessKey = > exchange.getProperty(ThalerSoapHeadersEnricher.ACCESKEY_PROPERTY, > AccessKey.class); > accessKeyProvider.invalidate(accessKey); > > CxfPayload<SoapHeader> msg = exchange.getIn().getBody(CxfPayload.class); > > AccessKey newKey = accessKeyProvider.borrowAccessKey(); > System.out.println("insert new key" + newKey); > } > }) > .end() > .process(soapHeadersEnricher) > .to("cxf:bean:thalerOrderLimit?dataFormat=PAYLOAD") > .process(new Processor() { > @Override > public void process(Exchange exchange) throws Exception { > AccessKey accessKey = > exchange.getProperty(ThalerSoapHeadersEnricher.ACCESKEY_PROPERTY, > AccessKey.class); > accessKeyProvider.returnAccessKey(accessKey); > } > }); > > BUT my current problem is that redelivery only happens when the camel > log4j log level is on DEBUG! What strange manner of magic is this I ask > thee? On INFO the exception does get caught but nothing further happens, > the route seems to be stuck somewhere, eventually Soapui (which I use to > test) receives a timeout, > > > On Fri, Apr 5, 2013 at 2:33 PM, Nico Mommaerts > <[email protected]>wrote: > >> Hey, >> >> I've been reading the chapter on Error handling over and over but I'm >> still failing miserably.. >> >> My scenario: a cxf proxy route which modifies the soapheaders, I want all >> soapfaults to be returned as-is to the caller, except when the soapfault >> contains a certain string. In that case I want to modify the soapheader of >> the original message again and redeliver. Modify/redeliver up to x times, >> then just return the soapfault to the caller. >> >> Given the power of the error handling in Camel this would seem easy. >> >> This is my route without error handling: >> from("cxf:bean:brokerOrderLimit?dataFormat=PAYLOAD") >> .process(soapHeadersEnricher) // modfies the soapheader >> .to("cxf:bean:backendOrderLimit?dataFormat=PAYLOAD") >> >> I have: getContext().setHandleFault(true); so SOAPFault gets recognized >> as an exception. >> >> If I use the doTry()..doCatch(SOAPFault.class).process(//examine >> fault).doEnd(), I succeed in recognized the special case I want to handle. >> But I have no idea how to control the route flow from that point. I want >> to change the soapheader and redeliver to the endpoint which returned the >> soapfault. Right now the caller just gets back an empty soap envelope when >> I do this. >> >> I also tried with >> from("cxf:bean:brokerOrderLimit?dataFormat=PAYLOAD") >> .process(soapHeadersEnricher) >> .to("cxf:bean:thalerOrderLimit?dataFormat=PAYLOAD") >> .onException(SoapFault.class) >> .onWhen(//filter the special case) >> .handled(true); // true or false doesn't >> seem to make a difference, also tried with continued >> But in this case the predicate is never even called (so the exception >> isn't caught), and the caller just receives the soapfault back. >> >> Not sure how to handle this problem, any ideas? >> >> >
