Hello.
I'm using Xalan 2.4.1 to pass a nodeset to a static Java method that requests a parameter of type org.w3c.dom.Node. The nodeset represents a complete XML document (at least in theory) that I intend to convert to a string to be passed along via JMS for further transformation.
The nodeset contains elements like this:
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="/filesystem/path"/>
That are to be eventually parsed and replaced with the contents of the xml file in @href. In the Java method, I'm using org.apache.xml.serialize.XMLSerializer to convert the nodeset into a string like this:
public static void sendXML(org.w3c.dom.Node docNode) {orc.w3c.dom.Document doc = (org.w3c.dom.Document)docNode;
StringWriter stringWriter = new StringWriter();
XMLSerializer serializer = new XMLSerializer((Writer)stringWriter, new OutputFormat(doc));
try {
serializer.serialize(doc);
} catch (IOException ignored) { }
System.err.println(stringWriter.toString());
}
This works well, except that in the resulting output from serialize(doc) the namespace declaration on the xi:include elements is missing. This results in invalid XML, which, when parsed after being sent via JMS, results in errors stating that the namespace for prefix 'xi' is undeclared.
I've tried changing the static method's argument type to org.w3c.dom.Document and skipping the cast, but Xalan doesn't find the method then.
Can anyone tell me either how to avoid losing this namespace declaration or another way to pass an entire XML document into an extension method?
Thanks a lot. Brian
