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)

Reply via email to