Author: veithen Date: Sun Nov 13 18:09:32 2011 New Revision: 1201467 URL: http://svn.apache.org/viewvc?rev=1201467&view=rev Log: Fixed an issue in SAAJ revealed by AXIOM-376.
Modified: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/SOAPElementTest.java Modified: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java?rev=1201467&r1=1201466&r2=1201467&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java (original) +++ axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java Sun Nov 13 18:09:32 2011 @@ -173,10 +173,23 @@ public class SOAPElementImpl extends Nod /* (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 Nod 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) Modified: axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/SOAPElementTest.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/SOAPElementTest.java?rev=1201467&r1=1201466&r2=1201467&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/SOAPElementTest.java (original) +++ axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/SOAPElementTest.java Sun Nov 13 18:09:32 2011 @@ -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 Ass } @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";