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 <[email protected]> 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<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. -- Claus Ibsen ----------------- http://davsclaus.com @davsclaus Camel in Action 2: https://www.manning.com/ibsen2
