You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Ramu (Jira)" <ji...@apache.org> on 2019/09/13 01:08:00 UTC

[jira] [Assigned] (CAMEL-13958) XPathBuilder threadSafe mode should also be enabled when the NodeList contains only 1 item

     [ https://issues.apache.org/jira/browse/CAMEL-13958?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Ramu reassigned CAMEL-13958:
----------------------------

    Assignee: Ramu

> XPathBuilder threadSafe mode should also be enabled when the NodeList contains only 1 item
> ------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-13958
>                 URL: https://issues.apache.org/jira/browse/CAMEL-13958
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-saxon
>    Affects Versions: 2.24.1
>            Reporter: Jimmy Praet
>            Assignee: Ramu
>            Priority: Major
>
> In CAMEL-10225 the "threadSafety" property was added. But looking at the code, it is only enabled when the NodeList contains 2 or more items:
> XPathBuilder: [https://github.com/apache/camel/blob/master/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathBuilder.java#L1064]
> {code:java}
>         if (threadSafety && answer != null && answer instanceof NodeList) {
>             try {
>                 NodeList list = (NodeList)answer;                // when the result is NodeList and it has 2+ elements then its
>                 // not thread-safe to use concurrently
>                 // and we need to clone each node and build a thread-safe list
>                 // to be used instead
>                 boolean threadSafetyNeeded = list.getLength() >= 2;
>                 if (threadSafetyNeeded) {
>                     answer = new ThreadSafeNodeList(list);
>                     if (LOG.isDebugEnabled()) {
>                         LOG.debug("Created thread-safe result from: {} as: {}", list.getClass().getName(), answer.getClass().getName());
>                     }
>                 }
>             } catch (Exception e) {
>                 throw ObjectHelper.wrapRuntimeCamelException(e);
>             }
>         }
> {code}
> But I get the same type of error as mentioned in CAMEL-10225 when my NodeList only contains 1 item:
> {code:java}
> org.apache.camel.TypeConversionException: Error during type conversion from type: java.lang.String to the required type: java.io.InputStream with value <ssin>84073120992</ssin> due java.lang.NullPointerException
>     at org.apache.camel.impl.converter.BaseTypeConverterRegistry.createTypeConversionException(BaseTypeConverterRegistry.java:666)
>     at org.apache.camel.impl.converter.BaseTypeConverterRegistry.convertTo(BaseTypeConverterRegistry.java:157)
>     at org.apache.camel.impl.MessageSupport.getBody(MessageSupport.java:87)
>     at org.apache.camel.impl.MessageSupport.getBody(MessageSupport.java:61)
>     at org.apache.camel.builder.xml.XsltBuilder.process(XsltBuilder.java:124)
>     at org.apache.camel.impl.ProcessorEndpoint.onExchange(ProcessorEndpoint.java:103)
>     at org.apache.camel.component.xslt.XsltEndpoint.onExchange(XsltEndpoint.java:139)
>     at org.apache.camel.impl.ProcessorEndpoint$1.process(ProcessorEndpoint.java:71)
>     at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
>     at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:148)
>     at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548)
>     at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
>     at org.apache.camel.processor.Pipeline.process(Pipeline.java:138)
>     at org.apache.camel.processor.Pipeline.process(Pipeline.java:101)
>     at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
>     at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:76)
>     at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:148)
>     at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548)
>     at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
>     at org.apache.camel.processor.Pipeline.process(Pipeline.java:138)
>     at org.apache.camel.processor.Pipeline.process(Pipeline.java:101)
>     at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
>     at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:76)
>     at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548)
>     at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
>     at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109)
>     at org.apache.camel.processor.MulticastProcessor.doProcessParallel(MulticastProcessor.java:859)
>     at org.apache.camel.processor.MulticastProcessor.access$200(MulticastProcessor.java:86)
>     at org.apache.camel.processor.MulticastProcessor$1.call(MulticastProcessor.java:330)
>     at org.apache.camel.processor.MulticastProcessor$1.call(MulticastProcessor.java:316)
>     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>     at be.fgov.kszbcss.tracer.concurrent.TracerRunnable.run(TracerRunnable.java:27)
>     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>     at java.lang.Thread.run(Thread.java:748)
> Caused by: org.apache.camel.RuntimeCamelException: java.lang.NullPointerException
>     at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1826)
>     at org.apache.camel.util.ObjectHelper.invokeMethod(ObjectHelper.java:1405)
>     at org.apache.camel.impl.converter.InstanceMethodTypeConverter.convertTo(InstanceMethodTypeConverter.java:79)
>     at org.apache.camel.impl.converter.BaseTypeConverterRegistry.doConvertTo(BaseTypeConverterRegistry.java:325)
>     at org.apache.camel.impl.converter.BaseTypeConverterRegistry.convertTo(BaseTypeConverterRegistry.java:140)
>     ... 33 more
> Caused by: java.lang.NullPointerException
>     at com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl.clearChunkValue(DeferredDocumentImpl.java:2038)
>     at com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl.getNodeValueString(DeferredDocumentImpl.java:1149)
>     at com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl.getNodeValueString(DeferredDocumentImpl.java:1134)
>     at com.sun.org.apache.xerces.internal.dom.DeferredTextImpl.synchronizeData(DeferredTextImpl.java:96)
>     at com.sun.org.apache.xerces.internal.dom.CharacterDataImpl.getData(CharacterDataImpl.java:163)
>     at net.sf.saxon.dom.DOMSender.walkNode(DOMSender.java:266)
>     at net.sf.saxon.dom.DOMSender.outputElement(DOMSender.java:334)
>     at net.sf.saxon.dom.DOMSender.sendElement(DOMSender.java:190)
>     at net.sf.saxon.dom.DOMSender.send(DOMSender.java:101)
>     at net.sf.saxon.dom.DOMObjectModel.sendDOMSource(DOMObjectModel.java:282)
>     at net.sf.saxon.dom.DOMObjectModel.sendSource(DOMObjectModel.java:264)
>     at net.sf.saxon.event.Sender.send(Sender.java:207)
>     at net.sf.saxon.jaxp.IdentityTransformer.transform(IdentityTransformer.java:366)
>     at org.apache.camel.converter.jaxp.XmlConverter.toResult(XmlConverter.java:146)
>     at org.apache.camel.converter.jaxp.XmlConverter.toResult(XmlConverter.java:125)
>     at org.apache.camel.converter.jaxp.XmlConverter.toString(XmlConverter.java:248)
>     at org.apache.camel.converter.jaxp.XmlConverter.toString(XmlConverter.java:292)
>     at org.apache.camel.converter.jaxp.DomConverter.toString(DomConverter.java:105)
>     at org.apache.camel.converter.jaxp.DomConverter.toString(DomConverter.java:74)
>     at org.apache.camel.converter.jaxp.DomConverter.toByteArray(DomConverter.java:144)
>     at org.apache.camel.converter.jaxp.DomConverter.toInputStream(DomConverter.java:139)
>     at sun.reflect.GeneratedMethodAccessor89.invoke(Unknown Source)
>     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>     at java.lang.reflect.Method.invoke(Method.java:498)
>     at org.apache.camel.util.ObjectHelper.invokeMethod(ObjectHelper.java:1401)
>     ... 36 more
> {code}



--
This message was sent by Atlassian Jira
(v8.3.2#803003)