Try enabling stream caching, or convert the payload to String after the CXF call.
On Wed, Jul 13, 2016 at 3:06 PM, El Bennitto <david.benni...@metapack.com> wrote: > In our route we receive a response from a web service and then split the > response using XPATH. In each split route we transform the XML before > posting it off to another web service. We are not setting any additional > configurations on the XSLT URI other than saxon=true. > > Eg:- > .... > > from("direct:mainRoute") > .to("cxf://http://first-webservice.com...") > > .split(namespaces.xpath("/xpath/expression")).parallelProcessing(true) > .to("direct:splitRoute") > .end() > .end(); > > from("direct:splitRoute") > .to("xslt:/xslt/stylesheet.xsl?saxon=true") > .to(cxf://http://second-webservice.com...") > .end(); > > Running this single threaded works fine but when we set the split to run in > parrallel we get unexpected results from the XSLT transformations:- > > > <custom5 > xsi:nil="true"/>SKU10.00009443122false1DIRECT_SALE4vt-bt45-5bt45Moleskin > Slippersfanny.valette@france.com04707509500.00000.00000.00000.00000.00000.0000Ship7ParisLondonfalse0<custom7 > xsi:nil="true"/> > <custom8 xsi:nil="true"/> > > Where the XSLT is :- > <xsl:template > match="q1:ShoppingCart/q1:LineItemSKUList/q1:OrderLineItemItem" > mode="salesSourceId"> > <xsl:if test="position() < 2"> > <custom6><xsl:value-of select="q1:SalesSourceID" /></custom6> > </xsl:if> > </xsl:template> > > If I remove the above XSLT then we don't get any issues but I am concerned > that this is just curing the symptom and not the cause. > It looks like it is merging data from two different split responses as > London is only in one reponse and some of the other information > (fanny.vale...@france.com) is from another. > > > Sometimes we also get a NullPointerException:- > > Error processing route: org.apache.camel.TypeConversionException: Error > during type conversion from type: java.lang.String to the required type: > java.lang.String with value [OrderResponseItem: null] due > java.lang.NullPointerException > at > org.apache.camel.impl.converter.BaseTypeConverterRegistry.createTypeConversionException(BaseTypeConverterRegistry.java:629) > at > org.apache.camel.impl.converter.BaseTypeConverterRegistry.convertTo(BaseTypeConverterRegistry.java:150) > at > org.apache.camel.support.ExpressionAdapter.evaluate(ExpressionAdapter.java:41) > at > org.apache.camel.builder.ExpressionBuilder$64.evaluate(ExpressionBuilder.java:1533) > at > org.apache.camel.support.ExpressionAdapter.evaluate(ExpressionAdapter.java:36) > at > org.apache.camel.processor.LogProcessor.process(LogProcessor.java:53) > at > org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:468) > at > org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190) > at org.apache.camel.processor.Pipeline.process(Pipeline.java:121) > at org.apache.camel.processor.Pipeline.process(Pipeline.java:83) > at > org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190) > at > org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:62) > at > org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145) > at > org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:468) > at > org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190) > at > org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:468) > at > org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190) > at > org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109) > at > org.apache.camel.processor.MulticastProcessor.doProcessParallel(MulticastProcessor.java:827) > at > org.apache.camel.processor.MulticastProcessor.access$200(MulticastProcessor.java:85) > at > org.apache.camel.processor.MulticastProcessor$1.call(MulticastProcessor.java:320) > at > org.apache.camel.processor.MulticastProcessor$1.call(MulticastProcessor.java:305) > at java.util.concurrent.FutureTask.run(FutureTask.java:266) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > at java.lang.Thread.run(Thread.java:745) > Caused by: org.apache.camel.RuntimeCamelException: > java.lang.NullPointerException > at > org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1690) > at > org.apache.camel.util.ObjectHelper.invokeMethod(ObjectHelper.java:1285) > at > org.apache.camel.impl.converter.InstanceMethodTypeConverter.convertTo(InstanceMethodTypeConverter.java:78) > at > org.apache.camel.impl.converter.BaseTypeConverterRegistry.doConvertTo(BaseTypeConverterRegistry.java:306) > at > org.apache.camel.impl.converter.BaseTypeConverterRegistry.convertTo(BaseTypeConverterRegistry.java:133) > ... 24 more > Caused by: java.lang.NullPointerException > at > com.sun.org.apache.xerces.internal.dom.ParentNode.nodeListItem(ParentNode.java:786) > at > com.sun.org.apache.xerces.internal.dom.ParentNode.item(ParentNode.java:800) > at net.sf.saxon.dom.DOMSender.walkNode(DOMSender.java:199) > at net.sf.saxon.dom.DOMSender.outputElement(DOMSender.java:286) > at net.sf.saxon.dom.DOMSender.walkNode(DOMSender.java:209) > at net.sf.saxon.dom.DOMSender.outputElement(DOMSender.java:286) > at net.sf.saxon.dom.DOMSender.walkNode(DOMSender.java:209) > at net.sf.saxon.dom.DOMSender.outputElement(DOMSender.java:286) > at net.sf.saxon.dom.DOMSender.walkNode(DOMSender.java:209) > at net.sf.saxon.dom.DOMSender.outputElement(DOMSender.java:286) > at net.sf.saxon.dom.DOMSender.sendElement(DOMSender.java:154) > at net.sf.saxon.dom.DOMSender.send(DOMSender.java:99) > at net.sf.saxon.dom.DOMObjectModel.sendSource(DOMObjectModel.java:273) > at net.sf.saxon.event.Sender.send(Sender.java:226) > at > net.sf.saxon.jaxp.IdentityTransformer.transform(IdentityTransformer.java:374) > at > org.apache.camel.converter.jaxp.XmlConverter.toResult(XmlConverter.java:132) > at > org.apache.camel.converter.jaxp.XmlConverter.toResult(XmlConverter.java:116) > at > org.apache.camel.converter.jaxp.XmlConverter.toString(XmlConverter.java:238) > at > org.apache.camel.converter.jaxp.XmlConverter.toString(XmlConverter.java:282) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:497) > at > org.apache.camel.util.ObjectHelper.invokeMethod(ObjectHelper.java:1281) > > > > > -- > View this message in context: > http://camel.465427.n5.nabble.com/Camel-XSLT-Saxon-not-thread-safe-tp5785086.html > Sent from the Camel - Users mailing list archive at Nabble.com. -- Claus Ibsen ----------------- http://davsclaus.com @davsclaus Camel in Action 2: https://www.manning.com/ibsen2