Hi,
I am getting component level exception , I wanted to capture that in the
route, but the exception occurs at the component level so i created custom
exception handler :
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.spi.ExceptionHandler;
public class CamelExceptionHandler implements ExceptionHandler {
private ProducerTemplate template;
/**
* We use a producer template to send a message to the Camel route
*/
public void setTemplate(ProducerTemplate template) {
this.template = template;
}
@Override
public void handleException(Throwable exception) {
// TODO Auto-generated method stub
handleException(exception.getMessage(), exception);
}
@Override
public void handleException(String message, Throwable exception) {
handleException(exception.getMessage(), null, exception);
}
@Override
public void handleException(final String message, final Exchange
originalExchange, final Throwable exception) {
// send the message to the special direct:file-error endpoint,
which will
trigger exception handling
template.send("seda:GenericFileError", new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
// set an exception on the message from the start so the
error handling is triggered
exchange.setException(exception);
exchange.getIn().setBody(message);
}
});
}
}
my route which uses that exception handler is :
/**
*
*/
package gov.ma.itd.ic.route;
import gov.ma.itd.ic.processor.CommandResponseProcessor;
import gov.ma.itd.ic.processor.ErrorHandlerProcessor;
import gov.ma.itd.ic.processor.GenericFileErrorProcessor;
import gov.ma.itd.ic.processor.GenericFileInProcessor;
import gov.ma.itd.ic.processor.MonitorProcessor;
import gov.ma.itd.ic.processor.OutProcessor;
import gov.ma.itd.ic.processor.PickupFileProcessor;
import gov.ma.itd.ic.processor.ServiceProcessor;
import gov.ma.itd.ic.utils.Constants;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import org.apache.camel.LoggingLevel;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.model.OtherwiseDefinition;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* Route for Generic File handling.
* @author rjmathew
*
*/
public class GenericFileRouteBuilder extends RouteBuilder {
/**
* Redelivery attempt count.
*/
//private static final int REDELIVERY_COUNT = 4 ;
/**
* Redelivery delay in ms
*/
//private static final long REDELIVERY_DELAY = 3000 ;
/**
* Configure the Camel Route.
*/
public void configure() throws Exception {
String genericFileSupport =
ICEndPoints.getValue(GENERIC_FILE_SUPPORT);
boolean isGenericFileSupport =
Boolean.parseBoolean(genericFileSupport);
String retryCount =
resourceBundle.getString(Constants.RETRY_COUNT);
int redeliveryCount = Integer.valueOf(retryCount).intValue()
;
String retryDelay =
resourceBundle.getString(Constants.RETRY_DELAY);
String retryStack =
resourceBundle.getString(Constants.STACKTRACE);
boolean stackValue = Boolean.parseBoolean(retryStack);
LOG.info("logRetryStackTrace is : " + stackValue);
int redeliveryDelay = Integer.valueOf(retryDelay).intValue() ;
String pollingFrequency =
ICEndPoints.getValue(Constants.POLL_FREQUENCY);
String pollDelayParameter = POLL_DELAY + "=" +
pollingFrequency;
// Route starts if the generic file support is turned ON
if (isGenericFileSupport) {
try {
PickupFileProcessor pickupProc = new PickupFileProcessor();
boolean
isGenericRoot = ICEndPoints.checkIfExists(Constants.GENERIC_ROOT_FOLDER);
// Main route starts here
if(isGenericRoot)
{
String sourceFolder = getGenericSourceURI() ;
from(sourceFolder)
// the exception clause here
.onException(Exception.class)
.maximumRedeliveries(redeliveryCount)
.redeliveryDelay(redeliveryDelay)
.logHandled(true)
.logRetryStackTrace(stackValue)
.retryAttemptedLogLevel(LoggingLevel.WARN)
.retriesExhaustedLogLevel(LoggingLevel.ERROR)
.backOffMultiplier(5.0)
.handled(true)
.to(seda:GenericFileError)
.end()
.process(pickupProc)
// main route continues and ends here
.process(new GenericFileInProcessor())
.recipientList(header(Constants.DESTINATION_URI))
.process(new
CommandResponseProcessor())// try using xpath here also
.choice()
.when(header(Constants.TRANSFER_TYPE).isEqualTo(Constants.SFTP))
.to(Constants.SFTP_TRANSFER_URI) .end()
.process(new ServiceProcessor()) ;
// exception path continues and ends here
from(seda:GenericFileError)
.process(new
GenericFileErrorProcessor())
.process(new ServiceProcessor());
/*
.filter().method("monitorBean",
"getMonitorValue")
.process(new MonitorProcessor()).end();
*/
}
else{
LOG.error("If the generic file handling
support is turned ON, the
generic.path.root should be given a valid directory path");
}
} catch (MissingResourceException mr) {
LOG.error("If the generic file handling support
is turned ON, the
generic.file.root should be specified.");
}
}
}
/**
* Get the Generic Folder Source URI
* @return - source file URI - corresponding to the root generic file
folder.
*/
private String getGenericSourceURI() {
String genericRootPath =
resourceBundle.getString(Constants.GENERIC_ROOT_FOLDER);
LOG.info("The generic file root is " + genericRootPath);
String pollingFrequency =
ICEndPoints.getValue(Constants.POLL_FREQUENCY);
String pollDelayParameter = POLL_DELAY + "=" + pollingFrequency;
StringBuffer str = new StringBuffer();
str.append("file://").append(genericRootPath) ;
str.append("?") .append(Constants.RECURSIVE_TRUE) ;
str.append("&").append(pollDelayParameter) ;
str.append("&").append(Constants.DELETE_TRUE) ;
str.append("&").append(Constants.READLOCK_CHANGED) ;
str.append("&").append(Constants.RDLOCK_TIMEOUT_MS) ;
str.append("&").append(Constants.AUTOCREATE_FALSE);
str.append("&").append("consumer.exceptionHandler=#camelExceptionHandler");
return str.toString() ;
}
}
my sourceURI has ("consumer.exceptionHandler=#camelExceptionHandler") , I am
still not able to catch the component level exception.
Iam using camel 2.4
Can you please help me about this issue.
Thanks,
Ckesired
--
View this message in context:
http://camel.465427.n5.nabble.com/camel-exception-handler-tp5723025.html
Sent from the Camel - Users mailing list archive at Nabble.com.