The problem appears to be with XMLSerializer ( or more accurately it's base
class BaseMarkupSerializer ). The base class calls
XMLSerializer::serializeElement. This method does not seem to do anything
WRT namespaces. The method the base class should call is
XMLSerializer::startElement ( the content handler version ). This method
does write out namespace decls.

I'm not sure whether this is a bug or if there is some way of telling
BaseMarkupSerializer/XMLSerializer to use the namespace aware method.

Martin

-----Original Message-----
From: Anthony Dodd
To: Xerces-Dev (E-mail)
Sent: 03/04/00 00:48
Subject: XMLSerializer and Namespaces

Hi

I'm currently developing a web based application which needs to be able
to
transmit the contents of an XML Document (Built using Xerces 3.0.1) via
HTTP
to web application server. The document I want to send should have the
following structure. 

                <soap:Envelope xmlns:soap="Some-Namespace-URI">
                        <soap:Body>
                                <t:get
xmlns:t="Someother-Namespace-URI">
                                        <t:element1/>
                                </t:get>
                        </soap:body>
                </soap:Envelope>

I've attempted to create this document using the following java code.
I'm
making no assumptions that the following code is correct, so any
guidelines
would be really useful.

                //Create a new document with given Namespace & Qualified
name 
                org.w3c.dom.Document doc =
dom.createDocument("Some-Namespace-URI","soap:Envelope",null);

                //Create the Body element       
                org.w3c.dom.Element body =
doc.createElementNS("Some-Namespace-URI", "soap:Body");
                doc.getDocumentElement().appendChild(body);

                //Create the get element  
                org.w3c.dom.Element tget =
doc.createElementNS("Someother-Namespace-URI", "t:get");
                body.appendChild(tget);
                 
                //Create the element1 element   
                org.w3c.dom.Element element1 =
doc.createElementNS("Someother-Namespace-URI", "t:element1);
                tget.appendChild(element1);

When I use the Xerces serializer via the XMLSerializer implementation,
the
following code snippet shows how I created and invoked the serializer. 

                XMLSerializer serializer = new XMLSerializer(System.out,
new
OutputFormat(doc2));
                serializer.serialize(doc2);
                serializer.flush();

this produces the following output

                <?xml version="1.0" encoding="UTF-8"?>
        
<soap:Envelope><soap:Body><t:get><t:element1/></t:get></soap:Body></soap
:Env
elope>  

which does not exactly resemble the original document. Is the Xerces
serializer compliant with DOM Level 2, can it recognise the namespaces
and
reproduce them in the serialized output. If any body got a solution to
this
problem I'd be most grateful.

Thanks
Anthony Dodd

Reply via email to