[ 
https://issues.apache.org/jira/browse/AXIOM-372?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13068894#comment-13068894
 ] 

Andreas Veithen commented on AXIOM-372:
---------------------------------------

Although XML 1.1 allows writing a namespace declaration such as xmlns:p="", 
this actually doesn't bind the empty namespace name to the prefix, but instead 
undeclares the prefix, i.e. "p" is no longer a valid prefix in the scope where 
this declaration appears. Although the same syntax is used in both cases, 
adding a namespace declaration to bind a prefix to a (non empty) namespace URI 
and adding a namespace declaration to undeclare a prefix are two fundamentally 
different operations from the point of view of the application, and it would 
make sense to implement them using two different methods. Therefore the 
proposed solution is as follows:

1. Let OMElement#declareNamespace(String, String) and 
OMElement#declareNamespace(OMNamespace) throw an exception if an attempt is 
made to bind the empty namespace name to a prefix (instead of or in addition to 
throwing an exception in the serialization code). This has the additional 
advantage of simplifying the identification of code that (accidentally) 
attempts to create an invalid namespace binding.

2. Add a new method undeclarePrefix(String) to OMElement that allows creating a 
namespace declaration that undeclares a prefix (and which meant to be used only 
by XML 1.1 aware code).

> Axiom should reject attempts to create illegal namespace declarations
> ---------------------------------------------------------------------
>
>                 Key: AXIOM-372
>                 URL: https://issues.apache.org/jira/browse/AXIOM-372
>             Project: Axiom
>          Issue Type: Bug
>          Components: API, DOOM, LLOM
>    Affects Versions: 1.2.12
>            Reporter: Andreas Veithen
>            Assignee: Andreas Veithen
>            Priority: Minor
>
> According to the Namespaces in XML 1.0 (Second Edition) specification, it is 
> illegal to bind a namespace prefix to the empty namespace URI. Only the 
> default namespace can have an empty URI:
> "[Definition: If the attribute name matches PrefixedAttName, then the NCName 
> gives the namespace prefix, used to associate element and attribute names 
> with the namespace name in the attribute value in the scope of the element to 
> which the declaration is attached. In such declarations, the namespace name 
> may not be empty. ]"
> (Note that this constraint was dropped in the Namespaces in XML 1.1 
> specification)
> OMElement#declareNamespace doesn't enforce this constraint and namespace 
> declarations that violate this requirement are silently dropped during 
> serialization (by code in OMSerializerUtil#isAssociated). This behavior is 
> problematic because it may result in subtle issues such as unbound namespace 
> prefixes.
> The serialization code should throw an exception if the object model contains 
> an invalid namespace declaration. We should also make sure that Axiom itself 
> never generates such invalid namespace declarations. Indeed, the code in 
> OMSerializerUtil#isAssociated has the following comment:
> "Cannot associate a prefix with an unqualifed name. However sometimes axiom 
> creates a fake prefix name if xmns="" is not in effect."
> If this is true, then Axiom needs to be fixed.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@ws.apache.org
For additional commands, e-mail: dev-h...@ws.apache.org

Reply via email to