You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Kushagra Bindal <bi...@gmail.com> on 2023/08/10 08:04:54 UTC

Upgrade to Camel Version Set ErrorHandler

Hi,

I am trying to upgrade my camel version from 2.25.4 to 4.0.0.M3.

Earlier I use to set ErrorHandler using below pattern.

from(customString)
    .errorHandler(new RetrieveCustomErrorHandler())
    .convertBodyTo(CustomRetrieve.class)
    .setProperty(JAXWS_METHOD_NAME_PROPERTY, constant("Retrieve"))
    .to("direct:customEntryPoint")
    .routeId(Routes.CUSTOM_RETRIEVE.getRouteId());

Earlier I used to implements ErrorHandlerFactory for
RetrieveCustomErrorHandler and use to override createErrorHandler()
method to return Processor Object.

Now with the latest version of Camel, I just wanted to understand the
new mechanism of doing the same.
With the new ErrorHandlerFactory interface I am getting new methods named as

public ErrorHandlerFactory cloneBuilder()

public boolean supportTransacted()

Any suggestions/help will be appreciated.



-- 
Regards,
Kushagra

Re: Upgrade to Camel Version Set ErrorHandler

Posted by Kushagra Bindal <bi...@gmail.com>.
Hi Claus,

Compilation was successful, but during junit execution it is now
throwing errors. So if I summaries it then I was trying to execute
below code.

from(customString)
    .errorHandler(new RetrieveCustomErrorHandler())
    .convertBodyTo(CustomRetrieve.class)
    .setProperty(JAXWS_METHOD_NAME_PROPERTY, constant("Retrieve"))
    .to("direct:customEntryPoint")
    .routeId(Routes.CUSTOM_RETRIEVE.getRouteId());

final class RetrieveCustomErrorHandler implements ErrorHandlerFactory{


    @Override
    public boolean supportTransacted() {
        return false;
    }

    @Override
    public ErrorHandlerFactory cloneBuilder() {
        ErrorHandlerFactory handler = new RetrieveCustomErrorHandler();
        processCustomData();
        return handler;
    }

    private Processor processCustomData(){

return new DelegateAsyncProcessor(processor) {
        @Override
        public boolean process(final Exchange exchange, final
AsyncCallback callback) {
            return super.process(exchange, new AsyncCallback() {
                @Override
                public void done(boolean doneSync) {
                    exchange.removeProperty(Exchange.REDELIVERY_EXHAUSTED);
                    callback.done(doneSync);
                    if (exchange.getException() != null) {
                        LOGGER.info("End retrieving custom data : ["

.concat(exchange.getProperty(ExchangeProperties.CUSTOM_DATA,
String.class))
                                .concat("] - result : NO:
").concat(exchange.getException().getMessage()));
                    }
                }
            });
        }
}
}

Now it is throwing below error

Caused by: org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'retrieveCustomRouteBuilder': Invocation
of init method failed
Caused by: org.apache.camel.FailedToCreateRouteException: Failed to
create route customRetrieveRouteCustom at: >>>
ConvertBodyTo[com.sample.webservices.custom.retrieve.CustomRetrieve]
<<< in route: Route(customRetrieveRouteCustom)[From[direct:test...
because of Unsupported definition:
com.sample.service.quality.camel.routes.RetrieveCustomErrorHandler@29d2904b
Caused by: java.lang.IllegalStateException: Unsupported definition:
com.sample.service.quality.camel.routes.RetrieveCustomErrorHandler@29d2904b


Please suggest what is wrong here, so that I can try the same.

Regards
Kushagra

On Fri, Aug 11, 2023 at 6:17 PM Kushagra Bindal
<bi...@gmail.com> wrote:
>
> Was able to resolve this, thanks for your input.
>
> On Thu, Aug 10, 2023 at 5:11 PM Kushagra Bindal
> <bi...@gmail.com> wrote:
> >
> > Do you have any handy sample with you which I can refer to for this case?
> >
> > On Thu, Aug 10, 2023 at 2:34 PM Claus Ibsen <cl...@gmail.com> wrote:
> > >
> > > Hi
> > >
> > > Read the javadoc of those methods what they do and just implement what you
> > > need - its in the name also - supportsTransaction etc.
> > >
> > > On Thu, Aug 10, 2023 at 10:29 AM Kushagra Bindal <bi...@gmail.com>
> > > wrote:
> > >
> > > > Earlier the usage was to be like that as I mentioned here... We
> > > > usually checked on AsyncCallback and reacted accordingly.
> > > >
> > > >
> > > > @Override
> > > > public Processor createErrorHandler(RouteContext routeContext,
> > > > Processor processor) {
> > > >     return new DelegateAsyncProcessor(processor) {
> > > >         @Override
> > > >         public boolean process(final Exchange exchange, final
> > > > AsyncCallback callback) {
> > > >             return super.process(exchange, new AsyncCallback() {
> > > >                 @Override
> > > >                 public void done(boolean doneSync) {
> > > >                     exchange.removeProperty(Exchange.REDELIVERY_EXHAUSTED);
> > > >                     callback.done(doneSync);
> > > >                     if (exchange.getException() != null) {
> > > >                         LOGGER.info("End retrieving custom data : ["
> > > >
> > > > .concat(exchange.getProperty(ExchangeProperties.CUSTOM_DATA,
> > > > String.class))
> > > >                                 .concat("] - result : NO:
> > > > ").concat(exchange.getException().getMessage()));
> > > >                     }
> > > >                 }
> > > >             });
> > > >         }
> > > >
> > > > Please suggest if there is some alternative way of achieving the same.
> > > >
> > > > On Thu, Aug 10, 2023 at 1:44 PM Claus Ibsen <cl...@gmail.com> wrote:
> > > > >
> > > > > Why are you creating your own error handler implementation at all? What
> > > > is
> > > > > special about it
> > > > >
> > > > > On Thu, Aug 10, 2023 at 10:05 AM Kushagra Bindal <
> > > > bindal.kushagra@gmail.com>
> > > > > wrote:
> > > > >
> > > > > > Hi,
> > > > > >
> > > > > > I am trying to upgrade my camel version from 2.25.4 to 4.0.0.M3.
> > > > > >
> > > > > > Earlier I use to set ErrorHandler using below pattern.
> > > > > >
> > > > > > from(customString)
> > > > > >     .errorHandler(new RetrieveCustomErrorHandler())
> > > > > >     .convertBodyTo(CustomRetrieve.class)
> > > > > >     .setProperty(JAXWS_METHOD_NAME_PROPERTY, constant("Retrieve"))
> > > > > >     .to("direct:customEntryPoint")
> > > > > >     .routeId(Routes.CUSTOM_RETRIEVE.getRouteId());
> > > > > >
> > > > > > Earlier I used to implements ErrorHandlerFactory for
> > > > > > RetrieveCustomErrorHandler and use to override createErrorHandler()
> > > > > > method to return Processor Object.
> > > > > >
> > > > > > Now with the latest version of Camel, I just wanted to understand the
> > > > > > new mechanism of doing the same.
> > > > > > With the new ErrorHandlerFactory interface I am getting new methods
> > > > named
> > > > > > as
> > > > > >
> > > > > > public ErrorHandlerFactory cloneBuilder()
> > > > > >
> > > > > > public boolean supportTransacted()
> > > > > >
> > > > > > Any suggestions/help will be appreciated.
> > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Regards,
> > > > > > Kushagra
> > > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Claus Ibsen
> > > > > -----------------
> > > > > @davsclaus
> > > > > Camel in Action 2: https://www.manning.com/ibsen2
> > > >
> > > >
> > > >
> > > > --
> > > > Regards,
> > > > Kushagra
> > > >
> > >
> > >
> > > --
> > > Claus Ibsen
> > > -----------------
> > > @davsclaus
> > > Camel in Action 2: https://www.manning.com/ibsen2
> >
> >
> >
> > --
> > Regards,
> > Kushagra
>
>
>
> --
> Regards,
> Kushagra



-- 
Regards,
Kushagra

Re: Upgrade to Camel Version Set ErrorHandler

Posted by Kushagra Bindal <bi...@gmail.com>.
Was able to resolve this, thanks for your input.

On Thu, Aug 10, 2023 at 5:11 PM Kushagra Bindal
<bi...@gmail.com> wrote:
>
> Do you have any handy sample with you which I can refer to for this case?
>
> On Thu, Aug 10, 2023 at 2:34 PM Claus Ibsen <cl...@gmail.com> wrote:
> >
> > Hi
> >
> > Read the javadoc of those methods what they do and just implement what you
> > need - its in the name also - supportsTransaction etc.
> >
> > On Thu, Aug 10, 2023 at 10:29 AM Kushagra Bindal <bi...@gmail.com>
> > wrote:
> >
> > > Earlier the usage was to be like that as I mentioned here... We
> > > usually checked on AsyncCallback and reacted accordingly.
> > >
> > >
> > > @Override
> > > public Processor createErrorHandler(RouteContext routeContext,
> > > Processor processor) {
> > >     return new DelegateAsyncProcessor(processor) {
> > >         @Override
> > >         public boolean process(final Exchange exchange, final
> > > AsyncCallback callback) {
> > >             return super.process(exchange, new AsyncCallback() {
> > >                 @Override
> > >                 public void done(boolean doneSync) {
> > >                     exchange.removeProperty(Exchange.REDELIVERY_EXHAUSTED);
> > >                     callback.done(doneSync);
> > >                     if (exchange.getException() != null) {
> > >                         LOGGER.info("End retrieving custom data : ["
> > >
> > > .concat(exchange.getProperty(ExchangeProperties.CUSTOM_DATA,
> > > String.class))
> > >                                 .concat("] - result : NO:
> > > ").concat(exchange.getException().getMessage()));
> > >                     }
> > >                 }
> > >             });
> > >         }
> > >
> > > Please suggest if there is some alternative way of achieving the same.
> > >
> > > On Thu, Aug 10, 2023 at 1:44 PM Claus Ibsen <cl...@gmail.com> wrote:
> > > >
> > > > Why are you creating your own error handler implementation at all? What
> > > is
> > > > special about it
> > > >
> > > > On Thu, Aug 10, 2023 at 10:05 AM Kushagra Bindal <
> > > bindal.kushagra@gmail.com>
> > > > wrote:
> > > >
> > > > > Hi,
> > > > >
> > > > > I am trying to upgrade my camel version from 2.25.4 to 4.0.0.M3.
> > > > >
> > > > > Earlier I use to set ErrorHandler using below pattern.
> > > > >
> > > > > from(customString)
> > > > >     .errorHandler(new RetrieveCustomErrorHandler())
> > > > >     .convertBodyTo(CustomRetrieve.class)
> > > > >     .setProperty(JAXWS_METHOD_NAME_PROPERTY, constant("Retrieve"))
> > > > >     .to("direct:customEntryPoint")
> > > > >     .routeId(Routes.CUSTOM_RETRIEVE.getRouteId());
> > > > >
> > > > > Earlier I used to implements ErrorHandlerFactory for
> > > > > RetrieveCustomErrorHandler and use to override createErrorHandler()
> > > > > method to return Processor Object.
> > > > >
> > > > > Now with the latest version of Camel, I just wanted to understand the
> > > > > new mechanism of doing the same.
> > > > > With the new ErrorHandlerFactory interface I am getting new methods
> > > named
> > > > > as
> > > > >
> > > > > public ErrorHandlerFactory cloneBuilder()
> > > > >
> > > > > public boolean supportTransacted()
> > > > >
> > > > > Any suggestions/help will be appreciated.
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Regards,
> > > > > Kushagra
> > > > >
> > > >
> > > >
> > > > --
> > > > Claus Ibsen
> > > > -----------------
> > > > @davsclaus
> > > > Camel in Action 2: https://www.manning.com/ibsen2
> > >
> > >
> > >
> > > --
> > > Regards,
> > > Kushagra
> > >
> >
> >
> > --
> > Claus Ibsen
> > -----------------
> > @davsclaus
> > Camel in Action 2: https://www.manning.com/ibsen2
>
>
>
> --
> Regards,
> Kushagra



-- 
Regards,
Kushagra

Re: Upgrade to Camel Version Set ErrorHandler

Posted by Kushagra Bindal <bi...@gmail.com>.
Do you have any handy sample with you which I can refer to for this case?

On Thu, Aug 10, 2023 at 2:34 PM Claus Ibsen <cl...@gmail.com> wrote:
>
> Hi
>
> Read the javadoc of those methods what they do and just implement what you
> need - its in the name also - supportsTransaction etc.
>
> On Thu, Aug 10, 2023 at 10:29 AM Kushagra Bindal <bi...@gmail.com>
> wrote:
>
> > Earlier the usage was to be like that as I mentioned here... We
> > usually checked on AsyncCallback and reacted accordingly.
> >
> >
> > @Override
> > public Processor createErrorHandler(RouteContext routeContext,
> > Processor processor) {
> >     return new DelegateAsyncProcessor(processor) {
> >         @Override
> >         public boolean process(final Exchange exchange, final
> > AsyncCallback callback) {
> >             return super.process(exchange, new AsyncCallback() {
> >                 @Override
> >                 public void done(boolean doneSync) {
> >                     exchange.removeProperty(Exchange.REDELIVERY_EXHAUSTED);
> >                     callback.done(doneSync);
> >                     if (exchange.getException() != null) {
> >                         LOGGER.info("End retrieving custom data : ["
> >
> > .concat(exchange.getProperty(ExchangeProperties.CUSTOM_DATA,
> > String.class))
> >                                 .concat("] - result : NO:
> > ").concat(exchange.getException().getMessage()));
> >                     }
> >                 }
> >             });
> >         }
> >
> > Please suggest if there is some alternative way of achieving the same.
> >
> > On Thu, Aug 10, 2023 at 1:44 PM Claus Ibsen <cl...@gmail.com> wrote:
> > >
> > > Why are you creating your own error handler implementation at all? What
> > is
> > > special about it
> > >
> > > On Thu, Aug 10, 2023 at 10:05 AM Kushagra Bindal <
> > bindal.kushagra@gmail.com>
> > > wrote:
> > >
> > > > Hi,
> > > >
> > > > I am trying to upgrade my camel version from 2.25.4 to 4.0.0.M3.
> > > >
> > > > Earlier I use to set ErrorHandler using below pattern.
> > > >
> > > > from(customString)
> > > >     .errorHandler(new RetrieveCustomErrorHandler())
> > > >     .convertBodyTo(CustomRetrieve.class)
> > > >     .setProperty(JAXWS_METHOD_NAME_PROPERTY, constant("Retrieve"))
> > > >     .to("direct:customEntryPoint")
> > > >     .routeId(Routes.CUSTOM_RETRIEVE.getRouteId());
> > > >
> > > > Earlier I used to implements ErrorHandlerFactory for
> > > > RetrieveCustomErrorHandler and use to override createErrorHandler()
> > > > method to return Processor Object.
> > > >
> > > > Now with the latest version of Camel, I just wanted to understand the
> > > > new mechanism of doing the same.
> > > > With the new ErrorHandlerFactory interface I am getting new methods
> > named
> > > > as
> > > >
> > > > public ErrorHandlerFactory cloneBuilder()
> > > >
> > > > public boolean supportTransacted()
> > > >
> > > > Any suggestions/help will be appreciated.
> > > >
> > > >
> > > >
> > > > --
> > > > Regards,
> > > > Kushagra
> > > >
> > >
> > >
> > > --
> > > Claus Ibsen
> > > -----------------
> > > @davsclaus
> > > Camel in Action 2: https://www.manning.com/ibsen2
> >
> >
> >
> > --
> > Regards,
> > Kushagra
> >
>
>
> --
> Claus Ibsen
> -----------------
> @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2



-- 
Regards,
Kushagra

Re: Upgrade to Camel Version Set ErrorHandler

Posted by Claus Ibsen <cl...@gmail.com>.
Hi

Read the javadoc of those methods what they do and just implement what you
need - its in the name also - supportsTransaction etc.

On Thu, Aug 10, 2023 at 10:29 AM Kushagra Bindal <bi...@gmail.com>
wrote:

> Earlier the usage was to be like that as I mentioned here... We
> usually checked on AsyncCallback and reacted accordingly.
>
>
> @Override
> public Processor createErrorHandler(RouteContext routeContext,
> Processor processor) {
>     return new DelegateAsyncProcessor(processor) {
>         @Override
>         public boolean process(final Exchange exchange, final
> AsyncCallback callback) {
>             return super.process(exchange, new AsyncCallback() {
>                 @Override
>                 public void done(boolean doneSync) {
>                     exchange.removeProperty(Exchange.REDELIVERY_EXHAUSTED);
>                     callback.done(doneSync);
>                     if (exchange.getException() != null) {
>                         LOGGER.info("End retrieving custom data : ["
>
> .concat(exchange.getProperty(ExchangeProperties.CUSTOM_DATA,
> String.class))
>                                 .concat("] - result : NO:
> ").concat(exchange.getException().getMessage()));
>                     }
>                 }
>             });
>         }
>
> Please suggest if there is some alternative way of achieving the same.
>
> On Thu, Aug 10, 2023 at 1:44 PM Claus Ibsen <cl...@gmail.com> wrote:
> >
> > Why are you creating your own error handler implementation at all? What
> is
> > special about it
> >
> > On Thu, Aug 10, 2023 at 10:05 AM Kushagra Bindal <
> bindal.kushagra@gmail.com>
> > wrote:
> >
> > > Hi,
> > >
> > > I am trying to upgrade my camel version from 2.25.4 to 4.0.0.M3.
> > >
> > > Earlier I use to set ErrorHandler using below pattern.
> > >
> > > from(customString)
> > >     .errorHandler(new RetrieveCustomErrorHandler())
> > >     .convertBodyTo(CustomRetrieve.class)
> > >     .setProperty(JAXWS_METHOD_NAME_PROPERTY, constant("Retrieve"))
> > >     .to("direct:customEntryPoint")
> > >     .routeId(Routes.CUSTOM_RETRIEVE.getRouteId());
> > >
> > > Earlier I used to implements ErrorHandlerFactory for
> > > RetrieveCustomErrorHandler and use to override createErrorHandler()
> > > method to return Processor Object.
> > >
> > > Now with the latest version of Camel, I just wanted to understand the
> > > new mechanism of doing the same.
> > > With the new ErrorHandlerFactory interface I am getting new methods
> named
> > > as
> > >
> > > public ErrorHandlerFactory cloneBuilder()
> > >
> > > public boolean supportTransacted()
> > >
> > > Any suggestions/help will be appreciated.
> > >
> > >
> > >
> > > --
> > > Regards,
> > > Kushagra
> > >
> >
> >
> > --
> > Claus Ibsen
> > -----------------
> > @davsclaus
> > Camel in Action 2: https://www.manning.com/ibsen2
>
>
>
> --
> Regards,
> Kushagra
>


-- 
Claus Ibsen
-----------------
@davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Re: Upgrade to Camel Version Set ErrorHandler

Posted by Kushagra Bindal <bi...@gmail.com>.
Earlier the usage was to be like that as I mentioned here... We
usually checked on AsyncCallback and reacted accordingly.


@Override
public Processor createErrorHandler(RouteContext routeContext,
Processor processor) {
    return new DelegateAsyncProcessor(processor) {
        @Override
        public boolean process(final Exchange exchange, final
AsyncCallback callback) {
            return super.process(exchange, new AsyncCallback() {
                @Override
                public void done(boolean doneSync) {
                    exchange.removeProperty(Exchange.REDELIVERY_EXHAUSTED);
                    callback.done(doneSync);
                    if (exchange.getException() != null) {
                        LOGGER.info("End retrieving custom data : ["

.concat(exchange.getProperty(ExchangeProperties.CUSTOM_DATA,
String.class))
                                .concat("] - result : NO:
").concat(exchange.getException().getMessage()));
                    }
                }
            });
        }

Please suggest if there is some alternative way of achieving the same.

On Thu, Aug 10, 2023 at 1:44 PM Claus Ibsen <cl...@gmail.com> wrote:
>
> Why are you creating your own error handler implementation at all? What is
> special about it
>
> On Thu, Aug 10, 2023 at 10:05 AM Kushagra Bindal <bi...@gmail.com>
> wrote:
>
> > Hi,
> >
> > I am trying to upgrade my camel version from 2.25.4 to 4.0.0.M3.
> >
> > Earlier I use to set ErrorHandler using below pattern.
> >
> > from(customString)
> >     .errorHandler(new RetrieveCustomErrorHandler())
> >     .convertBodyTo(CustomRetrieve.class)
> >     .setProperty(JAXWS_METHOD_NAME_PROPERTY, constant("Retrieve"))
> >     .to("direct:customEntryPoint")
> >     .routeId(Routes.CUSTOM_RETRIEVE.getRouteId());
> >
> > Earlier I used to implements ErrorHandlerFactory for
> > RetrieveCustomErrorHandler and use to override createErrorHandler()
> > method to return Processor Object.
> >
> > Now with the latest version of Camel, I just wanted to understand the
> > new mechanism of doing the same.
> > With the new ErrorHandlerFactory interface I am getting new methods named
> > as
> >
> > public ErrorHandlerFactory cloneBuilder()
> >
> > public boolean supportTransacted()
> >
> > Any suggestions/help will be appreciated.
> >
> >
> >
> > --
> > Regards,
> > Kushagra
> >
>
>
> --
> Claus Ibsen
> -----------------
> @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2



-- 
Regards,
Kushagra

Re: Upgrade to Camel Version Set ErrorHandler

Posted by Claus Ibsen <cl...@gmail.com>.
Why are you creating your own error handler implementation at all? What is
special about it

On Thu, Aug 10, 2023 at 10:05 AM Kushagra Bindal <bi...@gmail.com>
wrote:

> Hi,
>
> I am trying to upgrade my camel version from 2.25.4 to 4.0.0.M3.
>
> Earlier I use to set ErrorHandler using below pattern.
>
> from(customString)
>     .errorHandler(new RetrieveCustomErrorHandler())
>     .convertBodyTo(CustomRetrieve.class)
>     .setProperty(JAXWS_METHOD_NAME_PROPERTY, constant("Retrieve"))
>     .to("direct:customEntryPoint")
>     .routeId(Routes.CUSTOM_RETRIEVE.getRouteId());
>
> Earlier I used to implements ErrorHandlerFactory for
> RetrieveCustomErrorHandler and use to override createErrorHandler()
> method to return Processor Object.
>
> Now with the latest version of Camel, I just wanted to understand the
> new mechanism of doing the same.
> With the new ErrorHandlerFactory interface I am getting new methods named
> as
>
> public ErrorHandlerFactory cloneBuilder()
>
> public boolean supportTransacted()
>
> Any suggestions/help will be appreciated.
>
>
>
> --
> Regards,
> Kushagra
>


-- 
Claus Ibsen
-----------------
@davsclaus
Camel in Action 2: https://www.manning.com/ibsen2