XmlUtils.setNamespaceAttribute allows duplicate namespace declarations
----------------------------------------------------------------------
Key: MUSE-240
URL: https://issues.apache.org/jira/browse/MUSE-240
Project: Muse
Issue Type: Bug
Components: Utilities - General, QName, and XML
Affects Versions: 2.2.0, 2.1.0, 2.0.0, 2.0.0 M2, 2.0.0 M1, 2.3.0
Environment: j2sdk1.4.2_13, latest muse from anonsvn repository
Reporter: Rich Lucente
Assignee: Dan Jemiolo
Priority: Minor
Fix For: 2.3.0
XmlUtils.setNamespaceAttribute allows duplicate namespace declarations because
it incorrectly looks for existing namespace declarations in the attributes
collection. It's my understanding that xml namespace declarations are distinct
from attributes and do not always appear in the attributes collection. I've
tested the patch below under multiple cases including namespaces bound to the
element, namespaces bound to an attribute in the element, default element
namespace bindings, and default attribute namespace bindings. Hope this helps!
*** original/XmlUtils.java Sun Jul 1 22:32:07 2007
--- updated/XmlUtils.java Sun Jul 1 22:32:23 2007
***************
*** 1836,1846 ****
{
String attributeName = XMLNS_PREFIX;
! if (prefix != null)
! attributeName += ':' + prefix;
!
! if (!element.hasAttribute(attributeName))
! element.setAttribute(attributeName, namespaceURI);
}
/**
--- 1836,1874 ----
{
String attributeName = XMLNS_PREFIX;
! // correctly handle null or blank prefix
! boolean hasPrefix = (prefix != null && prefix.length() > 0);
!
! if (hasPrefix)
! attributeName += ':' + prefix;
!
! // do not add namespace attribute if matching attribute found,
or
! // element has matching bound namespace, or attempting to
redefine
! // element's bound default namespace
! if ( element.hasAttribute(attributeName)
! || ( element.getNamespaceURI() != null
! && ( (!hasPrefix && element.getPrefix() ==
null)
! || ( element.getPrefix() != null
! &&
element.getPrefix().equals(prefix))))) {
! return;
! }
!
! // do not add namespace attribute if any attributes have the
same
! // bound prefix or attempting to redefine attribute's bound
default
! // namespace
! NamedNodeMap attrs = element.getAttributes();
! for (int index = 0; index < attrs.getLength(); index++) {
! Attr attr = (Attr) attrs.item(index);
! if ( attr.getNamespaceURI() != null
! && ( (!hasPrefix && attr.getPrefix() == null)
! || ( attr.getPrefix() != null
! &&
attr.getPrefix().equals(prefix)))) {
! return;
! }
! }
!
! // otherwise, add unique namespace
! element.setAttribute(attributeName, namespaceURI);
}
/**
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]