You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by "Snaith, Douglas" <do...@baesystems.com.INVALID> on 2021/06/18 09:41:53 UTC

help with issue required. Camel 3.7.3

I need some help with a Camel issue.

To summarise my issue, we have upgraded from Camel 2.16.2 to 3.7.3 and in our route xml the <split> no longer works.

The object (xx.ObjectListDto) we are trying to split looks like this --->

private static final long serialVersionUID = 2947839802965876099L;

@NotNull
@Valid
@Size(min = 1)
private List<T> scheduledServices;

public List<T> getScheduledServices()
{
    return this.scheduledServices;
}

public void setScheduledServices(final List<T> scheduledServices)
{
    this.scheduledServices = scheduledServices;
}


and the route looks like this --->


<policy ref="transactedRequiredMast">
    <split stopOnException="true" parallelProcessing="true">
        <simple>${body?.scheduledServices}</simple>
        <to uri="bean:aBean?method=aMethod(${header.assetId}, ${body.id})"/>
        <to uri="bean:bBean?method=bMethod(${header.assetId}, ${body}, true)"/>
    </split>
</policy>

The stacktrace looks like this ---->

the [xx.ObjectDO] entity was modified, but it won't be updated because the property is immutable.
2021-06-16 14:08:58  DEBUG c.b.a.lr [Camel (mastContext) thread #16 - Split] MY MESSAGE THREE SIMPLE !!! xx.ObjectListDto@437deb5f<ma...@437deb5f>
2021-06-16 14:08:58  DEBUG c.b.a.lr [Camel (mastContext) thread #17 - Split] MY MESSAGE THREE SIMPLE !!!  xx.ObjectListDto @437deb5f<ma...@437deb5f>
2021-06-16 14:08:58  DEBUG c.b.a.lr [Camel (mastContext) thread #17 - Split] MY MESSAGE FOUR SIMPLE !!! [ObjectDto id = 7093572, ScheduledServiceDto id = 7093572]
2021-06-16 14:08:58  DEBUG c.b.a.lr [Camel (mastContext) thread #16 - Split] MY MESSAGE FOUR SIMPLE !!! [ObjectDto id = 7093572, ObjectDto id = 7093572]
14:08:58.510 [Camel (mastContext) thread #16 - Split] ERROR org.apache.camel.processor.errorhandler.DeadLetterChannel - Failed delivery for (MessageId: EBC43AF779EE625-000000000000000C on ExchangeId: EBC43AF779EE625-000000000000000C). Exhausted after delivery attempt: 1 caught: org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to invoke method: id on null due to: org.apache.camel.component.bean.MethodNotFoundException: Method with name: id not found on bean:  xx.ObjectListDto @437deb5f<ma...@437deb5f> of type: xx.ObjectListDto on the exchange: Exchange[EBC43AF779EE625-000000000000000C]. Processed by failure processor: FatalFallbackErrorHandler[Channel[stop1]]

Message History (complete message history is disabled)
---------------------------------------------------------------------------------------------------------------------------------------
RouteId              ProcessorId          Processor                                                                        Elapsed (ms)
[route56           ] [route56           ] [from[servlet:/asset/%7BassetId%7D/service?httpMethodRestrict=POST]            ] [      4130]

Stacktrace
---------------------------------------------------------------------------------------------------------------------------------------

org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to invoke method: id on null due to: org.apache.camel.component.bean.MethodNotFoundException: Method with name: id not found on bean:  xx.ObjectListDto @437deb5f<ma...@437deb5f> of type: xx.ObjectListDto on the exchange: Exchange[EBC43AF779EE625-000000000000000C]
        at org.apache.camel.language.bean.BeanExpression.invokeOgnlMethod(BeanExpression.java:453) ~[camel-bean-3.7.3.jar:3.7.3]
        at org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:199) ~[camel-bean-3.7.3.jar:3.7.3]
        at org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:214) ~[camel-bean-3.7.3.jar:3.7.3]
        at org.apache.camel.language.simple.SimpleExpressionBuilder$28.evaluate(SimpleExpressionBuilder.java:756) ~[camel-core-languages-3.7.3.jar:3.7.3]


It seems the splitter can no longer pull the list out of the body object (xx.ObjectListDto). And thus the method (id) on the list object, which is expected to be in body but isn't, is unrecognised. Note also that although the body is not being set correctly by <split>, it does recognise that there are 2 elements in the list and thus attempts to process body.id twice. Very strange.
Note that in our splitter, we have tried:
body?.scheduledServices
body.scheduledServices
body.getScheduledServices
none of which work.

In our previous system config, the split did work.

Previous config
hibernate 5.0.3
Spring-data 1.9.2.RELEASE
Javassist 3.19.0-GA
Camel 2.16.2
Spring 4.2.2.RELEASE
Jackson 2.6.5
Spring-security - N/A

Current config
hibernate 5.4.28
Spring-data 2.3.7.RELEASE
Javassist 3.27.0-GA
Camel 3.7.3
Spring 5.2.13.RELEASE
Jackson 2.12.3
Spring-security - 5.4.5


Any asisstance on this would be hugely appreciated.

Doug Snaith.

__________________________
Doug Snaith
Software Engineer
Applied Intelligence
Leeds Valley Business Park

Douglas.snaith@baesystems.com<ma...@baesystems.com>
07984 867940
0113 330 158 0801



__________________________
Doug Snaith
Software Engineer
Applied Intelligence
Leeds Valley Business Park

Douglas.snaith@baesystems.com<ma...@baesystems.com>
07984 867940
0113 330 158 0801

=================================
Advance Notice of Annual Leave

BAE Systems will collect and process information about you that may be subject to data protection laws. For more information about how we use and disclose your personal information, how we protect your information, our legal basis to use your information, your rights and who you can contact, please refer to the relevant sections of our Privacy note at www.baesystems.com/en/cybersecurity/privacy <http://www.baesystems.com/en/cybersecurity/privacy>

Please consider the environment before printing this email. This message should be regarded as confidential. If you have received this email in error please notify the sender and destroy it immediately. Statements of intent shall only become binding when confirmed in hard copy by an authorised signatory. The contents of this email may relate to dealings with other companies under the control of BAE Systems PLC, details of which can be found at http://www.baesystems.com/Businesses/index.htm.

Re: help with issue required. Camel 3.7.3

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

See the unit tests from camel-spring-xml such as
https://github.com/apache/camel/blob/main/components/camel-spring-xml/src/test/resources/org/apache/camel/spring/processor/SpringMethodCallTest.xml

You can do a git grep from the source code
git grep "<method\>"


On Mon, Jun 21, 2021 at 10:27 AM Snaith, Douglas
<do...@baesystems.com> wrote:
>
> Hi Claus,
>
> Thanks for your suggestions. Unfortunately, neither upgrading to Camel 3.10.0 nor changing the body statement worked.
>
> I think I need to go down the route of using a bean to extract the list from my object.
>
> However, all our camel config is in XML, and I haven't been able to find an example anywhere on Google of how to do what I need to do....
>
> Ie. Something along the lines of
> <split>
> <method>" a method on a bean somewhere"</method>
> </split>
>
> Do you have any examples how to do this in camel XML config?
> Also, how should I set my Java bean up? What annotation is required?
>
> Thanks in advance
> Doug Snaith.
>
> -----Original Message-----
> From: Claus Ibsen <cl...@gmail.com>
> Sent: 18 June 2021 11:51
> To: users@camel.apache.org
> Subject: Re: help with issue required. Camel 3.7.3
>
> -----------------------------  PHISHING ALERT  ----------------------------- This email has been sent from an account outside of the BAE Systems network.
>
> Be aware that this could be a phishing attempt. For more guidance, search "phishing email" on Connect. If you think this is a phishing email report it using the "PhishMe" button on Outlook.
> ------------------------------------------------------------------------------------
>
> Hi
>
> Try with Camel 3.10.0, and if still a problem, then it would help if you put together a reproducer project, eg a small sample project that shows this problem for you, then we can take a look at that.
>
> Also try with
>
> body.getScheduledServices()
>
> And you can always instead of simple use a bean or processor to prepare the message body for splitting
>
> On Fri, Jun 18, 2021 at 11:42 AM Snaith, Douglas <do...@baesystems.com.invalid> wrote:
> >
> > I need some help with a Camel issue.
> >
> > To summarise my issue, we have upgraded from Camel 2.16.2 to 3.7.3 and in our route xml the <split> no longer works.
> >
> > The object (xx.ObjectListDto) we are trying to split looks like this
> > --->
> >
> > private static final long serialVersionUID = 2947839802965876099L;
> >
> > @NotNull
> > @Valid
> > @Size(min = 1)
> > private List<T> scheduledServices;
> >
> > public List<T> getScheduledServices()
> > {
> >     return this.scheduledServices;
> > }
> >
> > public void setScheduledServices(final List<T> scheduledServices) {
> >     this.scheduledServices = scheduledServices; }
> >
> >
> > and the route looks like this --->
> >
> >
> > <policy ref="transactedRequiredMast">
> >     <split stopOnException="true" parallelProcessing="true">
> >         <simple>${body?.scheduledServices}</simple>
> >         <to uri="bean:aBean?method=aMethod(${header.assetId}, ${body.id})"/>
> >         <to uri="bean:bBean?method=bMethod(${header.assetId}, ${body}, true)"/>
> >     </split>
> > </policy>
> >
> > The stacktrace looks like this ---->
> >
> > the [xx.ObjectDO] entity was modified, but it won't be updated because the property is immutable.
> > 2021-06-16 14:08:58  DEBUG c.b.a.lr [Camel (mastContext) thread #16 -
> > Split] MY MESSAGE THREE SIMPLE !!!
> > xx.ObjectListDto@437deb5f<ma...@437deb5f>
> > 2021-06-16 14:08:58  DEBUG c.b.a.lr [Camel (mastContext) thread #17 -
> > Split] MY MESSAGE THREE SIMPLE !!!  xx.ObjectListDto
> > @437deb5f<mailto:com.baesystems.ai.lr.dto.services.ScheduledServiceLis
> > tDto@437deb5f>
> > 2021-06-16 14:08:58  DEBUG c.b.a.lr [Camel (mastContext) thread #17 -
> > Split] MY MESSAGE FOUR SIMPLE !!! [ObjectDto id = 7093572,
> > ScheduledServiceDto id = 7093572]
> > 2021-06-16 14:08:58  DEBUG c.b.a.lr [Camel (mastContext) thread #16 -
> > Split] MY MESSAGE FOUR SIMPLE !!! [ObjectDto id = 7093572, ObjectDto
> > id = 7093572]
> > 14:08:58.510 [Camel (mastContext) thread #16 - Split] ERROR
> > org.apache.camel.processor.errorhandler.DeadLetterChannel - Failed
> > delivery for (MessageId: EBC43AF779EE625-000000000000000C on
> > ExchangeId: EBC43AF779EE625-000000000000000C). Exhausted after
> > delivery attempt: 1 caught:
> > org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed
> > to invoke method: id on null due to:
> > org.apache.camel.component.bean.MethodNotFoundException: Method with
> > name: id not found on bean:  xx.ObjectListDto
> > @437deb5f<mailto:com.baesystems.ai.lr.dto.services.ScheduledServiceLis
> > tDto@437deb5f> of type: xx.ObjectListDto on the exchange:
> > Exchange[EBC43AF779EE625-000000000000000C]. Processed by failure
> > processor: FatalFallbackErrorHandler[Channel[stop1]]
> >
> > Message History (complete message history is disabled)
> > ---------------------------------------------------------------------------------------------------------------------------------------
> > RouteId              ProcessorId          Processor                                                                        Elapsed (ms)
> > [route56           ] [route56           ] [from[servlet:/asset/%7BassetId%7D/service?httpMethodRestrict=POST]            ] [      4130]
> >
> > Stacktrace
> > ----------------------------------------------------------------------
> > -----------------------------------------------------------------
> >
> > org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to invoke method: id on null due to: org.apache.camel.component.bean.MethodNotFoundException: Method with name: id not found on bean:  xx.ObjectListDto @437deb5f<ma...@437deb5f> of type: xx.ObjectListDto on the exchange: Exchange[EBC43AF779EE625-000000000000000C]
> >         at org.apache.camel.language.bean.BeanExpression.invokeOgnlMethod(BeanExpression.java:453) ~[camel-bean-3.7.3.jar:3.7.3]
> >         at org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:199) ~[camel-bean-3.7.3.jar:3.7.3]
> >         at org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:214) ~[camel-bean-3.7.3.jar:3.7.3]
> >         at
> > org.apache.camel.language.simple.SimpleExpressionBuilder$28.evaluate(S
> > impleExpressionBuilder.java:756)
> > ~[camel-core-languages-3.7.3.jar:3.7.3]
> >
> >
> > It seems the splitter can no longer pull the list out of the body object (xx.ObjectListDto). And thus the method (id) on the list object, which is expected to be in body but isn't, is unrecognised. Note also that although the body is not being set correctly by <split>, it does recognise that there are 2 elements in the list and thus attempts to process body.id twice. Very strange.
> > Note that in our splitter, we have tried:
> > body?.scheduledServices
> > body.scheduledServices
> > body.getScheduledServices
> > none of which work.
> >
> > In our previous system config, the split did work.
> >
> > Previous config
> > hibernate 5.0.3
> > Spring-data 1.9.2.RELEASE
> > Javassist 3.19.0-GA
> > Camel 2.16.2
> > Spring 4.2.2.RELEASE
> > Jackson 2.6.5
> > Spring-security - N/A
> >
> > Current config
> > hibernate 5.4.28
> > Spring-data 2.3.7.RELEASE
> > Javassist 3.27.0-GA
> > Camel 3.7.3
> > Spring 5.2.13.RELEASE
> > Jackson 2.12.3
> > Spring-security - 5.4.5
> >
> >
> > Any asisstance on this would be hugely appreciated.
> >
> > Doug Snaith.
> >
> > __________________________
> > Doug Snaith
> > Software Engineer
> > Applied Intelligence
> > Leeds Valley Business Park
> >
> > Douglas.snaith@baesystems.com<ma...@baesystems.com>
> > 07984 867940
> > 0113 330 158 0801
> >
> >
> >
> > __________________________
> > Doug Snaith
> > Software Engineer
> > Applied Intelligence
> > Leeds Valley Business Park
> >
> > Douglas.snaith@baesystems.com<ma...@baesystems.com>
> > 07984 867940
> > 0113 330 158 0801
> >
> > =================================
> > Advance Notice of Annual Leave
> >
> > BAE Systems will collect and process information about you that may be
> > subject to data protection laws. For more information about how we use
> > and disclose your personal information, how we protect your
> > information, our legal basis to use your information, your rights and
> > who you can contact, please refer to the relevant sections of our
> > Privacy note at www.baesystems.com/en/cybersecurity/privacy
> > <http://www.baesystems.com/en/cybersecurity/privacy>
> >
> > Please consider the environment before printing this email. This message should be regarded as confidential. If you have received this email in error please notify the sender and destroy it immediately. Statements of intent shall only become binding when confirmed in hard copy by an authorised signatory. The contents of this email may relate to dealings with other companies under the control of BAE Systems PLC, details of which can be found at http://www.baesystems.com/Businesses/index.htm.
>
>
>
> --
> Claus Ibsen
> -----------------
> http://davsclaus.com @davsclaus Camel in Action 2: https://www.manning.com/ibsen2
> BAE Systems will collect and process information about you that may be subject to data protection laws. For more information about how we use and disclose your personal information, how we protect your information, our legal basis to use your information, your rights and who you can contact, please refer to the relevant sections of our Privacy note at www.baesystems.com/en/cybersecurity/privacy <http://www.baesystems.com/en/cybersecurity/privacy>
>
> Please consider the environment before printing this email. This message should be regarded as confidential. If you have received this email in error please notify the sender and destroy it immediately. Statements of intent shall only become binding when confirmed in hard copy by an authorised signatory. The contents of this email may relate to dealings with other companies under the control of BAE Systems PLC, details of which can be found at http://www.baesystems.com/Businesses/index.htm.



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

Re: help with issue required. Camel 3.7.3

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

Try with Camel 3.10.0, and if still a problem, then it would help if
you put together a reproducer project, eg a small sample project that
shows this problem for you, then we can take a look at that.

Also try with

body.getScheduledServices()

And you can always instead of simple use a bean or processor to
prepare the message body for splitting

On Fri, Jun 18, 2021 at 11:42 AM Snaith, Douglas
<do...@baesystems.com.invalid> wrote:
>
> I need some help with a Camel issue.
>
> To summarise my issue, we have upgraded from Camel 2.16.2 to 3.7.3 and in our route xml the <split> no longer works.
>
> The object (xx.ObjectListDto) we are trying to split looks like this --->
>
> private static final long serialVersionUID = 2947839802965876099L;
>
> @NotNull
> @Valid
> @Size(min = 1)
> private List<T> scheduledServices;
>
> public List<T> getScheduledServices()
> {
>     return this.scheduledServices;
> }
>
> public void setScheduledServices(final List<T> scheduledServices)
> {
>     this.scheduledServices = scheduledServices;
> }
>
>
> and the route looks like this --->
>
>
> <policy ref="transactedRequiredMast">
>     <split stopOnException="true" parallelProcessing="true">
>         <simple>${body?.scheduledServices}</simple>
>         <to uri="bean:aBean?method=aMethod(${header.assetId}, ${body.id})"/>
>         <to uri="bean:bBean?method=bMethod(${header.assetId}, ${body}, true)"/>
>     </split>
> </policy>
>
> The stacktrace looks like this ---->
>
> the [xx.ObjectDO] entity was modified, but it won't be updated because the property is immutable.
> 2021-06-16 14:08:58  DEBUG c.b.a.lr [Camel (mastContext) thread #16 - Split] MY MESSAGE THREE SIMPLE !!! xx.ObjectListDto@437deb5f<ma...@437deb5f>
> 2021-06-16 14:08:58  DEBUG c.b.a.lr [Camel (mastContext) thread #17 - Split] MY MESSAGE THREE SIMPLE !!!  xx.ObjectListDto @437deb5f<ma...@437deb5f>
> 2021-06-16 14:08:58  DEBUG c.b.a.lr [Camel (mastContext) thread #17 - Split] MY MESSAGE FOUR SIMPLE !!! [ObjectDto id = 7093572, ScheduledServiceDto id = 7093572]
> 2021-06-16 14:08:58  DEBUG c.b.a.lr [Camel (mastContext) thread #16 - Split] MY MESSAGE FOUR SIMPLE !!! [ObjectDto id = 7093572, ObjectDto id = 7093572]
> 14:08:58.510 [Camel (mastContext) thread #16 - Split] ERROR org.apache.camel.processor.errorhandler.DeadLetterChannel - Failed delivery for (MessageId: EBC43AF779EE625-000000000000000C on ExchangeId: EBC43AF779EE625-000000000000000C). Exhausted after delivery attempt: 1 caught: org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to invoke method: id on null due to: org.apache.camel.component.bean.MethodNotFoundException: Method with name: id not found on bean:  xx.ObjectListDto @437deb5f<ma...@437deb5f> of type: xx.ObjectListDto on the exchange: Exchange[EBC43AF779EE625-000000000000000C]. Processed by failure processor: FatalFallbackErrorHandler[Channel[stop1]]
>
> Message History (complete message history is disabled)
> ---------------------------------------------------------------------------------------------------------------------------------------
> RouteId              ProcessorId          Processor                                                                        Elapsed (ms)
> [route56           ] [route56           ] [from[servlet:/asset/%7BassetId%7D/service?httpMethodRestrict=POST]            ] [      4130]
>
> Stacktrace
> ---------------------------------------------------------------------------------------------------------------------------------------
>
> org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to invoke method: id on null due to: org.apache.camel.component.bean.MethodNotFoundException: Method with name: id not found on bean:  xx.ObjectListDto @437deb5f<ma...@437deb5f> of type: xx.ObjectListDto on the exchange: Exchange[EBC43AF779EE625-000000000000000C]
>         at org.apache.camel.language.bean.BeanExpression.invokeOgnlMethod(BeanExpression.java:453) ~[camel-bean-3.7.3.jar:3.7.3]
>         at org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:199) ~[camel-bean-3.7.3.jar:3.7.3]
>         at org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:214) ~[camel-bean-3.7.3.jar:3.7.3]
>         at org.apache.camel.language.simple.SimpleExpressionBuilder$28.evaluate(SimpleExpressionBuilder.java:756) ~[camel-core-languages-3.7.3.jar:3.7.3]
>
>
> It seems the splitter can no longer pull the list out of the body object (xx.ObjectListDto). And thus the method (id) on the list object, which is expected to be in body but isn't, is unrecognised. Note also that although the body is not being set correctly by <split>, it does recognise that there are 2 elements in the list and thus attempts to process body.id twice. Very strange.
> Note that in our splitter, we have tried:
> body?.scheduledServices
> body.scheduledServices
> body.getScheduledServices
> none of which work.
>
> In our previous system config, the split did work.
>
> Previous config
> hibernate 5.0.3
> Spring-data 1.9.2.RELEASE
> Javassist 3.19.0-GA
> Camel 2.16.2
> Spring 4.2.2.RELEASE
> Jackson 2.6.5
> Spring-security - N/A
>
> Current config
> hibernate 5.4.28
> Spring-data 2.3.7.RELEASE
> Javassist 3.27.0-GA
> Camel 3.7.3
> Spring 5.2.13.RELEASE
> Jackson 2.12.3
> Spring-security - 5.4.5
>
>
> Any asisstance on this would be hugely appreciated.
>
> Doug Snaith.
>
> __________________________
> Doug Snaith
> Software Engineer
> Applied Intelligence
> Leeds Valley Business Park
>
> Douglas.snaith@baesystems.com<ma...@baesystems.com>
> 07984 867940
> 0113 330 158 0801
>
>
>
> __________________________
> Doug Snaith
> Software Engineer
> Applied Intelligence
> Leeds Valley Business Park
>
> Douglas.snaith@baesystems.com<ma...@baesystems.com>
> 07984 867940
> 0113 330 158 0801
>
> =================================
> Advance Notice of Annual Leave
>
> BAE Systems will collect and process information about you that may be subject to data protection laws. For more information about how we use and disclose your personal information, how we protect your information, our legal basis to use your information, your rights and who you can contact, please refer to the relevant sections of our Privacy note at www.baesystems.com/en/cybersecurity/privacy <http://www.baesystems.com/en/cybersecurity/privacy>
>
> Please consider the environment before printing this email. This message should be regarded as confidential. If you have received this email in error please notify the sender and destroy it immediately. Statements of intent shall only become binding when confirmed in hard copy by an authorised signatory. The contents of this email may relate to dealings with other companies under the control of BAE Systems PLC, details of which can be found at http://www.baesystems.com/Businesses/index.htm.



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