I'm binding a schema validated xml document to a cocoon form and then re-saving and sending it back to the database. However, at some point the xml elements are being re-ordered in alphabetical order which causes the schema validation to fail. I'm assuming that this alphabetical re-ordering occurs either when I call the Form.save() method within my flowscript or when I serialize the saved document by calling the serialize method below (as used in the cocoon examples). Can anyone confirm where this re-ordering might be taking place and if possible advise how to prevent it.


function serializeDocument(document) {
    var source = null;
    var resolver = null;
    var writer = null;
    var xmlStr = null;
    try {
        resolver = cocoon.getComponent(Packages.org.apache.cocoon.environment.SourceResolver.ROLE);
        var tf = Packages.javax.xml.transform.TransformerFactory.newInstance();

        if (tf.getFeature(Packages.javax.xml.transform.sax.SAXTransformerFactory.FEATURE)) {
                        writer = new java.io.StringWriter();
            var transformerHandler = tf.newTransformerHandler();
            var transformer = transformerHandler.getTransformer();
            transformer.setOutputProperty(Packages.javax.xml.transform.OutputKeys.INDENT, "true");
            transformer.setOutputProperty(Packages.javax.xml.transform.OutputKeys.METHOD, "xml");
            transformerHandler.setResult(new Packages.javax.xml.transform.stream.StreamResult(writer));

            var streamer = new Packages.org.apache.cocoon.xml.dom.DOMStreamer(transformerHandler);
            streamer.stream(document);
            xmlStr = writer.toString();
        } else {
            throw new Packages.org.apache.cocoon.ProcessingException("Cannot write to string");
        }
    } finally {
        if (writer != null) {
            try {
                writer.flush();
                writer.close();
            } catch (error) {
                cocoon.log.error("Could not flush/close writer: " + error);
            }
        }
    }
    return xmlStr;
}

Thanks

Will

Reply via email to