[ 
https://issues.apache.org/jira/browse/WSCOMMONS-517?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12796899#action_12796899
 ] 

Andreas Veithen commented on WSCOMMONS-517:
-------------------------------------------

Using createOMAttribute to create a namespace declaration is neither supported 
nor recommended:

1. It is actually surprising that Woodstox doesn't complain about this when 
serializing the document.

2. Even if in the serialized document, all the elements belong to the namespace 
identified by defaultNS, Axiom (and presumably Woodstox as well) still thinks 
that they have no namespace. This means that any operation other than 
serializing the document may cause unexpected results.

> OMElement.declareDefaultNamespace() declares empty namespace for child 
> element.
> -------------------------------------------------------------------------------
>
>                 Key: WSCOMMONS-517
>                 URL: https://issues.apache.org/jira/browse/WSCOMMONS-517
>             Project: WS-Commons
>          Issue Type: Bug
>          Components: AXIOM
>    Affects Versions: Axiom 1.2.8
>         Environment: Microsoft Windows 2003 Server, Java 1.5.0_11. Axis2 
> version 1.3 (uses AXIOM version 1.2.5). 
>            Reporter: Yechiel Mondrowitz
>            Assignee: Andreas Veithen
>
> When calling declareDefaultNamespace() on a parent node, AXIOM assignes a 
> blank namespace on the first level's child element.  So if XML is passed to 
> AXIOM that looks like this:
> <outerTag>
>     <innerTag>
>         <node1>Hello</node1>
>         <node2>Hello</node2>
>     </innerTag>
> </outerTag>
> And then declareDefaultNamespace() of "http://someNamespace"; is called on the 
> <outerTag>, the resulting XML will be this:
> <outerTag xmlns="http://someNamespace";>
>     <innerTag xmlns="">
>         <node1>Hello</node1>
>         <node2>Hello</node2>
>     </innerTag>
> </outerTag>
> Notice the xmlns="" declared in the <innerTag>.  According to my 
> understanding of XML namespaces, the <innerTag> and its child nodes will no 
> longer belong to the parent namespace of "http://someNamespace";, since it 
> explicitly overrides it with an empty namespace.  So <innerTag> and its child 
> nodes will in fact not belong to any namespace!  Here is a small program to 
> illustrate:
> import org.apache.axiom.om.*;
> import org.apache.axiom.om.impl.llom.util.*;
> public class Test2 {
>     public static void main(String [] args) {
>         try {
>             String xmlString =
>                 "<outerTag>" +
>                     "<innerTag>" +
>                         "<node1>Hello</node1>" +
>                         "<node2>Hello</node2>" +
>                    "</innerTag>" +
>                 "</outerTag>";
>             OMElement elem = AXIOMUtil.stringToOM(xmlString);
>             elem.declareDefaultNamespace("http://someNamespace";);
>             System.out.println(elem.toString());
>         }
>         catch(Exception e) {
>             e.printStackTrace();
>         }
>     }
> }
> The output of this program is this (I added line breaks in the XML for easier 
> readability):
> <outerTag xmlns="http://someNamespace";>
>     <innerTag xmlns="">
>         <node1>Hello</node1>
>         <node2>Hello</node2>
>     </innerTag>
> </outerTag>
> As you can see, the <innerTag> was assigned xmlns="" by AXIOM.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to