Ok, one small mistake I have done.

Once u make the parser, namespaceAware, I get the correct behaviour for
the localname.

BUT, at the same time, getLocalName returns the correct value,
irrespective of whether the element has a namespace or not. Meaning the
current Dom RI is correct, once you make the parser namespace aware.

So Ruchith ............. :-)

Chinthaka

Eran Chinthaka wrote:

> Hmm, interesting discussion.
>
> Let me add something too.
> I wrote a sample code using DOM and it seems the current DomImpl is
> returning null for any element.getLocalName() call,  irrespective of
> whether it is qualified or not. This is bit of strange to me.
>
> I created a SOAPEnvelope and and called
> documentElement.getLocalName(), its returning null. But when I call
> getTagName(), it returns "soapenv:Envelope". So there is a problem in
> the current DOM impl too.
>
> BTW, looking at Ruchith's proposals, I don't like the options #1 as
> there he has tried to make the impl neutral code independant code,
> non-neutral by putting instance of checking. (Please see [1] for the
> code.)
>
> Anyway, I don't think those options are needed if Sanjiva's points are
> accepted :-)
>
> -- Chinthaka
>
>
> [1] : http://www.rafb.net/paste/results/IGuT5M12.html
>
>
>
> Sanjiva Weerawarana wrote:
>
> >On Thu, 2005-12-22 at 16:50 +0600, Ruchith Fernando wrote:
>
> >>Hi Azeez,
> >>
> >>This is a known issue in serializing *unqualified* xml elements.
>
>
> >First of all, IIRC the test envelope is wrong: children of
> ><soap:Body> *must* be qualified.
>
> >However, that does not excuse the NPE behavior :).
>
> >>org.apache.axis2.om.impl.llom.OMSerializerUtil was originally
> >>written to only work with LLOM OM implementation. And it uses
> >>getLocalName() of OMElement to get the local part of a qualified
> >>element OR the 'tag name' of a qualified element.
>
>
> >OK. (You meant "unqualified" in the last bit there I believe.)
>
> >>And now DOOM uses it to serialize DOOM elements. But according to
> >>the DOM APIs[1] (Proof: [2]) the when getLocalName() is called
> >>on an unqualified element it will be null. And DOOM does this
> >>properly to comply with DOM interfaces.
>
>
> >I just looked thru the DOM L2 spec [1] and AFAICT the behavior is
> >not clearly defined. In particular, it says:
>
> >"localName of type DOMString, readonly, introduced in DOM Level 2
> >Returns the local part of the qualified name of this node. For
> >nodes of any type other than ELEMENT_NODE and ATTRIBUTE_NODE and
> >nodes created with a DOM Level 1 method, such as createElement from
> >the Document interface, this is always null".
>
> >Note that it does not say what happens if the name was not
> >qualified at all. There's further discussion of namespace issues in
> >[2] but that does not clarify it either. So, at least to me, it
> >appears that you're noticing the behavior of the default DOM impl
> >rather than spec compliance.
>
> >>Therefore we have two options to solve this problem: 1.) Modify
> >>OMSerializerUtil to check for whether the element being
> >>serialized is a DOM element by checking instanceof
> >>org.w3c.Element and calling getTagName if the element is not
> >>namespace qualified.
> >>
> >>2.) Add another method to OMElement interface : public String
> >>getTagName() where we can use it in the case when we serialize an
> >>unqualified element (either LLOM or DOOM).
> >>
> >>What do you think?
>
>
> >If the spec indeed does not specify a given behavior, my preference
> >would be to change getLocalName() to return the name if the
> >OMElement is unqualified.
>
> >Sanjiva. [1]
> >http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html
> >[2]
> >http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#Namespaces-Considerations
>
>
>
>
>

Reply via email to