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.

Reply via email to