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.

Reply via email to