Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

'com.fasterxml.aalto.impl.StreamExceptionBase: Can not output XML declaration, after other output has already been done.' when trying to transform XML using XSLT #7

Closed
nestrada opened this issue May 4, 2011 · 4 comments

Comments

@nestrada
Copy link

nestrada commented May 4, 2011

Hello,

I wanted to test out the performances of aalto so I wrote this simple test program where I indent some XML using an XSLT stylesheet and use StaXSources and StaXResults as the input and output of the Transformer respectively.

Here is my test code:

public static void main(String[] args) throws Exception {

    SAXTransformerFactory xformerFactory = (SAXTransformerFactory) TransformerFactory
            .newInstance();

    InputStream is = null;

    is = XMLTest.class.getResourceAsStream("/xml/indenter.xsl");
    Templates indenter = xformerFactory.newTemplates(new StreamSource(is));
    is.close();

    System.out.println(indenter);

    File xml = new File(args[0]);
    File outXml = new File(args[0] + ".out");

    // XMLInputFactory xif = XMLInputFactory.newFactory(
    // "com.sun.xml.internal.stream.XMLInputFactoryImpl", XMLTest.class.getClassLoader());
    XMLInputFactory xif = XMLInputFactory.newFactory(
            "com.fasterxml.aalto.stax.InputFactoryImpl", XMLTest.class.getClassLoader());

    xif.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE);
    xif.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, Boolean.TRUE);
    System.out.println(xif);
    // XMLOutputFactory xof = XMLOutputFactory.newFactory(
    // "com.sun.xml.internal.stream.XMLOutputFactoryImpl", XMLTest.class.getClassLoader());
    XMLOutputFactory xof = XMLOutputFactory.newFactory(
            "com.fasterxml.aalto.stax.OutputFactoryImpl", XMLTest.class.getClassLoader());
    System.out.println(xof);

    Source in = new StAXSource(xif.createXMLStreamReader(new FileInputStream(xml)));
    Result out = new StAXResult(
            xof.createXMLStreamWriter(new FileOutputStream(outXml), "UTF-8"));

    indenter.newTransformer().transform(in, out);
    // xformerFactory.newTransformer().transform(in, out);

}

And I get the exception visible in the title. Any help would be suggested.

Nicolas

@nestrada
Copy link
Author

nestrada commented May 4, 2011

An additional note, when I comment the indenter.newTransformer().transform() and replace it with the line below (ie. a pass through transformer), I get the following exception:

ERREUR : 'com.fasterxml.aalto.impl.StreamExceptionBase: Trying to declare prefix xmlns (illegal as per NS 1.1 #4)'
Exception in thread "main" javax.xml.transform.TransformerException: javax.xml.stream.XMLStreamException: com.fasterxml.aalto.impl.StreamExceptionBase: Trying to declare prefix xml
ns (illegal as per NS 1.1 #4)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:719)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313)
at xml.XMLTest.main(XMLTest.java:78)
Caused by: javax.xml.stream.XMLStreamException: com.fasterxml.aalto.impl.StreamExceptionBase: Trying to declare prefix xmlns (illegal as per NS 1.1 #4)
at com.sun.org.apache.xalan.internal.xsltc.trax.StAXStream2SAX.handleCharacters(StAXStream2SAX.java:266)
at com.sun.org.apache.xalan.internal.xsltc.trax.StAXStream2SAX.bridge(StAXStream2SAX.java:171)
at com.sun.org.apache.xalan.internal.xsltc.trax.StAXStream2SAX.parse(StAXStream2SAX.java:120)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:656)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:707)
... 2 more

@nestrada nestrada closed this as completed May 4, 2011
@nestrada nestrada reopened this May 4, 2011
@nestrada
Copy link
Author

nestrada commented May 4, 2011

Whoops I forgot to show the stacktrace for the first exception

ERREUR : 'com.fasterxml.aalto.impl.StreamExceptionBase: Can not output XML declaration, after other output has already been done.'
Exception in thread "main" javax.xml.transform.TransformerException: com.sun.org.apache.xalan.internal.xsltc.TransletException: com.fasterxml.aalto.impl.StreamExceptionBase: Can no
t output XML declaration, after other output has already been done.
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:713)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313)
at xml.XMLTest.main(XMLTest.java:77)
Caused by: com.sun.org.apache.xalan.internal.xsltc.TransletException: com.fasterxml.aalto.impl.StreamExceptionBase: Can not output XML declaration, after other output has already b
een done.
at com.sun.org.apache.xalan.internal.xsltc.dom.SAXImpl.characters(SAXImpl.java:1564)
at com.sun.org.apache.xalan.internal.xsltc.dom.DOMAdapter.characters(DOMAdapter.java:330)
at GregorSamsa.applyTemplates()
at GregorSamsa.template$dot$0()
at GregorSamsa.applyTemplates()
at GregorSamsa.applyTemplates()
at GregorSamsa.transform()
at com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet.transform(AbstractTranslet.java:602)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:709)
... 2 more

I would be happen to attach the indenter.xsl XSLT stylesheet, but I can't seem to paste it here. Note however that it works fine using the standard XML input and output factories.

@nestrada nestrada closed this as completed May 4, 2011
@nestrada nestrada reopened this May 4, 2011
@cowtowncoder
Copy link
Member

Hmmh. I suspect that indentation calls are what cause problems (since writing output for indentation could be taken as output preceding xml declaration).

I'll see if I can figure out what gives...

@cowtowncoder
Copy link
Member

Can not reproduce without an example.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants