All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.camel.spring.ErrorHandlerDefinition Maven / Gradle / Ivy

There is a newer version: 4.9.0
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.camel.spring;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

import org.apache.camel.LoggingLevel;
import org.apache.camel.model.IdentifiedType;
import org.apache.camel.processor.errorhandler.RedeliveryPolicy;
import org.apache.camel.spi.Metadata;

/**
 * Error handler settings
 */
@Metadata(label = "spring,configuration,error")
@XmlRootElement(name = "errorHandler")
@XmlAccessorType(XmlAccessType.FIELD)
public class ErrorHandlerDefinition extends IdentifiedType {
    @XmlAttribute @Metadata(defaultValue = "DefaultErrorHandler", required = true)
    private ErrorHandlerType type = ErrorHandlerType.DefaultErrorHandler;
    @XmlAttribute
    private String deadLetterUri;
    @XmlAttribute
    private String deadLetterHandleNewException;
    @XmlAttribute @Metadata(defaultValue = "ERROR")
    private LoggingLevel level;
    @XmlAttribute @Metadata(defaultValue = "WARN")
    private LoggingLevel rollbackLoggingLevel;
    @XmlAttribute
    private String logName;
    @XmlAttribute
    private Boolean useOriginalMessage;
    @XmlAttribute
    private Boolean useOriginalBody;
    @XmlAttribute
    private String transactionTemplateRef;
    @XmlAttribute
    private String transactionManagerRef;
    @XmlAttribute
    private String onRedeliveryRef;
    @XmlAttribute
    private String onExceptionOccurredRef;
    @XmlAttribute
    private String onPrepareFailureRef;
    @XmlAttribute
    private String retryWhileRef;
    @XmlAttribute
    private String redeliveryPolicyRef;
    @XmlAttribute
    private String executorServiceRef;
    @XmlElement
    private CamelRedeliveryPolicyFactoryBean redeliveryPolicy;

    public ErrorHandlerType getType() {
        return type;
    }

    /**
     * The type of the error handler
     */
    public void setType(ErrorHandlerType type) {
        this.type = type;
    }

    public String getDeadLetterUri() {
        return deadLetterUri;
    }

    /**
     * The dead letter endpoint uri for the Dead Letter error handler.
     */
    public void setDeadLetterUri(String deadLetterUri) {
        this.deadLetterUri = deadLetterUri;
    }

    public String getDeadLetterHandleNewException() {
        return deadLetterHandleNewException;
    }

    /**
     * Whether the dead letter channel should handle (and ignore) any new exception that may been thrown during sending the
     * message to the dead letter endpoint.
     * 

* The default value is true which means any such kind of exception is handled and ignored. Set this to false * to let the exception be propagated back on the {@link org.apache.camel.Exchange}. This can be used in situations * where you use transactions, and want to use Camel's dead letter channel to deal with exceptions during routing, * but if the dead letter channel itself fails because of a new exception being thrown, then by setting this to false * the new exceptions is propagated back and set on the {@link org.apache.camel.Exchange}, which allows the transaction * to detect the exception, and rollback. */ public void setDeadLetterHandleNewException(String deadLetterHandleNewException) { this.deadLetterHandleNewException = deadLetterHandleNewException; } public LoggingLevel getLevel() { return level; } /** * Logging level to use when using the logging error handler type. */ public void setLevel(LoggingLevel level) { this.level = level; } public LoggingLevel getRollbackLoggingLevel() { return rollbackLoggingLevel; } /** * Sets the logging level to use for logging transactional rollback. *

* This option is default WARN. */ public void setRollbackLoggingLevel(LoggingLevel rollbackLoggingLevel) { this.rollbackLoggingLevel = rollbackLoggingLevel; } public String getLogName() { return logName; } /** * Name of the logger to use for the logging error handler */ public void setLogName(String logName) { this.logName = logName; } public Boolean getUseOriginalMessage() { return useOriginalMessage; } /** * Will use the original input {@link org.apache.camel.Message} (original body and headers) when an {@link org.apache.camel.Exchange} * is moved to the dead letter queue. *

* Notice: this only applies when all redeliveries attempt have failed and the {@link org.apache.camel.Exchange} * is doomed for failure. *
* Instead of using the current inprogress {@link org.apache.camel.Exchange} IN message we use the original * IN message instead. This allows you to store the original input in the dead letter queue instead of the inprogress * snapshot of the IN message. * For instance if you route transform the IN body during routing and then failed. With the original exchange * store in the dead letter queue it might be easier to manually re submit the {@link org.apache.camel.Exchange} * again as the IN message is the same as when Camel received it. * So you should be able to send the {@link org.apache.camel.Exchange} to the same input. *

* The difference between useOriginalMessage and useOriginalBody is that the former includes both the original * body and headers, where as the latter only includes the original body. You can use the latter to enrich * the message with custom headers and include the original message body. The former wont let you do this, as its * using the original message body and headers as they are. * You cannot enable both useOriginalMessage and useOriginalBody. *

* Important: The original input means the input message that are bounded by the current {@link org.apache.camel.spi.UnitOfWork}. * An unit of work typically spans one route, or multiple routes if they are connected using internal * endpoints such as direct or seda. When messages is passed via external endpoints such as JMS or HTTP * then the consumer will create a new unit of work, with the message it received as input as the * original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work * boundary for the messages in their sub-route (eg the splitted message); however these EIPs have * an option named shareUnitOfWork which allows to combine with the parent unit of work in * regard to error handling and therefore use the parent original message. *

* By default this feature is off. * * @see #setUseOriginalBody(Boolean) */ public void setUseOriginalMessage(Boolean useOriginalMessage) { this.useOriginalMessage = useOriginalMessage; } public Boolean getUseOriginalBody() { return useOriginalBody; } /** * Will use the original input {@link org.apache.camel.Message} body (original body only) when an {@link org.apache.camel.Exchange} * is moved to the dead letter queue. *

* Notice: this only applies when all redeliveries attempt have failed and the {@link org.apache.camel.Exchange} * is doomed for failure. *
* Instead of using the current inprogress {@link org.apache.camel.Exchange} IN message we use the original * IN message instead. This allows you to store the original input in the dead letter queue instead of the inprogress * snapshot of the IN message. * For instance if you route transform the IN body during routing and then failed. With the original exchange * store in the dead letter queue it might be easier to manually re submit the {@link org.apache.camel.Exchange} * again as the IN message is the same as when Camel received it. * So you should be able to send the {@link org.apache.camel.Exchange} to the same input. *

* The difference between useOriginalMessage and useOriginalBody is that the former includes both the original * body and headers, where as the latter only includes the original body. You can use the latter to enrich * the message with custom headers and include the original message body. The former wont let you do this, as its * using the original message body and headers as they are. * You cannot enable both useOriginalMessage and useOriginalBody. *

* Important: The original input means the input message that are bounded by the current {@link org.apache.camel.spi.UnitOfWork}. * An unit of work typically spans one route, or multiple routes if they are connected using internal * endpoints such as direct or seda. When messages is passed via external endpoints such as JMS or HTTP * then the consumer will create a new unit of work, with the message it received as input as the * original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work * boundary for the messages in their sub-route (eg the splitted message); however these EIPs have * an option named shareUnitOfWork which allows to combine with the parent unit of work in * regard to error handling and therefore use the parent original message. *

* By default this feature is off. * * @see #setUseOriginalMessage(Boolean) */ public void setUseOriginalBody(Boolean useOriginalBody) { this.useOriginalBody = useOriginalBody; } public String getTransactionTemplateRef() { return transactionTemplateRef; } /** * References to the {@link org.springframework.transaction.support.TransactionTemplate} to use with the transaction error handler. */ public void setTransactionTemplateRef(String transactionTemplateRef) { this.transactionTemplateRef = transactionTemplateRef; } public String getTransactionManagerRef() { return transactionManagerRef; } /** * References to the {@link org.springframework.transaction.PlatformTransactionManager} to use with the transaction error handler. */ public void setTransactionManagerRef(String transactionManagerRef) { this.transactionManagerRef = transactionManagerRef; } public String getOnRedeliveryRef() { return onRedeliveryRef; } /** * Sets a reference to a processor that should be processed before a redelivery attempt. *

* Can be used to change the {@link org.apache.camel.Exchange} before its being redelivered. */ public void setOnRedeliveryRef(String onRedeliveryRef) { this.onRedeliveryRef = onRedeliveryRef; } public String getOnExceptionOccurredRef() { return onExceptionOccurredRef; } /** * Sets a reference to a processor that should be processed just after an exception occurred. * Can be used to perform custom logging about the occurred exception at the exact time it happened. *

* Important: Any exception thrown from this processor will be ignored. */ public void setOnExceptionOccurredRef(String onExceptionOccurredRef) { this.onExceptionOccurredRef = onExceptionOccurredRef; } public String getOnPrepareFailureRef() { return onPrepareFailureRef; } /** * Sets a reference to a processor to prepare the {@link org.apache.camel.Exchange} before * handled by the failure processor / dead letter channel. This allows for example to enrich the message * before sending to a dead letter queue. */ public void setOnPrepareFailureRef(String onPrepareFailureRef) { this.onPrepareFailureRef = onPrepareFailureRef; } public String getRetryWhileRef() { return retryWhileRef; } /** * Sets a reference to an retry while expression. *

* Will continue retrying until expression evaluates to false. */ public void setRetryWhileRef(String retryWhileRef) { this.retryWhileRef = retryWhileRef; } public String getRedeliveryPolicyRef() { return redeliveryPolicyRef; } /** * Sets a reference to a {@link RedeliveryPolicy} to be used for redelivery settings. */ public void setRedeliveryPolicyRef(String redeliveryPolicyRef) { this.redeliveryPolicyRef = redeliveryPolicyRef; } public String getExecutorServiceRef() { return executorServiceRef; } /** * Sets a reference to a thread pool to be used by the error handler */ public void setExecutorServiceRef(String executorServiceRef) { this.executorServiceRef = executorServiceRef; } public CamelRedeliveryPolicyFactoryBean getRedeliveryPolicy() { return redeliveryPolicy; } /** * Sets the redelivery settings */ public void setRedeliveryPolicy(CamelRedeliveryPolicyFactoryBean redeliveryPolicy) { this.redeliveryPolicy = redeliveryPolicy; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy