This is an automated email from the ASF dual-hosted git repository.

billblough pushed a commit to branch 1_5
in repository https://gitbox.apache.org/repos/asf/axis-axis2-java-core.git

commit 0ce4c8f541c8b93affad6c8a82a497df97be22ce
Author: Andreas Veithen <veit...@apache.org>
AuthorDate: Tue Nov 15 10:04:05 2011 +0000

    Merged r1201467 to the 1.5 branch to make sure that the build succeeds with 
Axiom 1.2.13-SNAPSHOT.
---
 .../src/org/apache/axis2/saaj/SOAPElementImpl.java | 32 ++++++++++++----------
 .../org/apache/axis2/saaj/SOAPElementTest.java     | 26 ++++++++++++++++++
 2 files changed, 43 insertions(+), 15 deletions(-)

diff --git a/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java 
b/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java
index 991b8c8..5e1e293 100644
--- a/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java
+++ b/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java
@@ -173,10 +173,23 @@ public class SOAPElementImpl extends NodeImplEx 
implements SOAPElement {
     /* (non-Javadoc)
     * @see javax.xml.soap.SOAPElement#addChildElement(java.lang.String, 
java.lang.String, java.lang.String)
     */
-    public SOAPElement addChildElement(String localName, String prefix, String 
uri)
+    public SOAPElement addChildElement(String localName, String prefix, String 
namespaceURI)
             throws SOAPException {
-        OMNamespace omNamespace = prefix == null || prefix.length() == 0 ? 
element.declareDefaultNamespace(uri) : element.declareNamespace(uri, prefix);
-        return addChildElement(localName, omNamespace.getPrefix());
+        if (prefix == null) {
+            prefix = "";
+        }
+        SOAPElementImpl childEle =
+                new SOAPElementImpl((ElementImpl)getOwnerDocument().
+                        createElementNS(namespaceURI, prefix.length() == 0 ? 
localName : prefix + ":" + localName));
+    
+        childEle.element.setUserData(SAAJ_NODE, childEle, null);
+        childEle.element.setNamespace(prefix.length() == 0
+                ? childEle.element.declareDefaultNamespace(namespaceURI)
+                : childEle.element.declareNamespace(namespaceURI, prefix));
+        element.appendChild(childEle.element);
+        ((NodeImpl)childEle.element.getParentNode()).setUserData(SAAJ_NODE, 
this, null);
+        childEle.setParentElement(this);
+        return childEle;
     }
 
     /* (non-Javadoc)
@@ -189,18 +202,7 @@ public class SOAPElementImpl extends NodeImplEx implements 
SOAPElement {
             throw new SOAPException("Namespace not declared for the give 
prefix: " + prefix);
         }
 
-        SOAPElementImpl childEle =
-                new SOAPElementImpl((ElementImpl)getOwnerDocument().
-                        createElementNS(namespaceURI, prefix + ":" + 
localName));
-
-        childEle.element.setUserData(SAAJ_NODE, childEle, null);
-        childEle.element.setNamespace(prefix == null || prefix.length() == 0
-                ? childEle.element.declareDefaultNamespace(namespaceURI)
-                : childEle.element.declareNamespace(namespaceURI, prefix));
-        element.appendChild(childEle.element);
-        ((NodeImpl)childEle.element.getParentNode()).setUserData(SAAJ_NODE, 
this, null);
-        childEle.setParentElement(this);
-        return childEle;
+        return addChildElement(localName, prefix, namespaceURI);
     }
 
     /* (non-Javadoc)
diff --git a/modules/saaj/test/org/apache/axis2/saaj/SOAPElementTest.java 
b/modules/saaj/test/org/apache/axis2/saaj/SOAPElementTest.java
index c386527..370535c 100644
--- a/modules/saaj/test/org/apache/axis2/saaj/SOAPElementTest.java
+++ b/modules/saaj/test/org/apache/axis2/saaj/SOAPElementTest.java
@@ -38,6 +38,7 @@ import javax.xml.soap.SOAPConstants;
 import javax.xml.soap.SOAPElement;
 import javax.xml.soap.SOAPEnvelope;
 import javax.xml.soap.SOAPException;
+import javax.xml.soap.SOAPFactory;
 import javax.xml.soap.SOAPHeader;
 import javax.xml.soap.SOAPMessage;
 import javax.xml.soap.SOAPPart;
@@ -196,6 +197,31 @@ public class SOAPElementTest extends Assert {
     }
 
     @Validated @Test
+    public void testAddChildElementWithUndeclaredNamespace() throws Exception {
+        SOAPElement element = SOAPFactory.newInstance().createElement("test");
+        SOAPElement child = element.addChildElement("test", "p", "urn:ns");
+        assertEquals(0, element.getAttributes().getLength());
+        assertEquals("urn:ns", child.getNamespaceURI());
+        assertEquals("p", child.getPrefix());
+        assertEquals("test", child.getLocalName());
+        Attr nsDecl = 
child.getAttributeNodeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, "p");
+        assertNotNull(nsDecl);
+        assertEquals("urn:ns", nsDecl.getValue());
+    }
+    
+    @Validated @Test
+    public void testAddChildElementWithDeclaredNamespace() throws Exception {
+        SOAPElement element = SOAPFactory.newInstance().createElement("test");
+        element.setAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, "xmlns:p", 
"urn:ns");
+        SOAPElement child = element.addChildElement("test", "p", "urn:ns");
+        assertEquals("urn:ns", child.getNamespaceURI());
+        assertEquals("p", child.getPrefix());
+        assertEquals("test", child.getLocalName());
+        // TODO: don't know how to fix this :-(
+//        assertEquals(0, child.getAttributes().getLength());
+    }
+    
+    @Validated @Test
     public void testAddChildElement() throws Exception {
         String s = "MyName1";
         String p = "MyPrefix1";

Reply via email to