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<mailto:xx.ObjectListDto@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.ScheduledServiceListDto@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.ScheduledServiceListDto@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<mailto:com.baesystems.ai.lr.dto.services.ScheduledServiceListDto@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
[email protected]<mailto:[email protected]>
07984 867940
0113 330 158 0801
__________________________
Doug Snaith
Software Engineer
Applied Intelligence
Leeds Valley Business Park
[email protected]<mailto:[email protected]>
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.