Hi,
I would like to run an xquery like:
for $i in //Member return ("Name = ", $i/Name/text(), " FavoriteColor = ",
$i/FavoriteColor/text())
onto a file like:
<?xml version="1.0"?>
<FitnessCenter>
<Member level="platinum">
<Name>Jeff</Name>
<FavoriteColor>lightgrey</FavoriteColor>
</Member>
<Member level="gold">
<Name>David</Name>
<FavoriteColor>lightblue</FavoriteColor>
</Member>
<Member level="platinum">
<Name>Roger</Name>
<FavoriteColor>lightyellow</FavoriteColor>
</Member>
</FitnessCenter>
—> this does not work (see stacktrace)
However when I change my xquery like so:
<NAMES>{for $i in //Member return $i/Name/text()}</NAMES>
—> it works fine. However I do not want to output xml...
This affects at least Camel versions 2.10.6 and 2.13.
It seems like the result from the xquery has to be well-formed xml. This is ok
for some use cases. However sometimes xquery comes in handy to output non-xml
format.
I am probably missing some sauce to add to my xquery…
I tested this with the camel-example-spring-xquery.
Cheers, Thomas.
Stacktrace
---------------------------------------------------------------------------------------------------------------------------------------
org.apache.camel.RuntimeExpressionException: net.sf.saxon.trans.XPathException:
org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: An attempt was made to insert
a node where it is not permitted.
at
org.apache.camel.component.xquery.XQueryBuilder.evaluate(XQueryBuilder.java:145)
at
org.apache.camel.component.xquery.XQueryBuilder.process(XQueryBuilder.java:102)
at
org.apache.camel.impl.ProcessorEndpoint.onExchange(ProcessorEndpoint.java:103)
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:110)
at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)
at
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:398)
at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
at
org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:401)
at
org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:201)
at
org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:165)
at
org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:187)
at
org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:114)
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
at
java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180)
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:695)
Caused by: net.sf.saxon.trans.XPathException: org.w3c.dom.DOMException:
HIERARCHY_REQUEST_ERR: An attempt was made to insert a node where it is not
permitted.
at net.sf.saxon.dom.DOMWriter.characters(DOMWriter.java:218)
at net.sf.saxon.event.ProxyReceiver.characters(ProxyReceiver.java:193)
at net.sf.saxon.event.TreeReceiver.characters(TreeReceiver.java:246)
at net.sf.saxon.event.TreeReceiver.append(TreeReceiver.java:295)
at
net.sf.saxon.evpull.EventIteratorToReceiver.copy(EventIteratorToReceiver.java:60)
at net.sf.saxon.query.XQueryExpression.pull(XQueryExpression.java:508)
at
org.apache.camel.component.xquery.XQueryBuilder.evaluateAsDOM(XQueryBuilder.java:179)
at
org.apache.camel.component.xquery.XQueryBuilder.evaluate(XQueryBuilder.java:135)
... 25 more
Caused by: org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: An attempt was made
to insert a node where it is not permitted.
at
com.sun.org.apache.xerces.internal.dom.ParentNode.internalInsertBefore(ParentNode.java:356)
at
com.sun.org.apache.xerces.internal.dom.ParentNode.insertBefore(ParentNode.java:284)
at
com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.insertBefore(CoreDocumentImpl.java:400)
at
com.sun.org.apache.xerces.internal.dom.NodeImpl.appendChild(NodeImpl.java:235)
at net.sf.saxon.dom.DOMWriter.characters(DOMWriter.java:215)