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";