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() &lt; 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

Reply via email to