SAX, DOM, large XML documents and java.lang.OutOfMemory Errors

classic Classic list List threaded Threaded
15 messages Options
Reply | Threaded
Open this post in threaded view
|

SAX, DOM, large XML documents and java.lang.OutOfMemory Errors

Henrik Pettersen
All,

my email seems to be stuck in some sort of email filter, so I am
re-posting, this time providing a link for you to download the
attachment instead:
http://swiki.sparklingideas.co.uk/smith.zip

Thank you.

Henrik

All,

I have a question about how Orbeon works internally, how it uses DOM
(it doesn't?) and SAX, and how Orbeon manages its memory.

My problem is that I am getting a "java.lang.OutOfMemoryError: Java
heap space" when I am parsing larger XML documents with the below
pipeline definition. This is (to me) somewhat unexpected, as I
imagined we are talking SAX events all the way,  (hopefully) making
the size of the input XML irrelevant. As a solution, I could of course
increase the heap space, but what would happen if I then sent a really
humongous XML document to my pipeline?

I have attached a zip file with a self contained application that
(sometimes) causes a OutOfMemory error when run on the default
settings of Tomcat 5.5.26, OS X 10.4 and Java 1.5.0_13-b05-241.

Here is my XPL definition:

<p:config xmlns:p="http://www.orbeon.com/oxf/pipeline"
    xmlns:oxf="http://www.orbeon.com/oxf/processors"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xforms="http://www.w3.org/2002/xforms">

    <!-- p:param name="instance" type="input"/ -->
    <p:param name="data" type="output"/>

    <!-- Read in the stylesheet definition -->
    <p:processor name="oxf:url-generator">
        <p:input name="config">
            <config>
                <url>transform.xsl</url>
                <content-type>text/xml</content-type>
                <validating>false</validating>
                <handle-xinclude>false</handle-xinclude>
            </config>
        </p:input>
        <p:output name="data" id="firstXslt" debug="firstXSLT"/>
    </p:processor>

    <!-- Read in the source XML -->
    <p:processor name="oxf:url-generator">
        <p:input name="config">
            <config>
                <url>smith.hotels.xml</url>
                <content-type>text/xml</content-type>
                <validating>false</validating>
                <handle-xinclude>false</handle-xinclude>
            </config>
        </p:input>
        <p:output name="data" id="smithXml" debug="smithXml"/>
    </p:processor>

    <!-- Create the Escenic format: Apply the stylesheet to the source xml  -->
    <p:processor name="oxf:xslt">
        <p:input name="data" href="#smithXml" debug="smithXml"/>
        <p:input name="config" href="#firstXslt" debug="firstXslt"/>
        <p:output name="data" id="escenicXml" debug="escenicXml"/>
    </p:processor>

    <!-- Wired off, just send the transformed XML back to the client
for now (using the identity processor below) -->
    <!-- Call the REST webservice -->
    <!--p:processor name="oxf:xforms-submission">
        <p:input name="submission">
            <xforms:submission method="put"
action="http://localhost:8080/timmy/import"/>
        </p:input>
        <p:input name="request" href="#escenicXml" debug="escenicXml"/>
        <p:output name="response" ref="data" debug="response"/>
    </p:processor-->

   <!-- Just return the transformed XML to the user for now.
        Once we get this right, will send it to the webservice instead
(see above) -->
    <p:processor name="oxf:identity">
        <p:input name="data" href="#escenicXml" debug="escenicXml"/>
        <p:output name="data" ref="data" debug="same"/>
    </p:processor>

</p:config>

And here is the stack trace:

java.lang.OutOfMemoryError: Java heap space
        at org.orbeon.oxf.xml.SAXStore.addToCharBuffer(SAXStore.java:424)
        at org.orbeon.oxf.xml.SAXStore.characters(SAXStore.java:269)
        at org.orbeon.oxf.xml.SAXStore.replay(SAXStore.java:197)
        at org.orbeon.oxf.processor.pipeline.TeeProcessor$1.readImpl(TeeProcessor.java:61)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$1400(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$6.run(PipelineProcessor.java:564)
        at org.orbeon.oxf.processor.ProcessorImpl.executeParents(ProcessorImpl.java:536)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$1500(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$InternalTopOutput.readImpl(PipelineProcessor.java:560)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
        at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
        at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)

The exception does not always occur, but appears more frequent with
multiple parallel requests (as expected). I am also seeing Broken Pipe
socket exceptions in the epilogue XPL (when we don't get OutOfMemory
errors), which I think is related to the size of the XML document
returned from the above XPL:

2008-08-15 15:05:34,250 ERROR ProcessorService  - Exception at line
348, column 55 of oxf:/config/epilogue-servlet.xpl (reading processor
output: name='data', id='converted')
java.net.SocketException: Broken pipe
        at java.net.SocketOutputStream.socketWrite0(Native Method)
        at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
        at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
        at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:747)
        at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:432)
        at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:347)
        at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:770)
        at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:126)
        at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:580)
        at org.apache.coyote.Response.doWrite(Response.java:560)
        at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:361)
        at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:323)
        at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:392)
        at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:381)
        at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
        at org.orbeon.oxf.processor.serializer.store.ResultStoreOutputStream.write(ResultStoreOutputStream.java:47)
        at sun.nio.cs.StreamEncoder$CharsetSE.writeBytes(StreamEncoder.java:336)
        at sun.nio.cs.StreamEncoder$CharsetSE.implWrite(StreamEncoder.java:395)
        at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:136)
        at java.io.OutputStreamWriter.write(OutputStreamWriter.java:191)
        at org.orbeon.oxf.util.TextContentHandler.characters(TextContentHandler.java:22)
        at org.orbeon.oxf.processor.serializer.BinaryTextContentHandler.characters(BinaryTextContentHandler.java:166)
        at org.orbeon.oxf.util.ContentHandlerWriter.write(ContentHandlerWriter.java:95)
        at org.orbeon.saxon.tinytree.CharSlice.write(CharSlice.java:170)
        at org.orbeon.saxon.event.XMLEmitter.writeCharSequence(XMLEmitter.java:595)
        at org.orbeon.saxon.event.XMLEmitter.writeEscape(XMLEmitter.java:686)
        at org.orbeon.saxon.event.XMLEmitter.characters(XMLEmitter.java:550)
        at org.orbeon.saxon.event.ReceivingContentHandler.flush(ReceivingContentHandler.java:425)
        at org.orbeon.saxon.event.ReceivingContentHandler.endElement(ReceivingContentHandler.java:332)
        at org.orbeon.oxf.xml.ForwardingContentHandler.endElement(ForwardingContentHandler.java:52)
        at org.orbeon.oxf.xml.ForwardingContentHandler.endElement(ForwardingContentHandler.java:52)
        at org.orbeon.oxf.xml.SAXStore.replay(SAXStore.java:201)
        at org.orbeon.oxf.processor.pipeline.TeeProcessor$1.readImpl(TeeProcessor.java:61)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$1400(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$6.run(PipelineProcessor.java:564)
        at org.orbeon.oxf.processor.ProcessorImpl.executeParents(ProcessorImpl.java:536)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$1500(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$InternalTopOutput.readImpl(PipelineProcessor.java:560)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.serializer.legacy.XMLSerializer.readInput(XMLSerializer.java:58)
        at org.orbeon.oxf.processor.serializer.HttpTextSerializer$1.readImpl(HttpTextSerializer.java:101)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.serializer.HttpSerializer.readInput(HttpSerializer.java:42)
        at org.orbeon.oxf.processor.serializer.HttpSerializerBase$1.read(HttpSerializerBase.java:151)
        at org.orbeon.oxf.processor.ProcessorImpl.readCacheInputAsObject(ProcessorImpl.java:452)
        at org.orbeon.oxf.processor.serializer.HttpSerializerBase.start(HttpSerializerBase.java:142)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
        at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
        at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:230)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
        at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
        at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
        at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:230)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
        at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
        at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
        at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:230)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
        at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
        at org.orbeon.oxf.processor.PageFlowControllerProcessor.start(PageFlowControllerProcessor.java:489)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
        at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.getInput(PipelineProcessor.java:136)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:85)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
        at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
        at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
        at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
        at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
        at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
        at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
        at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
        at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
        at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
        at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
        at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
        at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
        at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
        at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
        at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
        at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
        at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
        at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
        at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$1400(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$6.run(PipelineProcessor.java:564)
        at org.orbeon.oxf.processor.ProcessorImpl.executeParents(ProcessorImpl.java:536)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$1500(PipelineProcessor.java:62)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$InternalTopOutput.readImpl(PipelineProcessor.java:560)
        at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
        at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
        at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
        at org.orbeon.oxf.processor.NullSerializer.start(NullSerializer.java:31)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
        at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
        at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:230)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
        at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
        at org.orbeon.oxf.processor.PageFlowControllerProcessor.start(PageFlowControllerProcessor.java:489)
        at org.orbeon.oxf.pipeline.InitUtils.runProcessor(InitUtils.java:95)
        at org.orbeon.oxf.webapp.ProcessorService.service(ProcessorService.java:96)
        at org.orbeon.oxf.servlet.OPSServletDelegate.service(OPSServletDelegate.java:148)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
        at java.lang.Thread.run(Thread.java:613)


Is it the size of the input / source XML that causes an OutOfMemory
error? How about these broken pipes? If so, is there anything I can do
to resolve this (except from  -Xmx<size> )? Does anyone else have
experiences with dealing with large XML documents as inputs and/or
outputs? Am I just abusing Orbeon Forms with this type of use case?

Any insight would be much appreciated. Many thanks!

Sincerely,
Henrik Pettersen


--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws
Reply | Threaded
Open this post in threaded view
|

Re: SAX, DOM, large XML documents and java.lang.OutOfMemory Errors

Erik Bruchez
Administrator
Henrik,

Processors do communicate through SAX, but individual processors may  
not stream. In particular:

* XSLT doesn't stream, it will create a Saxon TinyTree for the input  
document.
* The XForms processor also creates DOM trees before processing.

I would say the case where you can do streaming is the exception  
rather than the rule.

-Erik

On Aug 17, 2008, at 11:57 AM, Henrik Pettersen wrote:

> All,
>
> my email seems to be stuck in some sort of email filter, so I am
> re-posting, this time providing a link for you to download the
> attachment instead:
> http://swiki.sparklingideas.co.uk/smith.zip
>
> Thank you.
>
> Henrik
>
> All,
>
> I have a question about how Orbeon works internally, how it uses DOM
> (it doesn't?) and SAX, and how Orbeon manages its memory.
>
> My problem is that I am getting a "java.lang.OutOfMemoryError: Java
> heap space" when I am parsing larger XML documents with the below
> pipeline definition. This is (to me) somewhat unexpected, as I
> imagined we are talking SAX events all the way,  (hopefully) making
> the size of the input XML irrelevant. As a solution, I could of course
> increase the heap space, but what would happen if I then sent a really
> humongous XML document to my pipeline?
>
> I have attached a zip file with a self contained application that
> (sometimes) causes a OutOfMemory error when run on the default
> settings of Tomcat 5.5.26, OS X 10.4 and Java 1.5.0_13-b05-241.
>
> Here is my XPL definition:
>
> <p:config xmlns:p="http://www.orbeon.com/oxf/pipeline"
>    xmlns:oxf="http://www.orbeon.com/oxf/processors"
>    xmlns:xs="http://www.w3.org/2001/XMLSchema"
>    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>    xmlns:xforms="http://www.w3.org/2002/xforms">
>
>    <!-- p:param name="instance" type="input"/ -->
>    <p:param name="data" type="output"/>
>
>    <!-- Read in the stylesheet definition -->
>    <p:processor name="oxf:url-generator">
>        <p:input name="config">
>            <config>
>                <url>transform.xsl</url>
>                <content-type>text/xml</content-type>
>                <validating>false</validating>
>                <handle-xinclude>false</handle-xinclude>
>            </config>
>        </p:input>
>        <p:output name="data" id="firstXslt" debug="firstXSLT"/>
>    </p:processor>
>
>    <!-- Read in the source XML -->
>    <p:processor name="oxf:url-generator">
>        <p:input name="config">
>            <config>
>                <url>smith.hotels.xml</url>
>                <content-type>text/xml</content-type>
>                <validating>false</validating>
>                <handle-xinclude>false</handle-xinclude>
>            </config>
>        </p:input>
>        <p:output name="data" id="smithXml" debug="smithXml"/>
>    </p:processor>
>
>    <!-- Create the Escenic format: Apply the stylesheet to the  
> source xml  -->
>    <p:processor name="oxf:xslt">
>        <p:input name="data" href="#smithXml" debug="smithXml"/>
>        <p:input name="config" href="#firstXslt" debug="firstXslt"/>
>        <p:output name="data" id="escenicXml" debug="escenicXml"/>
>    </p:processor>
>
>    <!-- Wired off, just send the transformed XML back to the client
> for now (using the identity processor below) -->
>    <!-- Call the REST webservice -->
>    <!--p:processor name="oxf:xforms-submission">
>        <p:input name="submission">
>            <xforms:submission method="put"
> action="http://localhost:8080/timmy/import"/>
>        </p:input>
>        <p:input name="request" href="#escenicXml" debug="escenicXml"/>
>        <p:output name="response" ref="data" debug="response"/>
>    </p:processor-->
>
>   <!-- Just return the transformed XML to the user for now.
>        Once we get this right, will send it to the webservice instead
> (see above) -->
>    <p:processor name="oxf:identity">
>        <p:input name="data" href="#escenicXml" debug="escenicXml"/>
>        <p:output name="data" ref="data" debug="same"/>
>    </p:processor>
>
> </p:config>
>
> And here is the stack trace:
>
> java.lang.OutOfMemoryError: Java heap space
>        at org.orbeon.oxf.xml.SAXStore.addToCharBuffer(SAXStore.java:
> 424)
>        at org.orbeon.oxf.xml.SAXStore.characters(SAXStore.java:269)
>        at org.orbeon.oxf.xml.SAXStore.replay(SAXStore.java:197)
>        at org.orbeon.oxf.processor.pipeline.TeeProcessor
> $1.readImpl(TeeProcessor.java:61)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $1400(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $6.run(PipelineProcessor.java:564)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeParents(ProcessorImpl.java:536)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $1500(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $InternalTopOutput.readImpl(PipelineProcessor.java:560)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>        at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>
> The exception does not always occur, but appears more frequent with
> multiple parallel requests (as expected). I am also seeing Broken Pipe
> socket exceptions in the epilogue XPL (when we don't get OutOfMemory
> errors), which I think is related to the size of the XML document
> returned from the above XPL:
>
> 2008-08-15 15:05:34,250 ERROR ProcessorService  - Exception at line
> 348, column 55 of oxf:/config/epilogue-servlet.xpl (reading processor
> output: name='data', id='converted')
> java.net.SocketException: Broken pipe
>        at java.net.SocketOutputStream.socketWrite0(Native Method)
>        at  
> java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
>        at java.net.SocketOutputStream.write(SocketOutputStream.java:
> 136)
>        at  
> org
> .apache
> .coyote
> .http11
> .InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:747)
>        at  
> org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:432)
>        at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:
> 347)
>        at org.apache.coyote.http11.InternalOutputBuffer
> $OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:770)
>        at  
> org
> .apache
> .coyote
> .http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:
> 126)
>        at  
> org
> .apache
> .coyote
> .http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:580)
>        at org.apache.coyote.Response.doWrite(Response.java:560)
>        at  
> org
> .apache
> .catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:361)
>        at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:
> 323)
>        at  
> org
> .apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:
> 392)
>        at  
> org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:
> 381)
>        at  
> org
> .apache
> .catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:
> 89)
>        at  
> org
> .orbeon
> .oxf
> .processor
> .serializer
> .store.ResultStoreOutputStream.write(ResultStoreOutputStream.java:47)
>        at sun.nio.cs.StreamEncoder
> $CharsetSE.writeBytes(StreamEncoder.java:336)
>        at sun.nio.cs.StreamEncoder
> $CharsetSE.implWrite(StreamEncoder.java:395)
>        at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:136)
>        at java.io.OutputStreamWriter.write(OutputStreamWriter.java:
> 191)
>        at  
> org
> .orbeon
> .oxf.util.TextContentHandler.characters(TextContentHandler.java:22)
>        at  
> org
> .orbeon
> .oxf
> .processor
> .serializer
> .BinaryTextContentHandler.characters(BinaryTextContentHandler.java:
> 166)
>        at  
> org
> .orbeon
> .oxf.util.ContentHandlerWriter.write(ContentHandlerWriter.java:95)
>        at org.orbeon.saxon.tinytree.CharSlice.write(CharSlice.java:
> 170)
>        at  
> org.orbeon.saxon.event.XMLEmitter.writeCharSequence(XMLEmitter.java:
> 595)
>        at  
> org.orbeon.saxon.event.XMLEmitter.writeEscape(XMLEmitter.java:686)
>        at  
> org.orbeon.saxon.event.XMLEmitter.characters(XMLEmitter.java:550)
>        at  
> org
> .orbeon
> .saxon
> .event.ReceivingContentHandler.flush(ReceivingContentHandler.java:425)
>        at  
> org
> .orbeon
> .saxon
> .event
> .ReceivingContentHandler.endElement(ReceivingContentHandler.java:332)
>        at  
> org
> .orbeon
> .oxf
> .xml
> .ForwardingContentHandler.endElement(ForwardingContentHandler.java:52)
>        at  
> org
> .orbeon
> .oxf
> .xml
> .ForwardingContentHandler.endElement(ForwardingContentHandler.java:52)
>        at org.orbeon.oxf.xml.SAXStore.replay(SAXStore.java:201)
>        at org.orbeon.oxf.processor.pipeline.TeeProcessor
> $1.readImpl(TeeProcessor.java:61)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $1400(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $6.run(PipelineProcessor.java:564)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeParents(ProcessorImpl.java:536)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $1500(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $InternalTopOutput.readImpl(PipelineProcessor.java:560)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at  
> org
> .orbeon
> .oxf
> .processor
> .serializer.legacy.XMLSerializer.readInput(XMLSerializer.java:58)
>        at org.orbeon.oxf.processor.serializer.HttpTextSerializer
> $1.readImpl(HttpTextSerializer.java:101)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at  
> org
> .orbeon
> .oxf
> .processor.serializer.HttpSerializer.readInput(HttpSerializer.java:42)
>        at org.orbeon.oxf.processor.serializer.HttpSerializerBase
> $1.read(HttpSerializerBase.java:151)
>        at  
> org
> .orbeon
> .oxf
> .processor.ProcessorImpl.readCacheInputAsObject(ProcessorImpl.java:
> 452)
>        at  
> org
> .orbeon
> .oxf
> .processor
> .serializer.HttpSerializerBase.start(HttpSerializerBase.java:142)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>        at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>        at  
> org
> .orbeon
> .oxf
> .processor
> .pipeline
> .choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:
> 230)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>        at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>        at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>        at  
> org
> .orbeon
> .oxf
> .processor
> .pipeline
> .choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:
> 230)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>        at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>        at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>        at  
> org
> .orbeon
> .oxf
> .processor
> .pipeline
> .choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:
> 230)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>        at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>        at  
> org
> .orbeon
> .oxf
> .processor
> .PageFlowControllerProcessor.start(PageFlowControllerProcessor.java:
> 489)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>        at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.getInput(PipelineProcessor.java:136)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:85)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>        at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>        at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>        at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>        at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>        at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>        at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>        at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>        at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>        at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>        at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $1400(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $6.run(PipelineProcessor.java:564)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeParents(ProcessorImpl.java:536)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $1500(PipelineProcessor.java:62)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $InternalTopOutput.readImpl(PipelineProcessor.java:560)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>        at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>        at  
> org.orbeon.oxf.processor.NullSerializer.start(NullSerializer.java:31)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>        at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>        at  
> org
> .orbeon
> .oxf
> .processor
> .pipeline
> .choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:
> 230)
>        at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>        at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>        at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>        at  
> org
> .orbeon
> .oxf
> .processor
> .PageFlowControllerProcessor.start(PageFlowControllerProcessor.java:
> 489)
>        at  
> org.orbeon.oxf.pipeline.InitUtils.runProcessor(InitUtils.java:95)
>        at  
> org.orbeon.oxf.webapp.ProcessorService.service(ProcessorService.java:
> 96)
>        at  
> org
> .orbeon
> .oxf.servlet.OPSServletDelegate.service(OPSServletDelegate.java:148)
>        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>        at  
> org
> .apache
> .catalina
> .core
> .ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
> 269)
>        at  
> org
> .apache
> .catalina
> .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>        at  
> org
> .apache
> .catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:
> 213)
>        at  
> org
> .apache
> .catalina.core.StandardContextValve.invoke(StandardContextValve.java:
> 174)
>        at  
> org
> .apache
> .catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>        at  
> org
> .apache
> .catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
>        at  
> org
> .apache
> .catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:
> 108)
>        at  
> org
> .apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
> 174)
>        at  
> org
> .apache.coyote.http11.Http11Processor.process(Http11Processor.java:
> 874)
>        at org.apache.coyote.http11.Http11BaseProtocol
> $Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:
> 665)
>        at  
> org
> .apache
> .tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:
> 528)
>        at  
> org
> .apache
> .tomcat
> .util
> .net
> .LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
>        at org.apache.tomcat.util.threads.ThreadPool
> $ControlRunnable.run(ThreadPool.java:689)
>        at java.lang.Thread.run(Thread.java:613)
>
>
> Is it the size of the input / source XML that causes an OutOfMemory
> error? How about these broken pipes? If so, is there anything I can do
> to resolve this (except from  -Xmx<size> )? Does anyone else have
> experiences with dealing with large XML documents as inputs and/or
> outputs? Am I just abusing Orbeon Forms with this type of use case?
>
> Any insight would be much appreciated. Many thanks!
>
> Sincerely,
> Henrik Pettersen
>
> --
> You receive this message as a subscriber of the [hidden email]  
> mailing list.
> To unsubscribe: mailto:[hidden email]
> For general help: mailto:[hidden email]?subject=help
> OW2 mailing lists service home page: http://www.ow2.org/wws
--
Orbeon Forms - Web Forms for the Enterprise Done the Right Way
http://www.orbeon.com/



--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws
Reply | Threaded
Open this post in threaded view
|

Re: Re: SAX, DOM, large XML documents and java.lang.OutOfMemory Errors

Henrik Pettersen
Hi Erik,

thank you for coming back to me, that makes sense to me. Is there any documentation on how the different processors handle the XML (DOM/SAX)? You mentioned a tinytree being built for XSLT, how about the oxf:xforms-submission processor?

Many thanks!

Henrik

On Sun, Aug 17, 2008 at 8:29 PM, Erik Bruchez <[hidden email]> wrote:
Henrik,

Processors do communicate through SAX, but individual processors may not stream. In particular:

* XSLT doesn't stream, it will create a Saxon TinyTree for the input document.
* The XForms processor also creates DOM trees before processing.

I would say the case where you can do streaming is the exception rather than the rule.

-Erik


On Aug 17, 2008, at 11:57 AM, Henrik Pettersen wrote:

All,

my email seems to be stuck in some sort of email filter, so I am
re-posting, this time providing a link for you to download the
attachment instead:
http://swiki.sparklingideas.co.uk/smith.zip

Thank you.

Henrik

All,

I have a question about how Orbeon works internally, how it uses DOM
(it doesn't?) and SAX, and how Orbeon manages its memory.

My problem is that I am getting a "java.lang.OutOfMemoryError: Java
heap space" when I am parsing larger XML documents with the below
pipeline definition. This is (to me) somewhat unexpected, as I
imagined we are talking SAX events all the way,  (hopefully) making
the size of the input XML irrelevant. As a solution, I could of course
increase the heap space, but what would happen if I then sent a really
humongous XML document to my pipeline?

I have attached a zip file with a self contained application that
(sometimes) causes a OutOfMemory error when run on the default
settings of Tomcat 5.5.26, OS X 10.4 and Java 1.5.0_13-b05-241.

Here is my XPL definition:

<p:config xmlns:p="http://www.orbeon.com/oxf/pipeline"
  xmlns:oxf="http://www.orbeon.com/oxf/processors"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xforms="http://www.w3.org/2002/xforms">

  <!-- p:param name="instance" type="input"/ -->
  <p:param name="data" type="output"/>

  <!-- Read in the stylesheet definition -->
  <p:processor name="oxf:url-generator">
      <p:input name="config">
          <config>
              <url>transform.xsl</url>
              <content-type>text/xml</content-type>
              <validating>false</validating>
              <handle-xinclude>false</handle-xinclude>
          </config>
      </p:input>
      <p:output name="data" id="firstXslt" debug="firstXSLT"/>
  </p:processor>

  <!-- Read in the source XML -->
  <p:processor name="oxf:url-generator">
      <p:input name="config">
          <config>
              <url>smith.hotels.xml</url>
              <content-type>text/xml</content-type>
              <validating>false</validating>
              <handle-xinclude>false</handle-xinclude>
          </config>
      </p:input>
      <p:output name="data" id="smithXml" debug="smithXml"/>
  </p:processor>

  <!-- Create the Escenic format: Apply the stylesheet to the source xml  -->
  <p:processor name="oxf:xslt">
      <p:input name="data" href="#smithXml" debug="smithXml"/>
      <p:input name="config" href="#firstXslt" debug="firstXslt"/>
      <p:output name="data" id="escenicXml" debug="escenicXml"/>
  </p:processor>

  <!-- Wired off, just send the transformed XML back to the client
for now (using the identity processor below) -->
  <!-- Call the REST webservice -->
  <!--p:processor name="oxf:xforms-submission">
      <p:input name="submission">
          <xforms:submission method="put"
action="http://localhost:8080/timmy/import"/>
      </p:input>
      <p:input name="request" href="#escenicXml" debug="escenicXml"/>
      <p:output name="response" ref="data" debug="response"/>
  </p:processor-->

 <!-- Just return the transformed XML to the user for now.
      Once we get this right, will send it to the webservice instead
(see above) -->
  <p:processor name="oxf:identity">
      <p:input name="data" href="#escenicXml" debug="escenicXml"/>
      <p:output name="data" ref="data" debug="same"/>
  </p:processor>

</p:config>

And here is the stack trace:

java.lang.OutOfMemoryError: Java heap space
      at org.orbeon.oxf.xml.SAXStore.addToCharBuffer(SAXStore.java:424)
      at org.orbeon.oxf.xml.SAXStore.characters(SAXStore.java:269)
      at org.orbeon.oxf.xml.SAXStore.replay(SAXStore.java:197)
      at org.orbeon.oxf.processor.pipeline.TeeProcessor$1.readImpl(TeeProcessor.java:61)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$1400(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$6.run(PipelineProcessor.java:564)
      at org.orbeon.oxf.processor.ProcessorImpl.executeParents(ProcessorImpl.java:536)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$1500(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$InternalTopOutput.readImpl(PipelineProcessor.java:560)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
      at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
      at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)

The exception does not always occur, but appears more frequent with
multiple parallel requests (as expected). I am also seeing Broken Pipe
socket exceptions in the epilogue XPL (when we don't get OutOfMemory
errors), which I think is related to the size of the XML document
returned from the above XPL:

2008-08-15 15:05:34,250 ERROR ProcessorService  - Exception at line
348, column 55 of oxf:/config/epilogue-servlet.xpl (reading processor
output: name='data', id='converted')
java.net.SocketException: Broken pipe
      at java.net.SocketOutputStream.socketWrite0(Native Method)
      at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
      at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
      at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:747)
      at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:432)
      at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:347)
      at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:770)
      at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:126)
      at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:580)
      at org.apache.coyote.Response.doWrite(Response.java:560)
      at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:361)
      at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:323)
      at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:392)
      at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:381)
      at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
      at org.orbeon.oxf.processor.serializer.store.ResultStoreOutputStream.write(ResultStoreOutputStream.java:47)
      at sun.nio.cs.StreamEncoder$CharsetSE.writeBytes(StreamEncoder.java:336)
      at sun.nio.cs.StreamEncoder$CharsetSE.implWrite(StreamEncoder.java:395)
      at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:136)
      at java.io.OutputStreamWriter.write(OutputStreamWriter.java:191)
      at org.orbeon.oxf.util.TextContentHandler.characters(TextContentHandler.java:22)
      at org.orbeon.oxf.processor.serializer.BinaryTextContentHandler.characters(BinaryTextContentHandler.java:166)
      at org.orbeon.oxf.util.ContentHandlerWriter.write(ContentHandlerWriter.java:95)
      at org.orbeon.saxon.tinytree.CharSlice.write(CharSlice.java:170)
      at org.orbeon.saxon.event.XMLEmitter.writeCharSequence(XMLEmitter.java:595)
      at org.orbeon.saxon.event.XMLEmitter.writeEscape(XMLEmitter.java:686)
      at org.orbeon.saxon.event.XMLEmitter.characters(XMLEmitter.java:550)
      at org.orbeon.saxon.event.ReceivingContentHandler.flush(ReceivingContentHandler.java:425)
      at org.orbeon.saxon.event.ReceivingContentHandler.endElement(ReceivingContentHandler.java:332)
      at org.orbeon.oxf.xml.ForwardingContentHandler.endElement(ForwardingContentHandler.java:52)
      at org.orbeon.oxf.xml.ForwardingContentHandler.endElement(ForwardingContentHandler.java:52)
      at org.orbeon.oxf.xml.SAXStore.replay(SAXStore.java:201)
      at org.orbeon.oxf.processor.pipeline.TeeProcessor$1.readImpl(TeeProcessor.java:61)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$1400(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$6.run(PipelineProcessor.java:564)
      at org.orbeon.oxf.processor.ProcessorImpl.executeParents(ProcessorImpl.java:536)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$1500(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$InternalTopOutput.readImpl(PipelineProcessor.java:560)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.serializer.legacy.XMLSerializer.readInput(XMLSerializer.java:58)
      at org.orbeon.oxf.processor.serializer.HttpTextSerializer$1.readImpl(HttpTextSerializer.java:101)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.serializer.HttpSerializer.readInput(HttpSerializer.java:42)
      at org.orbeon.oxf.processor.serializer.HttpSerializerBase$1.read(HttpSerializerBase.java:151)
      at org.orbeon.oxf.processor.ProcessorImpl.readCacheInputAsObject(ProcessorImpl.java:452)
      at org.orbeon.oxf.processor.serializer.HttpSerializerBase.start(HttpSerializerBase.java:142)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
      at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
      at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:230)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
      at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
      at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
      at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:230)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
      at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
      at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
      at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:230)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
      at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
      at org.orbeon.oxf.processor.PageFlowControllerProcessor.start(PageFlowControllerProcessor.java:489)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
      at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.getInput(PipelineProcessor.java:136)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:85)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
      at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
      at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
      at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
      at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
      at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
      at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
      at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
      at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
      at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
      at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
      at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
      at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
      at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
      at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
      at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
      at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
      at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
      at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
      at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$1400(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$6.run(PipelineProcessor.java:564)
      at org.orbeon.oxf.processor.ProcessorImpl.executeParents(ProcessorImpl.java:536)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$1500(PipelineProcessor.java:62)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$InternalTopOutput.readImpl(PipelineProcessor.java:560)
      at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
      at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
      at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
      at org.orbeon.oxf.processor.NullSerializer.start(NullSerializer.java:31)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
      at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
      at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:230)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
      at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
      at org.orbeon.oxf.processor.PageFlowControllerProcessor.start(PageFlowControllerProcessor.java:489)
      at org.orbeon.oxf.pipeline.InitUtils.runProcessor(InitUtils.java:95)
      at org.orbeon.oxf.webapp.ProcessorService.service(ProcessorService.java:96)
      at org.orbeon.oxf.servlet.OPSServletDelegate.service(OPSServletDelegate.java:148)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
      at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
      at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
      at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
      at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
      at java.lang.Thread.run(Thread.java:613)


Is it the size of the input / source XML that causes an OutOfMemory
error? How about these broken pipes? If so, is there anything I can do
to resolve this (except from  -Xmx<size> )? Does anyone else have
experiences with dealing with large XML documents as inputs and/or
outputs? Am I just abusing Orbeon Forms with this type of use case?

Any insight would be much appreciated. Many thanks!

Sincerely,
Henrik Pettersen

--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws

--
Orbeon Forms - Web Forms for the Enterprise Done the Right Way
http://www.orbeon.com/



--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws




--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws
Reply | Threaded
Open this post in threaded view
|

Re: Re: Re: SAX, DOM, large XML documents and java.lang.OutOfMemory Errors

Erik Bruchez
Administrator
Henrik,

I don't think there is specific documentation on that. On top of my  
head:

* oxf:url-generator is able to stream
* oxf:http-serializer is able to stream
* pretty much anything else doesn't ;-)

oxf:xforms-submission uses XLST to build an XForm state, so here you  
will even possibly have several DOMs in memory possibly at the same  
time.

-Erik

On Aug 17, 2008, at 2:02 PM, Henrik Pettersen wrote:

> Hi Erik,
>
> thank you for coming back to me, that makes sense to me. Is there  
> any documentation on how the different processors handle the XML  
> (DOM/SAX)? You mentioned a tinytree being built for XSLT, how about  
> the oxf:xforms-submission processor?
>
> Many thanks!
>
> Henrik
>
> On Sun, Aug 17, 2008 at 8:29 PM, Erik Bruchez <[hidden email]>  
> wrote:
> Henrik,
>
> Processors do communicate through SAX, but individual processors may  
> not stream. In particular:
>
> * XSLT doesn't stream, it will create a Saxon TinyTree for the input  
> document.
> * The XForms processor also creates DOM trees before processing.
>
> I would say the case where you can do streaming is the exception  
> rather than the rule.
>
> -Erik
>
>
> On Aug 17, 2008, at 11:57 AM, Henrik Pettersen wrote:
>
> All,
>
> my email seems to be stuck in some sort of email filter, so I am
> re-posting, this time providing a link for you to download the
> attachment instead:
> http://swiki.sparklingideas.co.uk/smith.zip
>
> Thank you.
>
> Henrik
>
> All,
>
> I have a question about how Orbeon works internally, how it uses DOM
> (it doesn't?) and SAX, and how Orbeon manages its memory.
>
> My problem is that I am getting a "java.lang.OutOfMemoryError: Java
> heap space" when I am parsing larger XML documents with the below
> pipeline definition. This is (to me) somewhat unexpected, as I
> imagined we are talking SAX events all the way,  (hopefully) making
> the size of the input XML irrelevant. As a solution, I could of course
> increase the heap space, but what would happen if I then sent a really
> humongous XML document to my pipeline?
>
> I have attached a zip file with a self contained application that
> (sometimes) causes a OutOfMemory error when run on the default
> settings of Tomcat 5.5.26, OS X 10.4 and Java 1.5.0_13-b05-241.
>
> Here is my XPL definition:
>
> <p:config xmlns:p="http://www.orbeon.com/oxf/pipeline"
>   xmlns:oxf="http://www.orbeon.com/oxf/processors"
>   xmlns:xs="http://www.w3.org/2001/XMLSchema"
>   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>   xmlns:xforms="http://www.w3.org/2002/xforms">
>
>   <!-- p:param name="instance" type="input"/ -->
>   <p:param name="data" type="output"/>
>
>   <!-- Read in the stylesheet definition -->
>   <p:processor name="oxf:url-generator">
>       <p:input name="config">
>           <config>
>               <url>transform.xsl</url>
>               <content-type>text/xml</content-type>
>               <validating>false</validating>
>               <handle-xinclude>false</handle-xinclude>
>           </config>
>       </p:input>
>       <p:output name="data" id="firstXslt" debug="firstXSLT"/>
>   </p:processor>
>
>   <!-- Read in the source XML -->
>   <p:processor name="oxf:url-generator">
>       <p:input name="config">
>           <config>
>               <url>smith.hotels.xml</url>
>               <content-type>text/xml</content-type>
>               <validating>false</validating>
>               <handle-xinclude>false</handle-xinclude>
>           </config>
>       </p:input>
>       <p:output name="data" id="smithXml" debug="smithXml"/>
>   </p:processor>
>
>   <!-- Create the Escenic format: Apply the stylesheet to the source  
> xml  -->
>   <p:processor name="oxf:xslt">
>       <p:input name="data" href="#smithXml" debug="smithXml"/>
>       <p:input name="config" href="#firstXslt" debug="firstXslt"/>
>       <p:output name="data" id="escenicXml" debug="escenicXml"/>
>   </p:processor>
>
>   <!-- Wired off, just send the transformed XML back to the client
> for now (using the identity processor below) -->
>   <!-- Call the REST webservice -->
>   <!--p:processor name="oxf:xforms-submission">
>       <p:input name="submission">
>           <xforms:submission method="put"
> action="http://localhost:8080/timmy/import"/>
>       </p:input>
>       <p:input name="request" href="#escenicXml" debug="escenicXml"/>
>       <p:output name="response" ref="data" debug="response"/>
>   </p:processor-->
>
>  <!-- Just return the transformed XML to the user for now.
>       Once we get this right, will send it to the webservice instead
> (see above) -->
>   <p:processor name="oxf:identity">
>       <p:input name="data" href="#escenicXml" debug="escenicXml"/>
>       <p:output name="data" ref="data" debug="same"/>
>   </p:processor>
>
> </p:config>
>
> And here is the stack trace:
>
> java.lang.OutOfMemoryError: Java heap space
>       at org.orbeon.oxf.xml.SAXStore.addToCharBuffer(SAXStore.java:
> 424)
>       at org.orbeon.oxf.xml.SAXStore.characters(SAXStore.java:269)
>       at org.orbeon.oxf.xml.SAXStore.replay(SAXStore.java:197)
>       at org.orbeon.oxf.processor.pipeline.TeeProcessor
> $1.readImpl(TeeProcessor.java:61)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $1400(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $6.run(PipelineProcessor.java:564)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeParents(ProcessorImpl.java:536)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $1500(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $InternalTopOutput.readImpl(PipelineProcessor.java:560)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>       at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>
> The exception does not always occur, but appears more frequent with
> multiple parallel requests (as expected). I am also seeing Broken Pipe
> socket exceptions in the epilogue XPL (when we don't get OutOfMemory
> errors), which I think is related to the size of the XML document
> returned from the above XPL:
>
> 2008-08-15 15:05:34,250 ERROR ProcessorService  - Exception at line
> 348, column 55 of oxf:/config/epilogue-servlet.xpl (reading processor
> output: name='data', id='converted')
> java.net.SocketException: Broken pipe
>       at java.net.SocketOutputStream.socketWrite0(Native Method)
>       at  
> java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
>       at java.net.SocketOutputStream.write(SocketOutputStream.java:
> 136)
>       at  
> org
> .apache
> .coyote
> .http11
> .InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:747)
>       at  
> org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:432)
>       at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:
> 347)
>       at org.apache.coyote.http11.InternalOutputBuffer
> $OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:770)
>       at  
> org
> .apache
> .coyote
> .http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:
> 126)
>       at  
> org
> .apache
> .coyote
> .http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:580)
>       at org.apache.coyote.Response.doWrite(Response.java:560)
>       at  
> org
> .apache
> .catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:361)
>       at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:
> 323)
>       at  
> org
> .apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:
> 392)
>       at  
> org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:
> 381)
>       at  
> org
> .apache
> .catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:
> 89)
>       at  
> org
> .orbeon
> .oxf
> .processor
> .serializer
> .store.ResultStoreOutputStream.write(ResultStoreOutputStream.java:47)
>       at sun.nio.cs.StreamEncoder
> $CharsetSE.writeBytes(StreamEncoder.java:336)
>       at sun.nio.cs.StreamEncoder
> $CharsetSE.implWrite(StreamEncoder.java:395)
>       at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:136)
>       at java.io.OutputStreamWriter.write(OutputStreamWriter.java:191)
>       at  
> org
> .orbeon
> .oxf.util.TextContentHandler.characters(TextContentHandler.java:22)
>       at  
> org
> .orbeon
> .oxf
> .processor
> .serializer
> .BinaryTextContentHandler.characters(BinaryTextContentHandler.java:
> 166)
>       at  
> org
> .orbeon
> .oxf.util.ContentHandlerWriter.write(ContentHandlerWriter.java:95)
>       at org.orbeon.saxon.tinytree.CharSlice.write(CharSlice.java:170)
>       at  
> org.orbeon.saxon.event.XMLEmitter.writeCharSequence(XMLEmitter.java:
> 595)
>       at  
> org.orbeon.saxon.event.XMLEmitter.writeEscape(XMLEmitter.java:686)
>       at  
> org.orbeon.saxon.event.XMLEmitter.characters(XMLEmitter.java:550)
>       at  
> org
> .orbeon
> .saxon
> .event.ReceivingContentHandler.flush(ReceivingContentHandler.java:425)
>       at  
> org
> .orbeon
> .saxon
> .event
> .ReceivingContentHandler.endElement(ReceivingContentHandler.java:332)
>       at  
> org
> .orbeon
> .oxf
> .xml
> .ForwardingContentHandler.endElement(ForwardingContentHandler.java:52)
>       at  
> org
> .orbeon
> .oxf
> .xml
> .ForwardingContentHandler.endElement(ForwardingContentHandler.java:52)
>       at org.orbeon.oxf.xml.SAXStore.replay(SAXStore.java:201)
>       at org.orbeon.oxf.processor.pipeline.TeeProcessor
> $1.readImpl(TeeProcessor.java:61)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $1400(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $6.run(PipelineProcessor.java:564)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeParents(ProcessorImpl.java:536)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $1500(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $InternalTopOutput.readImpl(PipelineProcessor.java:560)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at  
> org
> .orbeon
> .oxf
> .processor
> .serializer.legacy.XMLSerializer.readInput(XMLSerializer.java:58)
>       at org.orbeon.oxf.processor.serializer.HttpTextSerializer
> $1.readImpl(HttpTextSerializer.java:101)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at  
> org
> .orbeon
> .oxf
> .processor.serializer.HttpSerializer.readInput(HttpSerializer.java:42)
>       at org.orbeon.oxf.processor.serializer.HttpSerializerBase
> $1.read(HttpSerializerBase.java:151)
>       at  
> org
> .orbeon
> .oxf
> .processor.ProcessorImpl.readCacheInputAsObject(ProcessorImpl.java:
> 452)
>       at  
> org
> .orbeon
> .oxf
> .processor
> .serializer.HttpSerializerBase.start(HttpSerializerBase.java:142)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>       at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>       at  
> org
> .orbeon
> .oxf
> .processor
> .pipeline
> .choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:
> 230)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>       at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>       at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>       at  
> org
> .orbeon
> .oxf
> .processor
> .pipeline
> .choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:
> 230)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>       at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>       at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>       at  
> org
> .orbeon
> .oxf
> .processor
> .pipeline
> .choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:
> 230)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>       at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>       at  
> org
> .orbeon
> .oxf
> .processor
> .PageFlowControllerProcessor.start(PageFlowControllerProcessor.java:
> 489)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>       at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.getInput(PipelineProcessor.java:136)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:85)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>       at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>       at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>       at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>       at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>       at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>       at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>       at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>       at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>       at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>       at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $1400(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $6.run(PipelineProcessor.java:564)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeParents(ProcessorImpl.java:536)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $1500(PipelineProcessor.java:62)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $InternalTopOutput.readImpl(PipelineProcessor.java:560)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>       at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>       at  
> org.orbeon.oxf.processor.NullSerializer.start(NullSerializer.java:31)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>       at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>       at  
> org
> .orbeon
> .oxf
> .processor
> .pipeline
> .choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:
> 230)
>       at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>       at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>       at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>       at  
> org
> .orbeon
> .oxf
> .processor
> .PageFlowControllerProcessor.start(PageFlowControllerProcessor.java:
> 489)
>       at  
> org.orbeon.oxf.pipeline.InitUtils.runProcessor(InitUtils.java:95)
>       at  
> org.orbeon.oxf.webapp.ProcessorService.service(ProcessorService.java:
> 96)
>       at  
> org
> .orbeon
> .oxf.servlet.OPSServletDelegate.service(OPSServletDelegate.java:148)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>       at  
> org
> .apache
> .catalina
> .core
> .ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
> 269)
>       at  
> org
> .apache
> .catalina
> .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>       at  
> org
> .apache
> .catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:
> 213)
>       at  
> org
> .apache
> .catalina.core.StandardContextValve.invoke(StandardContextValve.java:
> 174)
>       at  
> org
> .apache
> .catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>       at  
> org
> .apache
> .catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
>       at  
> org
> .apache
> .catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:
> 108)
>       at  
> org
> .apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
> 174)
>       at  
> org
> .apache.coyote.http11.Http11Processor.process(Http11Processor.java:
> 874)
>       at org.apache.coyote.http11.Http11BaseProtocol
> $Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:
> 665)
>       at  
> org
> .apache
> .tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:
> 528)
>       at  
> org
> .apache
> .tomcat
> .util
> .net
> .LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
>       at org.apache.tomcat.util.threads.ThreadPool
> $ControlRunnable.run(ThreadPool.java:689)
>       at java.lang.Thread.run(Thread.java:613)
>
>
> Is it the size of the input / source XML that causes an OutOfMemory
> error? How about these broken pipes? If so, is there anything I can do
> to resolve this (except from  -Xmx<size> )? Does anyone else have
> experiences with dealing with large XML documents as inputs and/or
> outputs? Am I just abusing Orbeon Forms with this type of use case?
>
> Any insight would be much appreciated. Many thanks!
>
> Sincerely,
> Henrik Pettersen
>
> --
> You receive this message as a subscriber of the [hidden email]  
> mailing list.
> To unsubscribe: mailto:[hidden email]
> For general help: mailto:[hidden email]?subject=help
> OW2 mailing lists service home page: http://www.ow2.org/wws
>
> --
> Orbeon Forms - Web Forms for the Enterprise Done the Right Way
> http://www.orbeon.com/
>
>
>
> --
> You receive this message as a subscriber of the [hidden email]  
> mailing list.
> To unsubscribe: mailto:[hidden email]
> For general help: mailto:[hidden email]?subject=help
> OW2 mailing lists service home page: http://www.ow2.org/wws
>
>
>
> --
> You receive this message as a subscriber of the [hidden email]  
> mailing list.
> To unsubscribe: mailto:[hidden email]
> For general help: mailto:[hidden email]?subject=help
> OW2 mailing lists service home page: http://www.ow2.org/wws
--
Orbeon Forms - Web Forms for the Enterprise Done the Right Way
http://www.orbeon.com/



--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws
Reply | Threaded
Open this post in threaded view
|

Re: Re: Re: Re: SAX, DOM, large XML documents and java.lang.OutOfMemory Errors

Henrik Pettersen
Hi Erik,

that's very helpful, thank you. Is oxf:xforms-submission the preferred way to call a REST style webservice, then?

Henrik

On Mon, Aug 18, 2008 at 12:40 AM, Erik Bruchez <[hidden email]> wrote:
Henrik,

I don't think there is specific documentation on that. On top of my head:

* oxf:url-generator is able to stream
* oxf:http-serializer is able to stream
* pretty much anything else doesn't ;-)

oxf:xforms-submission uses XLST to build an XForm state, so here you will even possibly have several DOMs in memory possibly at the same time.

-Erik


On Aug 17, 2008, at 2:02 PM, Henrik Pettersen wrote:

Hi Erik,

thank you for coming back to me, that makes sense to me. Is there any documentation on how the different processors handle the XML (DOM/SAX)? You mentioned a tinytree being built for XSLT, how about the oxf:xforms-submission processor?

Many thanks!

Henrik

On Sun, Aug 17, 2008 at 8:29 PM, Erik Bruchez <[hidden email]> wrote:
Henrik,

Processors do communicate through SAX, but individual processors may not stream. In particular:

* XSLT doesn't stream, it will create a Saxon TinyTree for the input document.
* The XForms processor also creates DOM trees before processing.

I would say the case where you can do streaming is the exception rather than the rule.

-Erik


On Aug 17, 2008, at 11:57 AM, Henrik Pettersen wrote:

All,

my email seems to be stuck in some sort of email filter, so I am
re-posting, this time providing a link for you to download the
attachment instead:
http://swiki.sparklingideas.co.uk/smith.zip

Thank you.

Henrik

All,

I have a question about how Orbeon works internally, how it uses DOM
(it doesn't?) and SAX, and how Orbeon manages its memory.

My problem is that I am getting a "java.lang.OutOfMemoryError: Java
heap space" when I am parsing larger XML documents with the below
pipeline definition. This is (to me) somewhat unexpected, as I
imagined we are talking SAX events all the way,  (hopefully) making
the size of the input XML irrelevant. As a solution, I could of course
increase the heap space, but what would happen if I then sent a really
humongous XML document to my pipeline?

I have attached a zip file with a self contained application that
(sometimes) causes a OutOfMemory error when run on the default
settings of Tomcat 5.5.26, OS X 10.4 and Java 1.5.0_13-b05-241.

Here is my XPL definition:

<p:config xmlns:p="http://www.orbeon.com/oxf/pipeline"
 xmlns:oxf="http://www.orbeon.com/oxf/processors"
 xmlns:xs="http://www.w3.org/2001/XMLSchema"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xforms="http://www.w3.org/2002/xforms">

 <!-- p:param name="instance" type="input"/ -->
 <p:param name="data" type="output"/>

 <!-- Read in the stylesheet definition -->
 <p:processor name="oxf:url-generator">
     <p:input name="config">
         <config>
             <url>transform.xsl</url>
             <content-type>text/xml</content-type>
             <validating>false</validating>
             <handle-xinclude>false</handle-xinclude>
         </config>
     </p:input>
     <p:output name="data" id="firstXslt" debug="firstXSLT"/>
 </p:processor>

 <!-- Read in the source XML -->
 <p:processor name="oxf:url-generator">
     <p:input name="config">
         <config>
             <url>smith.hotels.xml</url>
             <content-type>text/xml</content-type>
             <validating>false</validating>
             <handle-xinclude>false</handle-xinclude>
         </config>
     </p:input>
     <p:output name="data" id="smithXml" debug="smithXml"/>
 </p:processor>

 <!-- Create the Escenic format: Apply the stylesheet to the source xml  -->
 <p:processor name="oxf:xslt">
     <p:input name="data" href="#smithXml" debug="smithXml"/>
     <p:input name="config" href="#firstXslt" debug="firstXslt"/>
     <p:output name="data" id="escenicXml" debug="escenicXml"/>
 </p:processor>

 <!-- Wired off, just send the transformed XML back to the client
for now (using the identity processor below) -->
 <!-- Call the REST webservice -->
 <!--p:processor name="oxf:xforms-submission">
     <p:input name="submission">
         <xforms:submission method="put"
action="http://localhost:8080/timmy/import"/>
     </p:input>
     <p:input name="request" href="#escenicXml" debug="escenicXml"/>
     <p:output name="response" ref="data" debug="response"/>
 </p:processor-->

 <!-- Just return the transformed XML to the user for now.
     Once we get this right, will send it to the webservice instead
(see above) -->
 <p:processor name="oxf:identity">
     <p:input name="data" href="#escenicXml" debug="escenicXml"/>
     <p:output name="data" ref="data" debug="same"/>
 </p:processor>

</p:config>

And here is the stack trace:

java.lang.OutOfMemoryError: Java heap space
     at org.orbeon.oxf.xml.SAXStore.addToCharBuffer(SAXStore.java:424)
     at org.orbeon.oxf.xml.SAXStore.characters(SAXStore.java:269)
     at org.orbeon.oxf.xml.SAXStore.replay(SAXStore.java:197)
     at org.orbeon.oxf.processor.pipeline.TeeProcessor$1.readImpl(TeeProcessor.java:61)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$1400(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$6.run(PipelineProcessor.java:564)
     at org.orbeon.oxf.processor.ProcessorImpl.executeParents(ProcessorImpl.java:536)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$1500(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$InternalTopOutput.readImpl(PipelineProcessor.java:560)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
     at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
     at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)

The exception does not always occur, but appears more frequent with
multiple parallel requests (as expected). I am also seeing Broken Pipe
socket exceptions in the epilogue XPL (when we don't get OutOfMemory
errors), which I think is related to the size of the XML document
returned from the above XPL:

2008-08-15 15:05:34,250 ERROR ProcessorService  - Exception at line
348, column 55 of oxf:/config/epilogue-servlet.xpl (reading processor
output: name='data', id='converted')
java.net.SocketException: Broken pipe
     at java.net.SocketOutputStream.socketWrite0(Native Method)
     at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
     at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
     at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:747)
     at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:432)
     at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:347)
     at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:770)
     at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:126)
     at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:580)
     at org.apache.coyote.Response.doWrite(Response.java:560)
     at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:361)
     at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:323)
     at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:392)
     at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:381)
     at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
     at org.orbeon.oxf.processor.serializer.store.ResultStoreOutputStream.write(ResultStoreOutputStream.java:47)
     at sun.nio.cs.StreamEncoder$CharsetSE.writeBytes(StreamEncoder.java:336)
     at sun.nio.cs.StreamEncoder$CharsetSE.implWrite(StreamEncoder.java:395)
     at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:136)
     at java.io.OutputStreamWriter.write(OutputStreamWriter.java:191)
     at org.orbeon.oxf.util.TextContentHandler.characters(TextContentHandler.java:22)
     at org.orbeon.oxf.processor.serializer.BinaryTextContentHandler.characters(BinaryTextContentHandler.java:166)
     at org.orbeon.oxf.util.ContentHandlerWriter.write(ContentHandlerWriter.java:95)
     at org.orbeon.saxon.tinytree.CharSlice.write(CharSlice.java:170)
     at org.orbeon.saxon.event.XMLEmitter.writeCharSequence(XMLEmitter.java:595)
     at org.orbeon.saxon.event.XMLEmitter.writeEscape(XMLEmitter.java:686)
     at org.orbeon.saxon.event.XMLEmitter.characters(XMLEmitter.java:550)
     at org.orbeon.saxon.event.ReceivingContentHandler.flush(ReceivingContentHandler.java:425)
     at org.orbeon.saxon.event.ReceivingContentHandler.endElement(ReceivingContentHandler.java:332)
     at org.orbeon.oxf.xml.ForwardingContentHandler.endElement(ForwardingContentHandler.java:52)
     at org.orbeon.oxf.xml.ForwardingContentHandler.endElement(ForwardingContentHandler.java:52)
     at org.orbeon.oxf.xml.SAXStore.replay(SAXStore.java:201)
     at org.orbeon.oxf.processor.pipeline.TeeProcessor$1.readImpl(TeeProcessor.java:61)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$1400(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$6.run(PipelineProcessor.java:564)
     at org.orbeon.oxf.processor.ProcessorImpl.executeParents(ProcessorImpl.java:536)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$1500(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$InternalTopOutput.readImpl(PipelineProcessor.java:560)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.serializer.legacy.XMLSerializer.readInput(XMLSerializer.java:58)
     at org.orbeon.oxf.processor.serializer.HttpTextSerializer$1.readImpl(HttpTextSerializer.java:101)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.serializer.HttpSerializer.readInput(HttpSerializer.java:42)
     at org.orbeon.oxf.processor.serializer.HttpSerializerBase$1.read(HttpSerializerBase.java:151)
     at org.orbeon.oxf.processor.ProcessorImpl.readCacheInputAsObject(ProcessorImpl.java:452)
     at org.orbeon.oxf.processor.serializer.HttpSerializerBase.start(HttpSerializerBase.java:142)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
     at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
     at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:230)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
     at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
     at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
     at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:230)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
     at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
     at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
     at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:230)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
     at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
     at org.orbeon.oxf.processor.PageFlowControllerProcessor.start(PageFlowControllerProcessor.java:489)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
     at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.getInput(PipelineProcessor.java:136)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:85)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
     at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
     at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
     at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
     at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
     at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
     at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
     at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
     at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
     at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
     at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
     at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
     at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
     at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
     at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
     at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
     at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
     at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
     at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
     at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$1400(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$6.run(PipelineProcessor.java:564)
     at org.orbeon.oxf.processor.ProcessorImpl.executeParents(ProcessorImpl.java:536)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$1500(PipelineProcessor.java:62)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$InternalTopOutput.readImpl(PipelineProcessor.java:560)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
     at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
     at org.orbeon.oxf.processor.NullSerializer.start(NullSerializer.java:31)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
     at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
     at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:230)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
     at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
     at org.orbeon.oxf.processor.PageFlowControllerProcessor.start(PageFlowControllerProcessor.java:489)
     at org.orbeon.oxf.pipeline.InitUtils.runProcessor(InitUtils.java:95)
     at org.orbeon.oxf.webapp.ProcessorService.service(ProcessorService.java:96)
     at org.orbeon.oxf.servlet.OPSServletDelegate.service(OPSServletDelegate.java:148)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
     at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
     at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
     at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
     at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
     at java.lang.Thread.run(Thread.java:613)


Is it the size of the input / source XML that causes an OutOfMemory
error? How about these broken pipes? If so, is there anything I can do
to resolve this (except from  -Xmx<size> )? Does anyone else have
experiences with dealing with large XML documents as inputs and/or
outputs? Am I just abusing Orbeon Forms with this type of use case?

Any insight would be much appreciated. Many thanks!

Sincerely,
Henrik Pettersen

--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws

--
Orbeon Forms - Web Forms for the Enterprise Done the Right Way
http://www.orbeon.com/



--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws



--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws

--
Orbeon Forms - Web Forms for the Enterprise Done the Right Way
http://www.orbeon.com/



--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws




--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws
Reply | Threaded
Open this post in threaded view
|

Re: Re: Re: Re: Re: SAX, DOM, large XML documents and java.lang.OutOfMemory Errors

Erik Bruchez
Administrator
Yes that, or directly calling services from an XForms page.

-Erik

On Aug 17, 2008, at 5:33 PM, Henrik Pettersen wrote:

> Hi Erik,
>
> that's very helpful, thank you. Is oxf:xforms-submission the  
> preferred way to call a REST style webservice, then?
>
> Henrik
>
> On Mon, Aug 18, 2008 at 12:40 AM, Erik Bruchez <[hidden email]>  
> wrote:
> Henrik,
>
> I don't think there is specific documentation on that. On top of my  
> head:
>
> * oxf:url-generator is able to stream
> * oxf:http-serializer is able to stream
> * pretty much anything else doesn't ;-)
>
> oxf:xforms-submission uses XLST to build an XForm state, so here you  
> will even possibly have several DOMs in memory possibly at the same  
> time.
>
> -Erik
>
>
> On Aug 17, 2008, at 2:02 PM, Henrik Pettersen wrote:
>
> Hi Erik,
>
> thank you for coming back to me, that makes sense to me. Is there  
> any documentation on how the different processors handle the XML  
> (DOM/SAX)? You mentioned a tinytree being built for XSLT, how about  
> the oxf:xforms-submission processor?
>
> Many thanks!
>
> Henrik
>
> On Sun, Aug 17, 2008 at 8:29 PM, Erik Bruchez <[hidden email]>  
> wrote:
> Henrik,
>
> Processors do communicate through SAX, but individual processors may  
> not stream. In particular:
>
> * XSLT doesn't stream, it will create a Saxon TinyTree for the input  
> document.
> * The XForms processor also creates DOM trees before processing.
>
> I would say the case where you can do streaming is the exception  
> rather than the rule.
>
> -Erik
>
>
> On Aug 17, 2008, at 11:57 AM, Henrik Pettersen wrote:
>
> All,
>
> my email seems to be stuck in some sort of email filter, so I am
> re-posting, this time providing a link for you to download the
> attachment instead:
> http://swiki.sparklingideas.co.uk/smith.zip
>
> Thank you.
>
> Henrik
>
> All,
>
> I have a question about how Orbeon works internally, how it uses DOM
> (it doesn't?) and SAX, and how Orbeon manages its memory.
>
> My problem is that I am getting a "java.lang.OutOfMemoryError: Java
> heap space" when I am parsing larger XML documents with the below
> pipeline definition. This is (to me) somewhat unexpected, as I
> imagined we are talking SAX events all the way,  (hopefully) making
> the size of the input XML irrelevant. As a solution, I could of course
> increase the heap space, but what would happen if I then sent a really
> humongous XML document to my pipeline?
>
> I have attached a zip file with a self contained application that
> (sometimes) causes a OutOfMemory error when run on the default
> settings of Tomcat 5.5.26, OS X 10.4 and Java 1.5.0_13-b05-241.
>
> Here is my XPL definition:
>
> <p:config xmlns:p="http://www.orbeon.com/oxf/pipeline"
>  xmlns:oxf="http://www.orbeon.com/oxf/processors"
>  xmlns:xs="http://www.w3.org/2001/XMLSchema"
>  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>  xmlns:xforms="http://www.w3.org/2002/xforms">
>
>  <!-- p:param name="instance" type="input"/ -->
>  <p:param name="data" type="output"/>
>
>  <!-- Read in the stylesheet definition -->
>  <p:processor name="oxf:url-generator">
>      <p:input name="config">
>          <config>
>              <url>transform.xsl</url>
>              <content-type>text/xml</content-type>
>              <validating>false</validating>
>              <handle-xinclude>false</handle-xinclude>
>          </config>
>      </p:input>
>      <p:output name="data" id="firstXslt" debug="firstXSLT"/>
>  </p:processor>
>
>  <!-- Read in the source XML -->
>  <p:processor name="oxf:url-generator">
>      <p:input name="config">
>          <config>
>              <url>smith.hotels.xml</url>
>              <content-type>text/xml</content-type>
>              <validating>false</validating>
>              <handle-xinclude>false</handle-xinclude>
>          </config>
>      </p:input>
>      <p:output name="data" id="smithXml" debug="smithXml"/>
>  </p:processor>
>
>  <!-- Create the Escenic format: Apply the stylesheet to the source  
> xml  -->
>  <p:processor name="oxf:xslt">
>      <p:input name="data" href="#smithXml" debug="smithXml"/>
>      <p:input name="config" href="#firstXslt" debug="firstXslt"/>
>      <p:output name="data" id="escenicXml" debug="escenicXml"/>
>  </p:processor>
>
>  <!-- Wired off, just send the transformed XML back to the client
> for now (using the identity processor below) -->
>  <!-- Call the REST webservice -->
>  <!--p:processor name="oxf:xforms-submission">
>      <p:input name="submission">
>          <xforms:submission method="put"
> action="http://localhost:8080/timmy/import"/>
>      </p:input>
>      <p:input name="request" href="#escenicXml" debug="escenicXml"/>
>      <p:output name="response" ref="data" debug="response"/>
>  </p:processor-->
>
>  <!-- Just return the transformed XML to the user for now.
>      Once we get this right, will send it to the webservice instead
> (see above) -->
>  <p:processor name="oxf:identity">
>      <p:input name="data" href="#escenicXml" debug="escenicXml"/>
>      <p:output name="data" ref="data" debug="same"/>
>  </p:processor>
>
> </p:config>
>
> And here is the stack trace:
>
> java.lang.OutOfMemoryError: Java heap space
>      at org.orbeon.oxf.xml.SAXStore.addToCharBuffer(SAXStore.java:424)
>      at org.orbeon.oxf.xml.SAXStore.characters(SAXStore.java:269)
>      at org.orbeon.oxf.xml.SAXStore.replay(SAXStore.java:197)
>      at org.orbeon.oxf.processor.pipeline.TeeProcessor
> $1.readImpl(TeeProcessor.java:61)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $1400(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $6.run(PipelineProcessor.java:564)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeParents(ProcessorImpl.java:536)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $1500(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $InternalTopOutput.readImpl(PipelineProcessor.java:560)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>      at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>
> The exception does not always occur, but appears more frequent with
> multiple parallel requests (as expected). I am also seeing Broken Pipe
> socket exceptions in the epilogue XPL (when we don't get OutOfMemory
> errors), which I think is related to the size of the XML document
> returned from the above XPL:
>
> 2008-08-15 15:05:34,250 ERROR ProcessorService  - Exception at line
> 348, column 55 of oxf:/config/epilogue-servlet.xpl (reading processor
> output: name='data', id='converted')
> java.net.SocketException: Broken pipe
>      at java.net.SocketOutputStream.socketWrite0(Native Method)
>      at  
> java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
>      at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
>      at  
> org
> .apache
> .coyote
> .http11
> .InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:747)
>      at  
> org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:432)
>      at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:
> 347)
>      at org.apache.coyote.http11.InternalOutputBuffer
> $OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:770)
>      at  
> org
> .apache
> .coyote
> .http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:
> 126)
>      at  
> org
> .apache
> .coyote
> .http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:580)
>      at org.apache.coyote.Response.doWrite(Response.java:560)
>      at  
> org
> .apache
> .catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:361)
>      at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:
> 323)
>      at  
> org
> .apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:
> 392)
>      at  
> org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:
> 381)
>      at  
> org
> .apache
> .catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:
> 89)
>      at  
> org
> .orbeon
> .oxf
> .processor
> .serializer
> .store.ResultStoreOutputStream.write(ResultStoreOutputStream.java:47)
>      at sun.nio.cs.StreamEncoder
> $CharsetSE.writeBytes(StreamEncoder.java:336)
>      at sun.nio.cs.StreamEncoder
> $CharsetSE.implWrite(StreamEncoder.java:395)
>      at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:136)
>      at java.io.OutputStreamWriter.write(OutputStreamWriter.java:191)
>      at  
> org
> .orbeon
> .oxf.util.TextContentHandler.characters(TextContentHandler.java:22)
>      at  
> org
> .orbeon
> .oxf
> .processor
> .serializer
> .BinaryTextContentHandler.characters(BinaryTextContentHandler.java:
> 166)
>      at  
> org
> .orbeon
> .oxf.util.ContentHandlerWriter.write(ContentHandlerWriter.java:95)
>      at org.orbeon.saxon.tinytree.CharSlice.write(CharSlice.java:170)
>      at  
> org.orbeon.saxon.event.XMLEmitter.writeCharSequence(XMLEmitter.java:
> 595)
>      at  
> org.orbeon.saxon.event.XMLEmitter.writeEscape(XMLEmitter.java:686)
>      at org.orbeon.saxon.event.XMLEmitter.characters(XMLEmitter.java:
> 550)
>      at  
> org
> .orbeon
> .saxon
> .event.ReceivingContentHandler.flush(ReceivingContentHandler.java:425)
>      at  
> org
> .orbeon
> .saxon
> .event
> .ReceivingContentHandler.endElement(ReceivingContentHandler.java:332)
>      at  
> org
> .orbeon
> .oxf
> .xml
> .ForwardingContentHandler.endElement(ForwardingContentHandler.java:52)
>      at  
> org
> .orbeon
> .oxf
> .xml
> .ForwardingContentHandler.endElement(ForwardingContentHandler.java:52)
>      at org.orbeon.oxf.xml.SAXStore.replay(SAXStore.java:201)
>      at org.orbeon.oxf.processor.pipeline.TeeProcessor
> $1.readImpl(TeeProcessor.java:61)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $1400(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $6.run(PipelineProcessor.java:564)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeParents(ProcessorImpl.java:536)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $1500(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $InternalTopOutput.readImpl(PipelineProcessor.java:560)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at  
> org
> .orbeon
> .oxf
> .processor
> .serializer.legacy.XMLSerializer.readInput(XMLSerializer.java:58)
>      at org.orbeon.oxf.processor.serializer.HttpTextSerializer
> $1.readImpl(HttpTextSerializer.java:101)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at  
> org
> .orbeon
> .oxf
> .processor.serializer.HttpSerializer.readInput(HttpSerializer.java:42)
>      at org.orbeon.oxf.processor.serializer.HttpSerializerBase
> $1.read(HttpSerializerBase.java:151)
>      at  
> org
> .orbeon
> .oxf
> .processor.ProcessorImpl.readCacheInputAsObject(ProcessorImpl.java:
> 452)
>      at  
> org
> .orbeon
> .oxf
> .processor
> .serializer.HttpSerializerBase.start(HttpSerializerBase.java:142)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>      at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>      at  
> org
> .orbeon
> .oxf
> .processor
> .pipeline
> .choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:
> 230)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>      at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>      at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>      at  
> org
> .orbeon
> .oxf
> .processor
> .pipeline
> .choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:
> 230)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>      at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>      at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>      at  
> org
> .orbeon
> .oxf
> .processor
> .pipeline
> .choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:
> 230)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>      at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>      at  
> org
> .orbeon
> .oxf
> .processor
> .PageFlowControllerProcessor.start(PageFlowControllerProcessor.java:
> 489)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>      at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.getInput(PipelineProcessor.java:136)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:85)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>      at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>      at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>      at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>      at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>      at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>      at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>      at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>      at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>      at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>      at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $1400(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $6.run(PipelineProcessor.java:564)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeParents(ProcessorImpl.java:536)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $1500(PipelineProcessor.java:62)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $InternalTopOutput.readImpl(PipelineProcessor.java:560)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>      at  
> org.orbeon.oxf.processor.NullSerializer.start(NullSerializer.java:31)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>      at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>      at  
> org
> .orbeon
> .oxf
> .processor
> .pipeline
> .choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:
> 230)
>      at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>      at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>      at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>      at  
> org
> .orbeon
> .oxf
> .processor
> .PageFlowControllerProcessor.start(PageFlowControllerProcessor.java:
> 489)
>      at  
> org.orbeon.oxf.pipeline.InitUtils.runProcessor(InitUtils.java:95)
>      at  
> org.orbeon.oxf.webapp.ProcessorService.service(ProcessorService.java:
> 96)
>      at  
> org
> .orbeon
> .oxf.servlet.OPSServletDelegate.service(OPSServletDelegate.java:148)
>      at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>      at  
> org
> .apache
> .catalina
> .core
> .ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
> 269)
>      at  
> org
> .apache
> .catalina
> .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>      at  
> org
> .apache
> .catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:
> 213)
>      at  
> org
> .apache
> .catalina.core.StandardContextValve.invoke(StandardContextValve.java:
> 174)
>      at  
> org
> .apache
> .catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>      at  
> org
> .apache
> .catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
>      at  
> org
> .apache
> .catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:
> 108)
>      at  
> org
> .apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
> 174)
>      at  
> org
> .apache.coyote.http11.Http11Processor.process(Http11Processor.java:
> 874)
>      at org.apache.coyote.http11.Http11BaseProtocol
> $Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:
> 665)
>      at  
> org
> .apache
> .tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:
> 528)
>      at  
> org
> .apache
> .tomcat
> .util
> .net
> .LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
>      at org.apache.tomcat.util.threads.ThreadPool
> $ControlRunnable.run(ThreadPool.java:689)
>      at java.lang.Thread.run(Thread.java:613)
>
>
> Is it the size of the input / source XML that causes an OutOfMemory
> error? How about these broken pipes? If so, is there anything I can do
> to resolve this (except from  -Xmx<size> )? Does anyone else have
> experiences with dealing with large XML documents as inputs and/or
> outputs? Am I just abusing Orbeon Forms with this type of use case?
>
> Any insight would be much appreciated. Many thanks!
>
> Sincerely,
> Henrik Pettersen
>
> --
> You receive this message as a subscriber of the [hidden email]  
> mailing list.
> To unsubscribe: mailto:[hidden email]
> For general help: mailto:[hidden email]?subject=help
> OW2 mailing lists service home page: http://www.ow2.org/wws
>
> --
> Orbeon Forms - Web Forms for the Enterprise Done the Right Way
> http://www.orbeon.com/
>
>
>
> --
> You receive this message as a subscriber of the [hidden email]  
> mailing list.
> To unsubscribe: mailto:[hidden email]
> For general help: mailto:[hidden email]?subject=help
> OW2 mailing lists service home page: http://www.ow2.org/wws
>
>
>
> --
> You receive this message as a subscriber of the [hidden email]  
> mailing list.
> To unsubscribe: mailto:[hidden email]
> For general help: mailto:[hidden email]?subject=help
> OW2 mailing lists service home page: http://www.ow2.org/wws
>
> --
> Orbeon Forms - Web Forms for the Enterprise Done the Right Way
> http://www.orbeon.com/
>
>
>
> --
> You receive this message as a subscriber of the [hidden email]  
> mailing list.
> To unsubscribe: mailto:[hidden email]
> For general help: mailto:[hidden email]?subject=help
> OW2 mailing lists service home page: http://www.ow2.org/wws
>
>
>
> --
> You receive this message as a subscriber of the [hidden email]  
> mailing list.
> To unsubscribe: mailto:[hidden email]
> For general help: mailto:[hidden email]?subject=help
> OW2 mailing lists service home page: http://www.ow2.org/wws
--
Orbeon Forms - Web Forms for the Enterprise Done the Right Way
http://www.orbeon.com/



--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws
Reply | Threaded
Open this post in threaded view
|

Re: Re: Re: Re: Re: Re: SAX, DOM, large XML documents and java.lang.OutOfMemory Errors

Henrik Pettersen
Hi Erik,

thank you, that's very helpful. I'll probably end up writing my own Orbeon extension, then, for consuming REST style web services (using streaming / SAX).

XPL is such a great web service integration / process control language, a resource-friendly REST style web service consumer seems like a natural extension of your allready extensive library of processors. Feature request, perhaps? I'll be sure to share any Orbeon extension code with you all, should I get that far...

Many thanks!

Henrik

On Mon, Aug 18, 2008 at 6:02 AM, Erik Bruchez <[hidden email]> wrote:
Yes that, or directly calling services from an XForms page.

-Erik


On Aug 17, 2008, at 5:33 PM, Henrik Pettersen wrote:

Hi Erik,

that's very helpful, thank you. Is oxf:xforms-submission the preferred way to call a REST style webservice, then?

Henrik

On Mon, Aug 18, 2008 at 12:40 AM, Erik Bruchez <[hidden email]> wrote:
Henrik,

I don't think there is specific documentation on that. On top of my head:

* oxf:url-generator is able to stream
* oxf:http-serializer is able to stream
* pretty much anything else doesn't ;-)

oxf:xforms-submission uses XLST to build an XForm state, so here you will even possibly have several DOMs in memory possibly at the same time.

-Erik


On Aug 17, 2008, at 2:02 PM, Henrik Pettersen wrote:

Hi Erik,

thank you for coming back to me, that makes sense to me. Is there any documentation on how the different processors handle the XML (DOM/SAX)? You mentioned a tinytree being built for XSLT, how about the oxf:xforms-submission processor?

Many thanks!

Henrik

On Sun, Aug 17, 2008 at 8:29 PM, Erik Bruchez <[hidden email]> wrote:
Henrik,

Processors do communicate through SAX, but individual processors may not stream. In particular:

* XSLT doesn't stream, it will create a Saxon TinyTree for the input document.
* The XForms processor also creates DOM trees before processing.

I would say the case where you can do streaming is the exception rather than the rule.

-Erik


On Aug 17, 2008, at 11:57 AM, Henrik Pettersen wrote:

All,

my email seems to be stuck in some sort of email filter, so I am
re-posting, this time providing a link for you to download the
attachment instead:
http://swiki.sparklingideas.co.uk/smith.zip

Thank you.

Henrik

All,

I have a question about how Orbeon works internally, how it uses DOM
(it doesn't?) and SAX, and how Orbeon manages its memory.

My problem is that I am getting a "java.lang.OutOfMemoryError: Java
heap space" when I am parsing larger XML documents with the below
pipeline definition. This is (to me) somewhat unexpected, as I
imagined we are talking SAX events all the way,  (hopefully) making
the size of the input XML irrelevant. As a solution, I could of course
increase the heap space, but what would happen if I then sent a really
humongous XML document to my pipeline?

I have attached a zip file with a self contained application that
(sometimes) causes a OutOfMemory error when run on the default
settings of Tomcat 5.5.26, OS X 10.4 and Java 1.5.0_13-b05-241.

Here is my XPL definition:

<p:config xmlns:p="http://www.orbeon.com/oxf/pipeline"
 xmlns:oxf="http://www.orbeon.com/oxf/processors"
 xmlns:xs="http://www.w3.org/2001/XMLSchema"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xforms="http://www.w3.org/2002/xforms">

 <!-- p:param name="instance" type="input"/ -->
 <p:param name="data" type="output"/>

 <!-- Read in the stylesheet definition -->
 <p:processor name="oxf:url-generator">
    <p:input name="config">
        <config>
            <url>transform.xsl</url>
            <content-type>text/xml</content-type>
            <validating>false</validating>
            <handle-xinclude>false</handle-xinclude>
        </config>
    </p:input>
    <p:output name="data" id="firstXslt" debug="firstXSLT"/>
 </p:processor>

 <!-- Read in the source XML -->
 <p:processor name="oxf:url-generator">
    <p:input name="config">
        <config>
            <url>smith.hotels.xml</url>
            <content-type>text/xml</content-type>
            <validating>false</validating>
            <handle-xinclude>false</handle-xinclude>
        </config>
    </p:input>
    <p:output name="data" id="smithXml" debug="smithXml"/>
 </p:processor>

 <!-- Create the Escenic format: Apply the stylesheet to the source xml  -->
 <p:processor name="oxf:xslt">
    <p:input name="data" href="#smithXml" debug="smithXml"/>
    <p:input name="config" href="#firstXslt" debug="firstXslt"/>
    <p:output name="data" id="escenicXml" debug="escenicXml"/>
 </p:processor>

 <!-- Wired off, just send the transformed XML back to the client
for now (using the identity processor below) -->
 <!-- Call the REST webservice -->
 <!--p:processor name="oxf:xforms-submission">
    <p:input name="submission">
        <xforms:submission method="put"
action="http://localhost:8080/timmy/import"/>
    </p:input>
    <p:input name="request" href="#escenicXml" debug="escenicXml"/>
    <p:output name="response" ref="data" debug="response"/>
 </p:processor-->

 <!-- Just return the transformed XML to the user for now.
    Once we get this right, will send it to the webservice instead
(see above) -->
 <p:processor name="oxf:identity">
    <p:input name="data" href="#escenicXml" debug="escenicXml"/>
    <p:output name="data" ref="data" debug="same"/>
 </p:processor>

</p:config>

And here is the stack trace:

java.lang.OutOfMemoryError: Java heap space
    at org.orbeon.oxf.xml.SAXStore.addToCharBuffer(SAXStore.java:424)
    at org.orbeon.oxf.xml.SAXStore.characters(SAXStore.java:269)
    at org.orbeon.oxf.xml.SAXStore.replay(SAXStore.java:197)
    at org.orbeon.oxf.processor.pipeline.TeeProcessor$1.readImpl(TeeProcessor.java:61)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$1400(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$6.run(PipelineProcessor.java:564)
    at org.orbeon.oxf.processor.ProcessorImpl.executeParents(ProcessorImpl.java:536)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$1500(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$InternalTopOutput.readImpl(PipelineProcessor.java:560)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
    at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
    at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)

The exception does not always occur, but appears more frequent with
multiple parallel requests (as expected). I am also seeing Broken Pipe
socket exceptions in the epilogue XPL (when we don't get OutOfMemory
errors), which I think is related to the size of the XML document
returned from the above XPL:

2008-08-15 15:05:34,250 ERROR ProcessorService  - Exception at line
348, column 55 of oxf:/config/epilogue-servlet.xpl (reading processor
output: name='data', id='converted')
java.net.SocketException: Broken pipe
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
    at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:747)
    at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:432)
    at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:347)
    at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:770)
    at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:126)
    at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:580)
    at org.apache.coyote.Response.doWrite(Response.java:560)
    at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:361)
    at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:323)
    at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:392)
    at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:381)
    at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
    at org.orbeon.oxf.processor.serializer.store.ResultStoreOutputStream.write(ResultStoreOutputStream.java:47)
    at sun.nio.cs.StreamEncoder$CharsetSE.writeBytes(StreamEncoder.java:336)
    at sun.nio.cs.StreamEncoder$CharsetSE.implWrite(StreamEncoder.java:395)
    at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:136)
    at java.io.OutputStreamWriter.write(OutputStreamWriter.java:191)
    at org.orbeon.oxf.util.TextContentHandler.characters(TextContentHandler.java:22)
    at org.orbeon.oxf.processor.serializer.BinaryTextContentHandler.characters(BinaryTextContentHandler.java:166)
    at org.orbeon.oxf.util.ContentHandlerWriter.write(ContentHandlerWriter.java:95)
    at org.orbeon.saxon.tinytree.CharSlice.write(CharSlice.java:170)
    at org.orbeon.saxon.event.XMLEmitter.writeCharSequence(XMLEmitter.java:595)
    at org.orbeon.saxon.event.XMLEmitter.writeEscape(XMLEmitter.java:686)
    at org.orbeon.saxon.event.XMLEmitter.characters(XMLEmitter.java:550)
    at org.orbeon.saxon.event.ReceivingContentHandler.flush(ReceivingContentHandler.java:425)
    at org.orbeon.saxon.event.ReceivingContentHandler.endElement(ReceivingContentHandler.java:332)
    at org.orbeon.oxf.xml.ForwardingContentHandler.endElement(ForwardingContentHandler.java:52)
    at org.orbeon.oxf.xml.ForwardingContentHandler.endElement(ForwardingContentHandler.java:52)
    at org.orbeon.oxf.xml.SAXStore.replay(SAXStore.java:201)
    at org.orbeon.oxf.processor.pipeline.TeeProcessor$1.readImpl(TeeProcessor.java:61)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$1400(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$6.run(PipelineProcessor.java:564)
    at org.orbeon.oxf.processor.ProcessorImpl.executeParents(ProcessorImpl.java:536)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$1500(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$InternalTopOutput.readImpl(PipelineProcessor.java:560)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.serializer.legacy.XMLSerializer.readInput(XMLSerializer.java:58)
    at org.orbeon.oxf.processor.serializer.HttpTextSerializer$1.readImpl(HttpTextSerializer.java:101)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.serializer.HttpSerializer.readInput(HttpSerializer.java:42)
    at org.orbeon.oxf.processor.serializer.HttpSerializerBase$1.read(HttpSerializerBase.java:151)
    at org.orbeon.oxf.processor.ProcessorImpl.readCacheInputAsObject(ProcessorImpl.java:452)
    at org.orbeon.oxf.processor.serializer.HttpSerializerBase.start(HttpSerializerBase.java:142)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
    at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
    at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:230)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
    at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
    at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
    at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:230)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
    at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
    at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
    at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:230)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
    at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
    at org.orbeon.oxf.processor.PageFlowControllerProcessor.start(PageFlowControllerProcessor.java:489)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
    at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.getInput(PipelineProcessor.java:136)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:85)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
    at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
    at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
    at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
    at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
    at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
    at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
    at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
    at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
    at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
    at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
    at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
    at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
    at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
    at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
    at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
    at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
    at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
    at org.orbeon.oxf.processor.IdentityProcessor$1.readImpl(IdentityProcessor.java:33)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$000(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$2.run(PipelineProcessor.java:92)
    at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$100(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$1.readImpl(PipelineProcessor.java:90)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor$1.readImpl(ConcreteChooseProcessor.java:122)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$1400(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$6.run(PipelineProcessor.java:564)
    at org.orbeon.oxf.processor.ProcessorImpl.executeParents(ProcessorImpl.java:536)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access$1500(PipelineProcessor.java:62)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$InternalTopOutput.readImpl(PipelineProcessor.java:560)
    at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
    at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
    at org.orbeon.oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
    at org.orbeon.oxf.processor.NullSerializer.start(NullSerializer.java:31)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
    at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
    at org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:230)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor$11.run(PipelineProcessor.java:644)
    at org.orbeon.oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
    at org.orbeon.oxf.processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:641)
    at org.orbeon.oxf.processor.PageFlowControllerProcessor.start(PageFlowControllerProcessor.java:489)
    at org.orbeon.oxf.pipeline.InitUtils.runProcessor(InitUtils.java:95)
    at org.orbeon.oxf.webapp.ProcessorService.service(ProcessorService.java:96)
    at org.orbeon.oxf.servlet.OPSServletDelegate.service(OPSServletDelegate.java:148)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:613)


Is it the size of the input / source XML that causes an OutOfMemory
error? How about these broken pipes? If so, is there anything I can do
to resolve this (except from  -Xmx<size> )? Does anyone else have
experiences with dealing with large XML documents as inputs and/or
outputs? Am I just abusing Orbeon Forms with this type of use case?

Any insight would be much appreciated. Many thanks!

Sincerely,
Henrik Pettersen

--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws

--
Orbeon Forms - Web Forms for the Enterprise Done the Right Way
http://www.orbeon.com/



--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws



--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws

--
Orbeon Forms - Web Forms for the Enterprise Done the Right Way
http://www.orbeon.com/



--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws



--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws

--
Orbeon Forms - Web Forms for the Enterprise Done the Right Way
http://www.orbeon.com/



--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws




--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws
Reply | Threaded
Open this post in threaded view
|

Re: Re: SAX, DOM, large XML documents and java.lang.OutOfMemory Errors

Jeff Jones
In reply to this post by Erik Bruchez
Erik,

This is a question that's been puzzling me for a while. If streaming is
the exception rather than the rule, why is SAX the preferred method for
communicating between processors? Wouldn't it be more efficient just to
create a DOM representation and pass it down the pipeline instead? It
sounds like you might be marshalling and unmarshalling a document
several times in the course of a pipeline's execution.

</Jeff>

Erik Bruchez wrote:

> Henrik,
>
> Processors do communicate through SAX, but individual processors may not
> stream. In particular:
>
> * XSLT doesn't stream, it will create a Saxon TinyTree for the input
> document.
> * The XForms processor also creates DOM trees before processing.
>
> I would say the case where you can do streaming is the exception rather
> than the rule.
>
> -Erik
>
> On Aug 17, 2008, at 11:57 AM, Henrik Pettersen wrote:
>
>> All,
>>
>> my email seems to be stuck in some sort of email filter, so I am
>> re-posting, this time providing a link for you to download the
>> attachment instead:
>> http://swiki.sparklingideas.co.uk/smith.zip
>>
>> Thank you.
>>
>> Henrik
>>
>> All,
>>
>> I have a question about how Orbeon works internally, how it uses DOM
>> (it doesn't?) and SAX, and how Orbeon manages its memory.
>>
>> My problem is that I am getting a "java.lang.OutOfMemoryError: Java
>> heap space" when I am parsing larger XML documents with the below
>> pipeline definition. This is (to me) somewhat unexpected, as I
>> imagined we are talking SAX events all the way,  (hopefully) making
>> the size of the input XML irrelevant. As a solution, I could of course
>> increase the heap space, but what would happen if I then sent a really
>> humongous XML document to my pipeline?
>>
>> I have attached a zip file with a self contained application that
>> (sometimes) causes a OutOfMemory error when run on the default
>> settings of Tomcat 5.5.26, OS X 10.4 and Java 1.5.0_13-b05-241.
>>
>> Here is my XPL definition:
>>
>> <p:config xmlns:p="http://www.orbeon.com/oxf/pipeline"
>>    xmlns:oxf="http://www.orbeon.com/oxf/processors"
>>    xmlns:xs="http://www.w3.org/2001/XMLSchema"
>>    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>>    xmlns:xforms="http://www.w3.org/2002/xforms">
>>
>>    <!-- p:param name="instance" type="input"/ -->
>>    <p:param name="data" type="output"/>
>>
>>    <!-- Read in the stylesheet definition -->
>>    <p:processor name="oxf:url-generator">
>>        <p:input name="config">
>>            <config>
>>                <url>transform.xsl</url>
>>                <content-type>text/xml</content-type>
>>                <validating>false</validating>
>>                <handle-xinclude>false</handle-xinclude>
>>            </config>
>>        </p:input>
>>        <p:output name="data" id="firstXslt" debug="firstXSLT"/>
>>    </p:processor>
>>
>>    <!-- Read in the source XML -->
>>    <p:processor name="oxf:url-generator">
>>        <p:input name="config">
>>            <config>
>>                <url>smith.hotels.xml</url>
>>                <content-type>text/xml</content-type>
>>                <validating>false</validating>
>>                <handle-xinclude>false</handle-xinclude>
>>            </config>
>>        </p:input>
>>        <p:output name="data" id="smithXml" debug="smithXml"/>
>>    </p:processor>
>>
>>    <!-- Create the Escenic format: Apply the stylesheet to the source
>> xml  -->
>>    <p:processor name="oxf:xslt">
>>        <p:input name="data" href="#smithXml" debug="smithXml"/>
>>        <p:input name="config" href="#firstXslt" debug="firstXslt"/>
>>        <p:output name="data" id="escenicXml" debug="escenicXml"/>
>>    </p:processor>
>>
>>    <!-- Wired off, just send the transformed XML back to the client
>> for now (using the identity processor below) -->
>>    <!-- Call the REST webservice -->
>>    <!--p:processor name="oxf:xforms-submission">
>>        <p:input name="submission">
>>            <xforms:submission method="put"
>> action="http://localhost:8080/timmy/import"/>
>>        </p:input>
>>        <p:input name="request" href="#escenicXml" debug="escenicXml"/>
>>        <p:output name="response" ref="data" debug="response"/>
>>    </p:processor-->
>>
>>   <!-- Just return the transformed XML to the user for now.
>>        Once we get this right, will send it to the webservice instead
>> (see above) -->
>>    <p:processor name="oxf:identity">
>>        <p:input name="data" href="#escenicXml" debug="escenicXml"/>
>>        <p:output name="data" ref="data" debug="same"/>
>>    </p:processor>
>>
>> </p:config>
>>
>> And here is the stack trace:
>>
>> java.lang.OutOfMemoryError: Java heap space
>>        at org.orbeon.oxf.xml.SAXStore.addToCharBuffer(SAXStore.java:424)
>>        at org.orbeon.oxf.xml.SAXStore.characters(SAXStore.java:269)
>>        at org.orbeon.oxf.xml.SAXStore.replay(SAXStore.java:197)
>>        at
>> org.orbeon.oxf.processor.pipeline.TeeProcessor$1.readImpl(TeeProcessor.java:61)
>>
>>        at
>> org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
>>        at
>> org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>>
<snip>

>>        at
>> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
>>
>>        at java.lang.Thread.run(Thread.java:613)
>>
>>
>> Is it the size of the input / source XML that causes an OutOfMemory
>> error? How about these broken pipes? If so, is there anything I can do
>> to resolve this (except from  -Xmx<size> )? Does anyone else have
>> experiences with dealing with large XML documents as inputs and/or
>> outputs? Am I just abusing Orbeon Forms with this type of use case?
>>
>> Any insight would be much appreciated. Many thanks!
>>
>> Sincerely,
>> Henrik Pettersen


--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws
Reply | Threaded
Open this post in threaded view
|

Re: Re: Re: Re: Re: Re: Re: SAX, DOM, large XML documents and java.lang.OutOfMemory Errors

Erik Bruchez
Administrator
In reply to this post by Henrik Pettersen
THanks Henrik. A streaming REST client would be good. Somehow we have  
so far managed to work around this.

Another way might be to still use oxf:xforms-submission, but to pass  
URLs in and out instead of the content. The process would be:

* Receive document (oxf:request, oxf:url-generator, ...)
* Store in temp file and obtain URL
* Pass URL to oxf:xforms-submission
* Run submission
* Obtain URL of result back
* Dereference URL and continue streamin

Well, this would be pseudo-streaming as it would involve temp files,  
but it would be good for RAM usage.

We have an extension to xforms:submission for serializing binary files  
already, but it doesn't stream yet. If that part was completed, you  
could probably achieve the above.

-Erik

On Aug 18, 2008, at 5:43 AM, Henrik Pettersen wrote:

> Hi Erik,
>
> thank you, that's very helpful. I'll probably end up writing my own  
> Orbeon extension, then, for consuming REST style web services (using  
> streaming / SAX).
>
> XPL is such a great web service integration / process control  
> language, a resource-friendly REST style web service consumer seems  
> like a natural extension of your allready extensive library of  
> processors. Feature request, perhaps? I'll be sure to share any  
> Orbeon extension code with you all, should I get that far...
>
> Many thanks!
>
> Henrik
>
> On Mon, Aug 18, 2008 at 6:02 AM, Erik Bruchez <[hidden email]>  
> wrote:
> Yes that, or directly calling services from an XForms page.
>
> -Erik
>
>
> On Aug 17, 2008, at 5:33 PM, Henrik Pettersen wrote:
>
> Hi Erik,
>
> that's very helpful, thank you. Is oxf:xforms-submission the  
> preferred way to call a REST style webservice, then?
>
> Henrik
>
> On Mon, Aug 18, 2008 at 12:40 AM, Erik Bruchez <[hidden email]>  
> wrote:
> Henrik,
>
> I don't think there is specific documentation on that. On top of my  
> head:
>
> * oxf:url-generator is able to stream
> * oxf:http-serializer is able to stream
> * pretty much anything else doesn't ;-)
>
> oxf:xforms-submission uses XLST to build an XForm state, so here you  
> will even possibly have several DOMs in memory possibly at the same  
> time.
>
> -Erik
>
>
> On Aug 17, 2008, at 2:02 PM, Henrik Pettersen wrote:
>
> Hi Erik,
>
> thank you for coming back to me, that makes sense to me. Is there  
> any documentation on how the different processors handle the XML  
> (DOM/SAX)? You mentioned a tinytree being built for XSLT, how about  
> the oxf:xforms-submission processor?
>
> Many thanks!
>
> Henrik
>
> On Sun, Aug 17, 2008 at 8:29 PM, Erik Bruchez <[hidden email]>  
> wrote:
> Henrik,
>
> Processors do communicate through SAX, but individual processors may  
> not stream. In particular:
>
> * XSLT doesn't stream, it will create a Saxon TinyTree for the input  
> document.
> * The XForms processor also creates DOM trees before processing.
>
> I would say the case where you can do streaming is the exception  
> rather than the rule.
>
> -Erik
>
>
> On Aug 17, 2008, at 11:57 AM, Henrik Pettersen wrote:
>
> All,
>
> my email seems to be stuck in some sort of email filter, so I am
> re-posting, this time providing a link for you to download the
> attachment instead:
> http://swiki.sparklingideas.co.uk/smith.zip
>
> Thank you.
>
> Henrik
>
> All,
>
> I have a question about how Orbeon works internally, how it uses DOM
> (it doesn't?) and SAX, and how Orbeon manages its memory.
>
> My problem is that I am getting a "java.lang.OutOfMemoryError: Java
> heap space" when I am parsing larger XML documents with the below
> pipeline definition. This is (to me) somewhat unexpected, as I
> imagined we are talking SAX events all the way,  (hopefully) making
> the size of the input XML irrelevant. As a solution, I could of course
> increase the heap space, but what would happen if I then sent a really
> humongous XML document to my pipeline?
>
> I have attached a zip file with a self contained application that
> (sometimes) causes a OutOfMemory error when run on the default
> settings of Tomcat 5.5.26, OS X 10.4 and Java 1.5.0_13-b05-241.
>
> Here is my XPL definition:
>
> <p:config xmlns:p="http://www.orbeon.com/oxf/pipeline"
>  xmlns:oxf="http://www.orbeon.com/oxf/processors"
>  xmlns:xs="http://www.w3.org/2001/XMLSchema"
>  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>  xmlns:xforms="http://www.w3.org/2002/xforms">
>
>  <!-- p:param name="instance" type="input"/ -->
>  <p:param name="data" type="output"/>
>
>  <!-- Read in the stylesheet definition -->
>  <p:processor name="oxf:url-generator">
>     <p:input name="config">
>         <config>
>             <url>transform.xsl</url>
>             <content-type>text/xml</content-type>
>             <validating>false</validating>
>             <handle-xinclude>false</handle-xinclude>
>         </config>
>     </p:input>
>     <p:output name="data" id="firstXslt" debug="firstXSLT"/>
>  </p:processor>
>
>  <!-- Read in the source XML -->
>  <p:processor name="oxf:url-generator">
>     <p:input name="config">
>         <config>
>             <url>smith.hotels.xml</url>
>             <content-type>text/xml</content-type>
>             <validating>false</validating>
>             <handle-xinclude>false</handle-xinclude>
>         </config>
>     </p:input>
>     <p:output name="data" id="smithXml" debug="smithXml"/>
>  </p:processor>
>
>  <!-- Create the Escenic format: Apply the stylesheet to the source  
> xml  -->
>  <p:processor name="oxf:xslt">
>     <p:input name="data" href="#smithXml" debug="smithXml"/>
>     <p:input name="config" href="#firstXslt" debug="firstXslt"/>
>     <p:output name="data" id="escenicXml" debug="escenicXml"/>
>  </p:processor>
>
>  <!-- Wired off, just send the transformed XML back to the client
> for now (using the identity processor below) -->
>  <!-- Call the REST webservice -->
>  <!--p:processor name="oxf:xforms-submission">
>     <p:input name="submission">
>         <xforms:submission method="put"
> action="http://localhost:8080/timmy/import"/>
>     </p:input>
>     <p:input name="request" href="#escenicXml" debug="escenicXml"/>
>     <p:output name="response" ref="data" debug="response"/>
>  </p:processor-->
>
>  <!-- Just return the transformed XML to the user for now.
>     Once we get this right, will send it to the webservice instead
> (see above) -->
>  <p:processor name="oxf:identity">
>     <p:input name="data" href="#escenicXml" debug="escenicXml"/>
>     <p:output name="data" ref="data" debug="same"/>
>  </p:processor>
>
> </p:config>
>
> And here is the stack trace:
>
> java.lang.OutOfMemoryError: Java heap space
>     at org.orbeon.oxf.xml.SAXStore.addToCharBuffer(SAXStore.java:424)
>     at org.orbeon.oxf.xml.SAXStore.characters(SAXStore.java:269)
>     at org.orbeon.oxf.xml.SAXStore.replay(SAXStore.java:197)
>     at org.orbeon.oxf.processor.pipeline.TeeProcessor
> $1.readImpl(TeeProcessor.java:61)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $1400(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $6.run(PipelineProcessor.java:564)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeParents(ProcessorImpl.java:536)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $1500(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $InternalTopOutput.readImpl(PipelineProcessor.java:560)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>     at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>
> The exception does not always occur, but appears more frequent with
> multiple parallel requests (as expected). I am also seeing Broken Pipe
> socket exceptions in the epilogue XPL (when we don't get OutOfMemory
> errors), which I think is related to the size of the XML document
> returned from the above XPL:
>
> 2008-08-15 15:05:34,250 ERROR ProcessorService  - Exception at line
> 348, column 55 of oxf:/config/epilogue-servlet.xpl (reading processor
> output: name='data', id='converted')
> java.net.SocketException: Broken pipe
>     at java.net.SocketOutputStream.socketWrite0(Native Method)
>     at  
> java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
>     at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
>     at  
> org
> .apache
> .coyote
> .http11
> .InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:747)
>     at  
> org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:432)
>     at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:347)
>     at org.apache.coyote.http11.InternalOutputBuffer
> $OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:770)
>     at  
> org
> .apache
> .coyote
> .http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:
> 126)
>     at  
> org
> .apache
> .coyote
> .http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:580)
>     at org.apache.coyote.Response.doWrite(Response.java:560)
>     at  
> org
> .apache
> .catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:361)
>     at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:323)
>     at  
> org
> .apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:
> 392)
>     at  
> org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:
> 381)
>     at  
> org
> .apache
> .catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:
> 89)
>     at  
> org
> .orbeon
> .oxf
> .processor
> .serializer
> .store.ResultStoreOutputStream.write(ResultStoreOutputStream.java:47)
>     at sun.nio.cs.StreamEncoder
> $CharsetSE.writeBytes(StreamEncoder.java:336)
>     at sun.nio.cs.StreamEncoder
> $CharsetSE.implWrite(StreamEncoder.java:395)
>     at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:136)
>     at java.io.OutputStreamWriter.write(OutputStreamWriter.java:191)
>     at  
> org
> .orbeon
> .oxf.util.TextContentHandler.characters(TextContentHandler.java:22)
>     at  
> org
> .orbeon
> .oxf
> .processor
> .serializer
> .BinaryTextContentHandler.characters(BinaryTextContentHandler.java:
> 166)
>     at  
> org
> .orbeon
> .oxf.util.ContentHandlerWriter.write(ContentHandlerWriter.java:95)
>     at org.orbeon.saxon.tinytree.CharSlice.write(CharSlice.java:170)
>     at  
> org.orbeon.saxon.event.XMLEmitter.writeCharSequence(XMLEmitter.java:
> 595)
>     at org.orbeon.saxon.event.XMLEmitter.writeEscape(XMLEmitter.java:
> 686)
>     at org.orbeon.saxon.event.XMLEmitter.characters(XMLEmitter.java:
> 550)
>     at  
> org
> .orbeon
> .saxon
> .event.ReceivingContentHandler.flush(ReceivingContentHandler.java:425)
>     at  
> org
> .orbeon
> .saxon
> .event
> .ReceivingContentHandler.endElement(ReceivingContentHandler.java:332)
>     at  
> org
> .orbeon
> .oxf
> .xml
> .ForwardingContentHandler.endElement(ForwardingContentHandler.java:52)
>     at  
> org
> .orbeon
> .oxf
> .xml
> .ForwardingContentHandler.endElement(ForwardingContentHandler.java:52)
>     at org.orbeon.oxf.xml.SAXStore.replay(SAXStore.java:201)
>     at org.orbeon.oxf.processor.pipeline.TeeProcessor
> $1.readImpl(TeeProcessor.java:61)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $1400(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $6.run(PipelineProcessor.java:564)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeParents(ProcessorImpl.java:536)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $1500(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $InternalTopOutput.readImpl(PipelineProcessor.java:560)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at  
> org
> .orbeon
> .oxf
> .processor
> .serializer.legacy.XMLSerializer.readInput(XMLSerializer.java:58)
>     at org.orbeon.oxf.processor.serializer.HttpTextSerializer
> $1.readImpl(HttpTextSerializer.java:101)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at  
> org
> .orbeon
> .oxf
> .processor.serializer.HttpSerializer.readInput(HttpSerializer.java:42)
>     at org.orbeon.oxf.processor.serializer.HttpSerializerBase
> $1.read(HttpSerializerBase.java:151)
>     at  
> org
> .orbeon
> .oxf
> .processor.ProcessorImpl.readCacheInputAsObject(ProcessorImpl.java:
> 452)
>     at  
> org
> .orbeon
> .oxf
> .processor
> .serializer.HttpSerializerBase.start(HttpSerializerBase.java:142)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>     at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>     at  
> org
> .orbeon
> .oxf
> .processor
> .pipeline
> .choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:
> 230)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>     at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>     at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>     at  
> org
> .orbeon
> .oxf
> .processor
> .pipeline
> .choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:
> 230)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>     at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>     at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>     at  
> org
> .orbeon
> .oxf
> .processor
> .pipeline
> .choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:
> 230)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>     at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>     at  
> org
> .orbeon
> .oxf
> .processor
> .PageFlowControllerProcessor.start(PageFlowControllerProcessor.java:
> 489)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>     at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.getInput(PipelineProcessor.java:136)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:85)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>     at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>     at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>     at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>     at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>     at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>     at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>     at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>     at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>     at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>     at org.orbeon.oxf.processor.IdentityProcessor
> $1.readImpl(IdentityProcessor.java:33)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $000(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $2.run(PipelineProcessor.java:92)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $100(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $1.readImpl(PipelineProcessor.java:90)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org.orbeon.oxf.processor.pipeline.choose.ConcreteChooseProcessor
> $1.readImpl(ConcreteChooseProcessor.java:122)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $1400(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $6.run(PipelineProcessor.java:564)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeParents(ProcessorImpl.java:536)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor.access
> $1500(PipelineProcessor.java:62)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $InternalTopOutput.readImpl(PipelineProcessor.java:560)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>     at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:349)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.readInputAsSAX(ProcessorImpl.java:354)
>     at  
> org.orbeon.oxf.processor.NullSerializer.start(NullSerializer.java:31)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>     at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>     at  
> org
> .orbeon
> .oxf
> .processor
> .pipeline
> .choose.ConcreteChooseProcessor.start(ConcreteChooseProcessor.java:
> 230)
>     at org.orbeon.oxf.processor.pipeline.PipelineProcessor
> $11.run(PipelineProcessor.java:644)
>     at  
> org
> .orbeon
> .oxf.processor.ProcessorImpl.executeChildren(ProcessorImpl.java:518)
>     at  
> org
> .orbeon
> .oxf
> .processor.pipeline.PipelineProcessor.start(PipelineProcessor.java:
> 641)
>     at  
> org
> .orbeon
> .oxf
> .processor
> .PageFlowControllerProcessor.start(PageFlowControllerProcessor.java:
> 489)
>     at org.orbeon.oxf.pipeline.InitUtils.runProcessor(InitUtils.java:
> 95)
>     at  
> org.orbeon.oxf.webapp.ProcessorService.service(ProcessorService.java:
> 96)
>     at  
> org
> .orbeon
> .oxf.servlet.OPSServletDelegate.service(OPSServletDelegate.java:148)
>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>     at  
> org
> .apache
> .catalina
> .core
> .ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
> 269)
>     at  
> org
> .apache
> .catalina
> .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>     at  
> org
> .apache
> .catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:
> 213)
>     at  
> org
> .apache
> .catalina.core.StandardContextValve.invoke(StandardContextValve.java:
> 174)
>     at  
> org
> .apache
> .catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>     at  
> org
> .apache
> .catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
>     at  
> org
> .apache
> .catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:
> 108)
>     at  
> org
> .apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
> 174)
>     at  
> org
> .apache.coyote.http11.Http11Processor.process(Http11Processor.java:
> 874)
>     at org.apache.coyote.http11.Http11BaseProtocol
> $Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:
> 665)
>     at  
> org
> .apache
> .tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:
> 528)
>     at  
> org
> .apache
> .tomcat
> .util
> .net
> .LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
>     at org.apache.tomcat.util.threads.ThreadPool
> $ControlRunnable.run(ThreadPool.java:689)
>     at java.lang.Thread.run(Thread.java:613)
>
>
> Is it the size of the input / source XML that causes an OutOfMemory
> error? How about these broken pipes? If so, is there anything I can do
> to resolve this (except from  -Xmx<size> )? Does anyone else have
> experiences with dealing with large XML documents as inputs and/or
> outputs? Am I just abusing Orbeon Forms with this type of use case?
>
> Any insight would be much appreciated. Many thanks!
>
> Sincerely,
> Henrik Pettersen
>
> --
> You receive this message as a subscriber of the [hidden email]  
> mailing list.
> To unsubscribe: mailto:[hidden email]
> For general help: mailto:[hidden email]?subject=help
> OW2 mailing lists service home page: http://www.ow2.org/wws
>
> --
> Orbeon Forms - Web Forms for the Enterprise Done the Right Way
> http://www.orbeon.com/
>
>
>
> --
> You receive this message as a subscriber of the [hidden email]  
> mailing list.
> To unsubscribe: mailto:[hidden email]
> For general help: mailto:[hidden email]?subject=help
> OW2 mailing lists service home page: http://www.ow2.org/wws
>
>
>
> --
> You receive this message as a subscriber of the [hidden email]  
> mailing list.
> To unsubscribe: mailto:[hidden email]
> For general help: mailto:[hidden email]?subject=help
> OW2 mailing lists service home page: http://www.ow2.org/wws
>
> --
> Orbeon Forms - Web Forms for the Enterprise Done the Right Way
> http://www.orbeon.com/
>
>
>
> --
> You receive this message as a subscriber of the [hidden email]  
> mailing list.
> To unsubscribe: mailto:[hidden email]
> For general help: mailto:[hidden email]?subject=help
> OW2 mailing lists service home page: http://www.ow2.org/wws
>
>
>
> --
> You receive this message as a subscriber of the [hidden email]  
> mailing list.
> To unsubscribe: mailto:[hidden email]
> For general help: mailto:[hidden email]?subject=help
> OW2 mailing lists service home page: http://www.ow2.org/wws
>
> --
> Orbeon Forms - Web Forms for the Enterprise Done the Right Way
> http://www.orbeon.com/
>
>
>
> --
> You receive this message as a subscriber of the [hidden email]  
> mailing list.
> To unsubscribe: mailto:[hidden email]
> For general help: mailto:[hidden email]?subject=help
> OW2 mailing lists service home page: http://www.ow2.org/wws
>
>
>
> --
> You receive this message as a subscriber of the [hidden email]  
> mailing list.
> To unsubscribe: mailto:[hidden email]
> For general help: mailto:[hidden email]?subject=help
> OW2 mailing lists service home page: http://www.ow2.org/wws
--
Orbeon Forms - Web Forms for the Enterprise Done the Right Way
http://www.orbeon.com/



--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws
Reply | Threaded
Open this post in threaded view
|

Re: Re: Re: SAX, DOM, large XML documents and java.lang.OutOfMemory Errors

Erik Bruchez
Administrator
In reply to this post by Jeff Jones
I am not sure whether it would help or not. I can imagine cases where  
it wouldn't.

Realize that in a pipeline, you don't have a single document going  
through a sequence of steps, but really a new document being produced  
at each step. At least, this is the most common case (including XSLT).

Consider these cases:

* oxf:url-generator streams by nature (it uses a SAX parser). So  
producing a DOM instead would mean an extra step.

* XSLT (Saxon) can take anything in pretty much, so a DOM in would be  
fine. But Saxon naturally streams its output. So again here producing  
a DOM is an extra step.

* Now put two XSLT transformations in a chain: with a DOM, Saxon must  
create a DOM at the end of the first transformation. Using SAX, Saxon  
must create a DOM (well, TinyTree which is more efficient) at the  
beginning of the second transformation. So the cost is about the same.

If you use SAX, at least you allow the consumer to decide whether a  
DOM is needed or not, and you keep open the possibility of streaming,  
which we still use once in a while.

Now what could possibly be done would be some sort of negotiation  
between the sender and the receiver: the latter could say "I would  
prefer a TinyTree if you have it", and if the former happens to  
produce that naturally, then you get the optimal solution.

The bottom line is that I don't think it would be more efficient to  
use DOM, but maybe, possibly, "format negotiation" could help in some  
cases.

-Erik

On Aug 18, 2008, at 8:08 AM, Jeff Jones wrote:

> Erik,
>
> This is a question that's been puzzling me for a while. If streaming  
> is the exception rather than the rule, why is SAX the preferred  
> method for communicating between processors? Wouldn't it be more  
> efficient just to create a DOM representation and pass it down the  
> pipeline instead? It sounds like you might be marshalling and  
> unmarshalling a document several times in the course of a pipeline's  
> execution.
>
> </Jeff>
>
> Erik Bruchez wrote:
>> Henrik,
>> Processors do communicate through SAX, but individual processors  
>> may not stream. In particular:
>> * XSLT doesn't stream, it will create a Saxon TinyTree for the  
>> input document.
>> * The XForms processor also creates DOM trees before processing.
>> I would say the case where you can do streaming is the exception  
>> rather than the rule.
>> -Erik
>> On Aug 17, 2008, at 11:57 AM, Henrik Pettersen wrote:
>>> All,
>>>
>>> my email seems to be stuck in some sort of email filter, so I am
>>> re-posting, this time providing a link for you to download the
>>> attachment instead:
>>> http://swiki.sparklingideas.co.uk/smith.zip
>>>
>>> Thank you.
>>>
>>> Henrik
>>>
>>> All,
>>>
>>> I have a question about how Orbeon works internally, how it uses DOM
>>> (it doesn't?) and SAX, and how Orbeon manages its memory.
>>>
>>> My problem is that I am getting a "java.lang.OutOfMemoryError: Java
>>> heap space" when I am parsing larger XML documents with the below
>>> pipeline definition. This is (to me) somewhat unexpected, as I
>>> imagined we are talking SAX events all the way,  (hopefully) making
>>> the size of the input XML irrelevant. As a solution, I could of  
>>> course
>>> increase the heap space, but what would happen if I then sent a  
>>> really
>>> humongous XML document to my pipeline?
>>>
>>> I have attached a zip file with a self contained application that
>>> (sometimes) causes a OutOfMemory error when run on the default
>>> settings of Tomcat 5.5.26, OS X 10.4 and Java 1.5.0_13-b05-241.
>>>
>>> Here is my XPL definition:
>>>
>>> <p:config xmlns:p="http://www.orbeon.com/oxf/pipeline"
>>>   xmlns:oxf="http://www.orbeon.com/oxf/processors"
>>>   xmlns:xs="http://www.w3.org/2001/XMLSchema"
>>>   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>>>   xmlns:xforms="http://www.w3.org/2002/xforms">
>>>
>>>   <!-- p:param name="instance" type="input"/ -->
>>>   <p:param name="data" type="output"/>
>>>
>>>   <!-- Read in the stylesheet definition -->
>>>   <p:processor name="oxf:url-generator">
>>>       <p:input name="config">
>>>           <config>
>>>               <url>transform.xsl</url>
>>>               <content-type>text/xml</content-type>
>>>               <validating>false</validating>
>>>               <handle-xinclude>false</handle-xinclude>
>>>           </config>
>>>       </p:input>
>>>       <p:output name="data" id="firstXslt" debug="firstXSLT"/>
>>>   </p:processor>
>>>
>>>   <!-- Read in the source XML -->
>>>   <p:processor name="oxf:url-generator">
>>>       <p:input name="config">
>>>           <config>
>>>               <url>smith.hotels.xml</url>
>>>               <content-type>text/xml</content-type>
>>>               <validating>false</validating>
>>>               <handle-xinclude>false</handle-xinclude>
>>>           </config>
>>>       </p:input>
>>>       <p:output name="data" id="smithXml" debug="smithXml"/>
>>>   </p:processor>
>>>
>>>   <!-- Create the Escenic format: Apply the stylesheet to the  
>>> source xml  -->
>>>   <p:processor name="oxf:xslt">
>>>       <p:input name="data" href="#smithXml" debug="smithXml"/>
>>>       <p:input name="config" href="#firstXslt" debug="firstXslt"/>
>>>       <p:output name="data" id="escenicXml" debug="escenicXml"/>
>>>   </p:processor>
>>>
>>>   <!-- Wired off, just send the transformed XML back to the client
>>> for now (using the identity processor below) -->
>>>   <!-- Call the REST webservice -->
>>>   <!--p:processor name="oxf:xforms-submission">
>>>       <p:input name="submission">
>>>           <xforms:submission method="put"
>>> action="http://localhost:8080/timmy/import"/>
>>>       </p:input>
>>>       <p:input name="request" href="#escenicXml"  
>>> debug="escenicXml"/>
>>>       <p:output name="response" ref="data" debug="response"/>
>>>   </p:processor-->
>>>
>>>  <!-- Just return the transformed XML to the user for now.
>>>       Once we get this right, will send it to the webservice instead
>>> (see above) -->
>>>   <p:processor name="oxf:identity">
>>>       <p:input name="data" href="#escenicXml" debug="escenicXml"/>
>>>       <p:output name="data" ref="data" debug="same"/>
>>>   </p:processor>
>>>
>>> </p:config>
>>>
>>> And here is the stack trace:
>>>
>>> java.lang.OutOfMemoryError: Java heap space
>>>       at org.orbeon.oxf.xml.SAXStore.addToCharBuffer(SAXStore.java:
>>> 424)
>>>       at org.orbeon.oxf.xml.SAXStore.characters(SAXStore.java:269)
>>>       at org.orbeon.oxf.xml.SAXStore.replay(SAXStore.java:197)
>>>       at org.orbeon.oxf.processor.pipeline.TeeProcessor
>>> $1.readImpl(TeeProcessor.java:61)
>>>       at org.orbeon.oxf.processor.ProcessorImpl
>>> $6.read(ProcessorImpl.java:994)
>>>       at org.orbeon.oxf.processor.ProcessorImpl
>>> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
> <snip>
>>>       at org.apache.tomcat.util.threads.ThreadPool
>>> $ControlRunnable.run(ThreadPool.java:689)
>>>       at java.lang.Thread.run(Thread.java:613)
>>>
>>>
>>> Is it the size of the input / source XML that causes an OutOfMemory
>>> error? How about these broken pipes? If so, is there anything I  
>>> can do
>>> to resolve this (except from  -Xmx<size> )? Does anyone else have
>>> experiences with dealing with large XML documents as inputs and/or
>>> outputs? Am I just abusing Orbeon Forms with this type of use case?
>>>
>>> Any insight would be much appreciated. Many thanks!
>>>
>>> Sincerely,
>>> Henrik Pettersen
>
> --
> You receive this message as a subscriber of the [hidden email]  
> mailing list.
> To unsubscribe: mailto:[hidden email]
> For general help: mailto:[hidden email]?subject=help
> OW2 mailing lists service home page: http://www.ow2.org/wws
--
Orbeon Forms - Web Forms for the Enterprise Done the Right Way
http://www.orbeon.com/



--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws
Reply | Threaded
Open this post in threaded view
|

Re: Re: Re: Re: SAX, DOM, large XML documents and java.lang.OutOfMemory Errors

Henrik Pettersen
Hi Erik,

thank you for all the background information, I'll be digging around this issue a bit more. Just for reference, I noticed that you offer an XSLT processor implemented with SAX instead of 'tinytree' constructs:
Streaming Transformations for XML: http://www.orbeon.com/ops/doc/processors-xslt#d87e899

Here is the processor definition (processors-xslt.xml):

    <processor name="oxf:stx">
        <instantiation name="oxf:trax">
            <input name="transformer">
                <config>
                    <class>net.sf.joost.trax.TransformerFactoryImpl</class>
                </config>
            </input>
        </instantiation>
    </processor>

(Notice that the stx processor (unusually) refers to a 3rd party API (Joost): net.sf.joost.trax.TransformerFactoryImpl)

If I do this in my XPL:

    <!-- Read in the source XML -->
    <p:processor name="oxf:url-generator">
        <p:input name="config">
            <config>
                <url>smith.hotels.short.xml</url>
                <content-type>text/xml</content-type>
                <validating>false</validating>
                <handle-xinclude>false</handle-xinclude>
            </config>
        </p:input>
        <p:output name="data" id="smithXml" />
    </p:processor>

    <!-- Load the stylesheet -->
    <p:processor name="oxf:url-generator">
        <p:input name="config">
            <config>
                <url>images.xsl</url>
                <content-type>text/xml</content-type>
                <validating>false</validating>
                <handle-xinclude>false</handle-xinclude>
            </config>
        </p:input>
        <p:output name="data" id="imagesXslt" />
    </p:processor>

    <!-- Apply the stylesheet --> <!-- REPLACE WITH STX PROCESSOR HERE -->
    <p:processor name="oxf:xslt">
        <p:input name="data" href="#smithXml" />
        <p:input name="config" href="#imagesXslt" />
        <p:output name="data" id="images" />
    </p:processor>

    <!-- My custom processor then streams the href="#images" content to a webservice. -->

I should then have a nice little brook running all the way through my XPL, hopefully avoiding any DOM mounting. Me thinks.

That said, the trickiest part here is (hopefully) writing my custom streaming web service consumer processor: The SAX events are pushed into my processor, so getting an inputstream for this is a bit tricky. See my previous posting on the subject here:
http://mail-archive.ow2.org/ops-users/2008-08/msg00085.html (Thanks, Erik!)

Erik also had some good ideas for how to deal with this, using java.io.pipes (threads) or a disk buffer (NetUtils.inputStreamToAnyURI()), and I've also posted a question on Experts Exchange (no responses yet):
Converting SAX events back to an InputSource, using a ContentHandler
http://www.experts-exchange.com/Programming/Languages/Java/J2SE/JAX_SAXP/Q_23644349.html

Oh, and I agree with your comment: I think sticking with SAX implementation as often as possible is essential, as DOM models do not scale indefinitely -  you'll eventually run out of memory...

Thanks for all your help!

Henrik

On Mon, Aug 18, 2008 at 7:05 PM, Erik Bruchez <[hidden email]> wrote:
I am not sure whether it would help or not. I can imagine cases where it wouldn't.

Realize that in a pipeline, you don't have a single document going through a sequence of steps, but really a new document being produced at each step. At least, this is the most common case (including XSLT).

Consider these cases:

* oxf:url-generator streams by nature (it uses a SAX parser). So producing a DOM instead would mean an extra step.

* XSLT (Saxon) can take anything in pretty much, so a DOM in would be fine. But Saxon naturally streams its output. So again here producing a DOM is an extra step.

* Now put two XSLT transformations in a chain: with a DOM, Saxon must create a DOM at the end of the first transformation. Using SAX, Saxon must create a DOM (well, TinyTree which is more efficient) at the beginning of the second transformation. So the cost is about the same.

If you use SAX, at least you allow the consumer to decide whether a DOM is needed or not, and you keep open the possibility of streaming, which we still use once in a while.

Now what could possibly be done would be some sort of negotiation between the sender and the receiver: the latter could say "I would prefer a TinyTree if you have it", and if the former happens to produce that naturally, then you get the optimal solution.

The bottom line is that I don't think it would be more efficient to use DOM, but maybe, possibly, "format negotiation" could help in some cases.

-Erik


On Aug 18, 2008, at 8:08 AM, Jeff Jones wrote:

Erik,

This is a question that's been puzzling me for a while. If streaming is the exception rather than the rule, why is SAX the preferred method for communicating between processors? Wouldn't it be more efficient just to create a DOM representation and pass it down the pipeline instead? It sounds like you might be marshalling and unmarshalling a document several times in the course of a pipeline's execution.

</Jeff>

Erik Bruchez wrote:
Henrik,
Processors do communicate through SAX, but individual processors may not stream. In particular:
* XSLT doesn't stream, it will create a Saxon TinyTree for the input document.
* The XForms processor also creates DOM trees before processing.
I would say the case where you can do streaming is the exception rather than the rule.
-Erik
On Aug 17, 2008, at 11:57 AM, Henrik Pettersen wrote:
All,

my email seems to be stuck in some sort of email filter, so I am
re-posting, this time providing a link for you to download the
attachment instead:
http://swiki.sparklingideas.co.uk/smith.zip

Thank you.

Henrik

All,

I have a question about how Orbeon works internally, how it uses DOM
(it doesn't?) and SAX, and how Orbeon manages its memory.

My problem is that I am getting a "java.lang.OutOfMemoryError: Java
heap space" when I am parsing larger XML documents with the below
pipeline definition. This is (to me) somewhat unexpected, as I
imagined we are talking SAX events all the way,  (hopefully) making
the size of the input XML irrelevant. As a solution, I could of course
increase the heap space, but what would happen if I then sent a really
humongous XML document to my pipeline?

I have attached a zip file with a self contained application that
(sometimes) causes a OutOfMemory error when run on the default
settings of Tomcat 5.5.26, OS X 10.4 and Java 1.5.0_13-b05-241.

Here is my XPL definition:

<p:config xmlns:p="http://www.orbeon.com/oxf/pipeline"
 xmlns:oxf="http://www.orbeon.com/oxf/processors"
 xmlns:xs="http://www.w3.org/2001/XMLSchema"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xforms="http://www.w3.org/2002/xforms">

 <!-- p:param name="instance" type="input"/ -->
 <p:param name="data" type="output"/>

 <!-- Read in the stylesheet definition -->
 <p:processor name="oxf:url-generator">
     <p:input name="config">
         <config>
             <url>transform.xsl</url>
             <content-type>text/xml</content-type>
             <validating>false</validating>
             <handle-xinclude>false</handle-xinclude>
         </config>
     </p:input>
     <p:output name="data" id="firstXslt" debug="firstXSLT"/>
 </p:processor>

 <!-- Read in the source XML -->
 <p:processor name="oxf:url-generator">
     <p:input name="config">
         <config>
             <url>smith.hotels.xml</url>
             <content-type>text/xml</content-type>
             <validating>false</validating>
             <handle-xinclude>false</handle-xinclude>
         </config>
     </p:input>
     <p:output name="data" id="smithXml" debug="smithXml"/>
 </p:processor>

 <!-- Create the Escenic format: Apply the stylesheet to the source xml  -->
 <p:processor name="oxf:xslt">
     <p:input name="data" href="#smithXml" debug="smithXml"/>
     <p:input name="config" href="#firstXslt" debug="firstXslt"/>
     <p:output name="data" id="escenicXml" debug="escenicXml"/>
 </p:processor>

 <!-- Wired off, just send the transformed XML back to the client
for now (using the identity processor below) -->
 <!-- Call the REST webservice -->
 <!--p:processor name="oxf:xforms-submission">
     <p:input name="submission">
         <xforms:submission method="put"
action="http://localhost:8080/timmy/import"/>
     </p:input>
     <p:input name="request" href="#escenicXml" debug="escenicXml"/>
     <p:output name="response" ref="data" debug="response"/>
 </p:processor-->

 <!-- Just return the transformed XML to the user for now.
     Once we get this right, will send it to the webservice instead
(see above) -->
 <p:processor name="oxf:identity">
     <p:input name="data" href="#escenicXml" debug="escenicXml"/>
     <p:output name="data" ref="data" debug="same"/>
 </p:processor>

</p:config>

And here is the stack trace:

java.lang.OutOfMemoryError: Java heap space
     at org.orbeon.oxf.xml.SAXStore.addToCharBuffer(SAXStore.java:424)
     at org.orbeon.oxf.xml.SAXStore.characters(SAXStore.java:269)
     at org.orbeon.oxf.xml.SAXStore.replay(SAXStore.java:197)
     at org.orbeon.oxf.processor.pipeline.TeeProcessor$1.readImpl(TeeProcessor.java:61)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
<snip>
     at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
     at java.lang.Thread.run(Thread.java:613)


Is it the size of the input / source XML that causes an OutOfMemory
error? How about these broken pipes? If so, is there anything I can do
to resolve this (except from  -Xmx<size> )? Does anyone else have
experiences with dealing with large XML documents as inputs and/or
outputs? Am I just abusing Orbeon Forms with this type of use case?

Any insight would be much appreciated. Many thanks!

Sincerely,
Henrik Pettersen

--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws

--
Orbeon Forms - Web Forms for the Enterprise Done the Right Way
http://www.orbeon.com/



--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws




--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws
Reply | Threaded
Open this post in threaded view
|

Re: SAX, DOM, large XML documents and java.lang.OutOfMemory Errors

Henrik Pettersen
Re-post... My aplogies.

Henrik

---------- Forwarded message ----------
From: Henrik Pettersen <[hidden email]>
Date: Tue, Aug 19, 2008 at 1:52 PM
Subject: Re: [ops-users] Re: Re: Re: SAX, DOM, large XML documents and java.lang.OutOfMemory Errors
To: [hidden email]


Hi Erik,

thank you for all the background information, I'll be digging around this issue a bit more. Just for reference, I noticed that you offer an XSLT processor implemented with SAX instead of 'tinytree' constructs:
Streaming Transformations for XML: http://www.orbeon.com/ops/doc/processors-xslt#d87e899

Here is the processor definition (processors-xslt.xml):

    <processor name="oxf:stx">
        <instantiation name="oxf:trax">
            <input name="transformer">
                <config>
                    <class>net.sf.joost.trax.TransformerFactoryImpl</class>
                </config>
            </input>
        </instantiation>
    </processor>

(Notice that the stx processor (unusually) refers to a 3rd party API (Joost): net.sf.joost.trax.TransformerFactoryImpl)

If I do this in my XPL:


    <!-- Read in the source XML -->
    <p:processor name="oxf:url-generator">
        <p:input name="config">
            <config>
                <url>smith.hotels.short.xml</url>

                <content-type>text/xml</content-type>
                <validating>false</validating>
                <handle-xinclude>false</handle-xinclude>
            </config>
        </p:input>
        <p:output name="data" id="smithXml" />
    </p:processor>

    <!-- Load the stylesheet -->

    <p:processor name="oxf:url-generator">
        <p:input name="config">
            <config>
                <url>images.xsl</url>

                <content-type>text/xml</content-type>
                <validating>false</validating>
                <handle-xinclude>false</handle-xinclude>
            </config>
        </p:input>
        <p:output name="data" id="imagesXslt" />
    </p:processor>

    <!-- Apply the stylesheet --> <!-- REPLACE WITH STX PROCESSOR HERE -->
    <p:processor name="oxf:xslt">
        <p:input name="data" href="#smithXml" />
        <p:input name="config" href="#imagesXslt" />
        <p:output name="data" id="images" />
    </p:processor>

    <!-- My custom processor then streams the href="#images" content to a webservice. -->

I should then have a nice little brook running all the way through my XPL, hopefully avoiding any DOM mounting. Me thinks.

That said, the trickiest part here is (hopefully) writing my custom streaming web service consumer processor: The SAX events are pushed into my processor, so getting an inputstream for this is a bit tricky. See my previous posting on the subject here:
http://mail-archive.ow2.org/ops-users/2008-08/msg00085.html (Thanks, Erik!)

Erik also had some good ideas for how to deal with this, using java.io.pipes (threads) or a disk buffer (NetUtils.inputStreamToAnyURI()), and I've also posted a question on Experts Exchange (no responses yet):
Converting SAX events back to an InputSource, using a ContentHandler
http://www.experts-exchange.com/Programming/Languages/Java/J2SE/JAX_SAXP/Q_23644349.html

Oh, and I agree with your comment: I think sticking with SAX implementation as often as possible is essential, as DOM models do not scale indefinitely -  you'll eventually run out of memory...

Thanks for all your help!

Henrik


On Mon, Aug 18, 2008 at 7:05 PM, Erik Bruchez <[hidden email]> wrote:
I am not sure whether it would help or not. I can imagine cases where it wouldn't.

Realize that in a pipeline, you don't have a single document going through a sequence of steps, but really a new document being produced at each step. At least, this is the most common case (including XSLT).

Consider these cases:

* oxf:url-generator streams by nature (it uses a SAX parser). So producing a DOM instead would mean an extra step.

* XSLT (Saxon) can take anything in pretty much, so a DOM in would be fine. But Saxon naturally streams its output. So again here producing a DOM is an extra step.

* Now put two XSLT transformations in a chain: with a DOM, Saxon must create a DOM at the end of the first transformation. Using SAX, Saxon must create a DOM (well, TinyTree which is more efficient) at the beginning of the second transformation. So the cost is about the same.

If you use SAX, at least you allow the consumer to decide whether a DOM is needed or not, and you keep open the possibility of streaming, which we still use once in a while.

Now what could possibly be done would be some sort of negotiation between the sender and the receiver: the latter could say "I would prefer a TinyTree if you have it", and if the former happens to produce that naturally, then you get the optimal solution.

The bottom line is that I don't think it would be more efficient to use DOM, but maybe, possibly, "format negotiation" could help in some cases.

-Erik


On Aug 18, 2008, at 8:08 AM, Jeff Jones wrote:

Erik,

This is a question that's been puzzling me for a while. If streaming is the exception rather than the rule, why is SAX the preferred method for communicating between processors? Wouldn't it be more efficient just to create a DOM representation and pass it down the pipeline instead? It sounds like you might be marshalling and unmarshalling a document several times in the course of a pipeline's execution.

</Jeff>

Erik Bruchez wrote:
Henrik,
Processors do communicate through SAX, but individual processors may not stream. In particular:
* XSLT doesn't stream, it will create a Saxon TinyTree for the input document.
* The XForms processor also creates DOM trees before processing.
I would say the case where you can do streaming is the exception rather than the rule.
-Erik
On Aug 17, 2008, at 11:57 AM, Henrik Pettersen wrote:
All,

my email seems to be stuck in some sort of email filter, so I am
re-posting, this time providing a link for you to download the
attachment instead:
http://swiki.sparklingideas.co.uk/smith.zip

Thank you.

Henrik

All,

I have a question about how Orbeon works internally, how it uses DOM
(it doesn't?) and SAX, and how Orbeon manages its memory.

My problem is that I am getting a "java.lang.OutOfMemoryError: Java
heap space" when I am parsing larger XML documents with the below
pipeline definition. This is (to me) somewhat unexpected, as I
imagined we are talking SAX events all the way,  (hopefully) making
the size of the input XML irrelevant. As a solution, I could of course
increase the heap space, but what would happen if I then sent a really
humongous XML document to my pipeline?

I have attached a zip file with a self contained application that
(sometimes) causes a OutOfMemory error when run on the default
settings of Tomcat 5.5.26, OS X 10.4 and Java 1.5.0_13-b05-241.

Here is my XPL definition:

<p:config xmlns:p="http://www.orbeon.com/oxf/pipeline"
 xmlns:oxf="http://www.orbeon.com/oxf/processors"
 xmlns:xs="http://www.w3.org/2001/XMLSchema"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xforms="http://www.w3.org/2002/xforms">

 <!-- p:param name="instance" type="input"/ -->
 <p:param name="data" type="output"/>

 <!-- Read in the stylesheet definition -->
 <p:processor name="oxf:url-generator">
     <p:input name="config">
         <config>
             <url>transform.xsl</url>
             <content-type>text/xml</content-type>
             <validating>false</validating>
             <handle-xinclude>false</handle-xinclude>
         </config>
     </p:input>
     <p:output name="data" id="firstXslt" debug="firstXSLT"/>
 </p:processor>

 <!-- Read in the source XML -->
 <p:processor name="oxf:url-generator">
     <p:input name="config">
         <config>
             <url>smith.hotels.xml</url>
             <content-type>text/xml</content-type>
             <validating>false</validating>
             <handle-xinclude>false</handle-xinclude>
         </config>
     </p:input>
     <p:output name="data" id="smithXml" debug="smithXml"/>
 </p:processor>

 <!-- Create the Escenic format: Apply the stylesheet to the source xml  -->
 <p:processor name="oxf:xslt">
     <p:input name="data" href="#smithXml" debug="smithXml"/>
     <p:input name="config" href="#firstXslt" debug="firstXslt"/>
     <p:output name="data" id="escenicXml" debug="escenicXml"/>
 </p:processor>

 <!-- Wired off, just send the transformed XML back to the client
for now (using the identity processor below) -->
 <!-- Call the REST webservice -->
 <!--p:processor name="oxf:xforms-submission">
     <p:input name="submission">
         <xforms:submission method="put"
action="http://localhost:8080/timmy/import"/>
     </p:input>
     <p:input name="request" href="#escenicXml" debug="escenicXml"/>
     <p:output name="response" ref="data" debug="response"/>
 </p:processor-->

 <!-- Just return the transformed XML to the user for now.
     Once we get this right, will send it to the webservice instead
(see above) -->
 <p:processor name="oxf:identity">
     <p:input name="data" href="#escenicXml" debug="escenicXml"/>
     <p:output name="data" ref="data" debug="same"/>
 </p:processor>

</p:config>

And here is the stack trace:

java.lang.OutOfMemoryError: Java heap space
     at org.orbeon.oxf.xml.SAXStore.addToCharBuffer(SAXStore.java:424)
     at org.orbeon.oxf.xml.SAXStore.characters(SAXStore.java:269)
     at org.orbeon.oxf.xml.SAXStore.replay(SAXStore.java:197)
     at org.orbeon.oxf.processor.pipeline.TeeProcessor$1.readImpl(TeeProcessor.java:61)
     at org.orbeon.oxf.processor.ProcessorImpl$6.read(ProcessorImpl.java:994)
     at org.orbeon.oxf.processor.ProcessorImpl$ProcessorOutputImpl.read(ProcessorImpl.java:1177)
<snip>
     at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
     at java.lang.Thread.run(Thread.java:613)


Is it the size of the input / source XML that causes an OutOfMemory
error? How about these broken pipes? If so, is there anything I can do
to resolve this (except from  -Xmx<size> )? Does anyone else have
experiences with dealing with large XML documents as inputs and/or
outputs? Am I just abusing Orbeon Forms with this type of use case?

Any insight would be much appreciated. Many thanks!

Sincerely,
Henrik Pettersen

--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws

--
Orbeon Forms - Web Forms for the Enterprise Done the Right Way
http://www.orbeon.com/



--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws





--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws
Reply | Threaded
Open this post in threaded view
|

Re: Re: SAX, DOM, large XML documents and java.lang.OutOfMemory Errors

Erik Bruchez
Administrator
Thanks for the feedback.

As a note, oxf:stx is not an XSLT processor: it is an (old)  
implementation of "Streaming Transformations for XML" [1].

-Erik

[1] http://stx.sourceforge.net/

On Aug 20, 2008, at 9:38 AM, Henrik Pettersen wrote:

> Re-post... My aplogies.
>
> Henrik
>
> ---------- Forwarded message ----------
> From: Henrik Pettersen <[hidden email]>
> Date: Tue, Aug 19, 2008 at 1:52 PM
> Subject: Re: [ops-users] Re: Re: Re: SAX, DOM, large XML documents  
> and java.lang.OutOfMemory Errors
> To: [hidden email]
>
>
> Hi Erik,
>
> thank you for all the background information, I'll be digging around  
> this issue a bit more. Just for reference, I noticed that you offer  
> an XSLT processor implemented with SAX instead of 'tinytree'  
> constructs:
> Streaming Transformations for XML: http://www.orbeon.com/ops/doc/processors-xslt#d87e899
>
> Here is the processor definition (processors-xslt.xml):
>
>     <processor name="oxf:stx">
>         <instantiation name="oxf:trax">
>             <input name="transformer">
>                 <config>
>                     <class>net.sf.joost.trax.TransformerFactoryImpl</
> class>
>                 </config>
>             </input>
>         </instantiation>
>     </processor>
>
> (Notice that the stx processor (unusually) refers to a 3rd party API  
> (Joost): net.sf.joost.trax.TransformerFactoryImpl)
>
> If I do this in my XPL:
>
>
>     <!-- Read in the source XML -->
>     <p:processor name="oxf:url-generator">
>         <p:input name="config">
>             <config>
>                 <url>smith.hotels.short.xml</url>
>
>                 <content-type>text/xml</content-type>
>                 <validating>false</validating>
>                 <handle-xinclude>false</handle-xinclude>
>             </config>
>         </p:input>
>         <p:output name="data" id="smithXml" />
>     </p:processor>
>
>     <!-- Load the stylesheet -->
>
>     <p:processor name="oxf:url-generator">
>         <p:input name="config">
>             <config>
>                 <url>images.xsl</url>
>
>                 <content-type>text/xml</content-type>
>                 <validating>false</validating>
>                 <handle-xinclude>false</handle-xinclude>
>             </config>
>         </p:input>
>         <p:output name="data" id="imagesXslt" />
>     </p:processor>
>
>     <!-- Apply the stylesheet --> <!-- REPLACE WITH STX PROCESSOR  
> HERE -->
>     <p:processor name="oxf:xslt">
>         <p:input name="data" href="#smithXml" />
>         <p:input name="config" href="#imagesXslt" />
>         <p:output name="data" id="images" />
>     </p:processor>
>
>     <!-- My custom processor then streams the href="#images" content  
> to a webservice. -->
>
> I should then have a nice little brook running all the way through  
> my XPL, hopefully avoiding any DOM mounting. Me thinks.
>
> That said, the trickiest part here is (hopefully) writing my custom  
> streaming web service consumer processor: The SAX events are pushed  
> into my processor, so getting an inputstream for this is a bit  
> tricky. See my previous posting on the subject here:
> http://mail-archive.ow2.org/ops-users/2008-08/msg00085.html (Thanks,  
> Erik!)
>
> Erik also had some good ideas for how to deal with this, using  
> java.io.pipes (threads) or a disk buffer  
> (NetUtils.inputStreamToAnyURI()), and I've also posted a question on  
> Experts Exchange (no responses yet):
> Converting SAX events back to an InputSource, using a ContentHandler
> http://www.experts-exchange.com/Programming/Languages/Java/J2SE/JAX_SAXP/Q_23644349.html
>
> Oh, and I agree with your comment: I think sticking with SAX  
> implementation as often as possible is essential, as DOM models do  
> not scale indefinitely -  you'll eventually run out of memory...
>
> Thanks for all your help!
>
> Henrik
>
>
> On Mon, Aug 18, 2008 at 7:05 PM, Erik Bruchez <[hidden email]>  
> wrote:
> I am not sure whether it would help or not. I can imagine cases  
> where it wouldn't.
>
> Realize that in a pipeline, you don't have a single document going  
> through a sequence of steps, but really a new document being  
> produced at each step. At least, this is the most common case  
> (including XSLT).
>
> Consider these cases:
>
> * oxf:url-generator streams by nature (it uses a SAX parser). So  
> producing a DOM instead would mean an extra step.
>
> * XSLT (Saxon) can take anything in pretty much, so a DOM in would  
> be fine. But Saxon naturally streams its output. So again here  
> producing a DOM is an extra step.
>
> * Now put two XSLT transformations in a chain: with a DOM, Saxon  
> must create a DOM at the end of the first transformation. Using SAX,  
> Saxon must create a DOM (well, TinyTree which is more efficient) at  
> the beginning of the second transformation. So the cost is about the  
> same.
>
> If you use SAX, at least you allow the consumer to decide whether a  
> DOM is needed or not, and you keep open the possibility of  
> streaming, which we still use once in a while.
>
> Now what could possibly be done would be some sort of negotiation  
> between the sender and the receiver: the latter could say "I would  
> prefer a TinyTree if you have it", and if the former happens to  
> produce that naturally, then you get the optimal solution.
>
> The bottom line is that I don't think it would be more efficient to  
> use DOM, but maybe, possibly, "format negotiation" could help in  
> some cases.
>
> -Erik
>
>
> On Aug 18, 2008, at 8:08 AM, Jeff Jones wrote:
>
> Erik,
>
> This is a question that's been puzzling me for a while. If streaming  
> is the exception rather than the rule, why is SAX the preferred  
> method for communicating between processors? Wouldn't it be more  
> efficient just to create a DOM representation and pass it down the  
> pipeline instead? It sounds like you might be marshalling and  
> unmarshalling a document several times in the course of a pipeline's  
> execution.
>
> </Jeff>
>
> Erik Bruchez wrote:
> Henrik,
> Processors do communicate through SAX, but individual processors may  
> not stream. In particular:
> * XSLT doesn't stream, it will create a Saxon TinyTree for the input  
> document.
> * The XForms processor also creates DOM trees before processing.
> I would say the case where you can do streaming is the exception  
> rather than the rule.
> -Erik
> On Aug 17, 2008, at 11:57 AM, Henrik Pettersen wrote:
> All,
>
> my email seems to be stuck in some sort of email filter, so I am
> re-posting, this time providing a link for you to download the
> attachment instead:
> http://swiki.sparklingideas.co.uk/smith.zip
>
> Thank you.
>
> Henrik
>
> All,
>
> I have a question about how Orbeon works internally, how it uses DOM
> (it doesn't?) and SAX, and how Orbeon manages its memory.
>
> My problem is that I am getting a "java.lang.OutOfMemoryError: Java
> heap space" when I am parsing larger XML documents with the below
> pipeline definition. This is (to me) somewhat unexpected, as I
> imagined we are talking SAX events all the way,  (hopefully) making
> the size of the input XML irrelevant. As a solution, I could of course
> increase the heap space, but what would happen if I then sent a really
> humongous XML document to my pipeline?
>
> I have attached a zip file with a self contained application that
> (sometimes) causes a OutOfMemory error when run on the default
> settings of Tomcat 5.5.26, OS X 10.4 and Java 1.5.0_13-b05-241.
>
> Here is my XPL definition:
>
> <p:config xmlns:p="http://www.orbeon.com/oxf/pipeline"
>  xmlns:oxf="http://www.orbeon.com/oxf/processors"
>  xmlns:xs="http://www.w3.org/2001/XMLSchema"
>  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>  xmlns:xforms="http://www.w3.org/2002/xforms">
>
>  <!-- p:param name="instance" type="input"/ -->
>  <p:param name="data" type="output"/>
>
>  <!-- Read in the stylesheet definition -->
>  <p:processor name="oxf:url-generator">
>      <p:input name="config">
>          <config>
>              <url>transform.xsl</url>
>              <content-type>text/xml</content-type>
>              <validating>false</validating>
>              <handle-xinclude>false</handle-xinclude>
>          </config>
>      </p:input>
>      <p:output name="data" id="firstXslt" debug="firstXSLT"/>
>  </p:processor>
>
>  <!-- Read in the source XML -->
>  <p:processor name="oxf:url-generator">
>      <p:input name="config">
>          <config>
>              <url>smith.hotels.xml</url>
>              <content-type>text/xml</content-type>
>              <validating>false</validating>
>              <handle-xinclude>false</handle-xinclude>
>          </config>
>      </p:input>
>      <p:output name="data" id="smithXml" debug="smithXml"/>
>  </p:processor>
>
>  <!-- Create the Escenic format: Apply the stylesheet to the source  
> xml  -->
>  <p:processor name="oxf:xslt">
>      <p:input name="data" href="#smithXml" debug="smithXml"/>
>      <p:input name="config" href="#firstXslt" debug="firstXslt"/>
>      <p:output name="data" id="escenicXml" debug="escenicXml"/>
>  </p:processor>
>
>  <!-- Wired off, just send the transformed XML back to the client
> for now (using the identity processor below) -->
>  <!-- Call the REST webservice -->
>  <!--p:processor name="oxf:xforms-submission">
>      <p:input name="submission">
>          <xforms:submission method="put"
> action="http://localhost:8080/timmy/import"/>
>      </p:input>
>      <p:input name="request" href="#escenicXml" debug="escenicXml"/>
>      <p:output name="response" ref="data" debug="response"/>
>  </p:processor-->
>
>  <!-- Just return the transformed XML to the user for now.
>      Once we get this right, will send it to the webservice instead
> (see above) -->
>  <p:processor name="oxf:identity">
>      <p:input name="data" href="#escenicXml" debug="escenicXml"/>
>      <p:output name="data" ref="data" debug="same"/>
>  </p:processor>
>
> </p:config>
>
> And here is the stack trace:
>
> java.lang.OutOfMemoryError: Java heap space
>      at org.orbeon.oxf.xml.SAXStore.addToCharBuffer(SAXStore.java:424)
>      at org.orbeon.oxf.xml.SAXStore.characters(SAXStore.java:269)
>      at org.orbeon.oxf.xml.SAXStore.replay(SAXStore.java:197)
>      at org.orbeon.oxf.processor.pipeline.TeeProcessor
> $1.readImpl(TeeProcessor.java:61)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $6.read(ProcessorImpl.java:994)
>      at org.orbeon.oxf.processor.ProcessorImpl
> $ProcessorOutputImpl.read(ProcessorImpl.java:1177)
> <snip>
>      at org.apache.tomcat.util.threads.ThreadPool
> $ControlRunnable.run(ThreadPool.java:689)
>      at java.lang.Thread.run(Thread.java:613)
>
>
> Is it the size of the input / source XML that causes an OutOfMemory
> error? How about these broken pipes? If so, is there anything I can do
> to resolve this (except from  -Xmx<size> )? Does anyone else have
> experiences with dealing with large XML documents as inputs and/or
> outputs? Am I just abusing Orbeon Forms with this type of use case?
>
> Any insight would be much appreciated. Many thanks!
>
> Sincerely,
> Henrik Pettersen
>
> --
> You receive this message as a subscriber of the [hidden email]  
> mailing list.
> To unsubscribe: mailto:[hidden email]
> For general help: mailto:[hidden email]?subject=help
> OW2 mailing lists service home page: http://www.ow2.org/wws
>
> --
> Orbeon Forms - Web Forms for the Enterprise Done the Right Way
> http://www.orbeon.com/
>
>
>
> --
> You receive this message as a subscriber of the [hidden email]  
> mailing list.
> To unsubscribe: mailto:[hidden email]
> For general help: mailto:[hidden email]?subject=help
> OW2 mailing lists service home page: http://www.ow2.org/wws
>
>
>
>
> --
> You receive this message as a subscriber of the [hidden email]  
> mailing list.
> To unsubscribe: mailto:[hidden email]
> For general help: mailto:[hidden email]?subject=help
> OW2 mailing lists service home page: http://www.ow2.org/wws
--
Orbeon Forms - Web Forms for the Enterprise Done the Right Way
http://www.orbeon.com/



--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws
Reply | Threaded
Open this post in threaded view
|

Re: Re: SAX, DOM, large XML documents and java.lang.OutOfMemory Errors

Mike Ahlers
Hi,

Just to pitch in some remarks. Sax and Stax don't differ that much, both are streaming (event driven), but Stax keeps more overhead. Sax is awkward at sorting for example, while DOM isn't, Stax solves that more or less by keeping references of parent nodes (all the way up to the root node).

See also:
http://stax.codehaus.org/

If standard processors won't do the job, write your own?

My 2 cents,

- Mike
Reply | Threaded
Open this post in threaded view
|

Re: Re: Re: SAX, DOM, large XML documents and java.lang.OutOfMemory Errors

Henrik Pettersen
Thanks, Mike!

I shall certainly have a look at stax. Authoring a few new processors for this wouldn't be all that tricky, except for this issue:
http://mail-archive.ow2.org/ops-users/2008-08/msg00085.html

I'll have to read up on both stx (thanks, Erik) and stax. Not too familiar with these...

Thanks again, everyone.

Henrik

On Wed, Aug 20, 2008 at 10:16 PM, Mike Ahlers <[hidden email]> wrote:

Hi,

Just to pitch in some remarks. Sax and Stax don't differ that much, both are
streaming (event driven), but Stax keeps more overhead. Sax is awkward at
sorting for example, while DOM isn't, Stax solves that more or less by
keeping references of parent nodes (all the way up to the root node).

See also:
http://stax.codehaus.org/

If standard processors won't do the job, write your own?

My 2 cents,

- Mike
--
View this message in context: http://www.nabble.com/SAX%2C-DOM%2C-large-XML-documents-and-java.lang.OutOfMemory-Errors-tp19022330p19078223.html
Sent from the ObjectWeb OPS - Users mailing list archive at Nabble.com.



--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws




--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws