Author: thomas.diesler(a)jboss.com
Date: 2007-04-11 13:58:59 -0400 (Wed, 11 Apr 2007)
New Revision: 2804
Modified:
trunk/jbossws-core/src/java/org/jboss/ws/core/utils/DOMWriter.java
trunk/jbossws-tests/src/java/org/jboss/test/ws/common/utils/DOMWriterTestCase.java
Log:
Fix duplicate default namespace declaration
Modified: trunk/jbossws-core/src/java/org/jboss/ws/core/utils/DOMWriter.java
===================================================================
--- trunk/jbossws-core/src/java/org/jboss/ws/core/utils/DOMWriter.java 2007-04-11 16:47:05
UTC (rev 2803)
+++ trunk/jbossws-core/src/java/org/jboss/ws/core/utils/DOMWriter.java 2007-04-11 17:58:59
UTC (rev 2804)
@@ -67,7 +67,6 @@
import java.util.Iterator;
import java.util.Map;
-import org.jboss.logging.Logger;
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
@@ -83,7 +82,6 @@
*/
public class DOMWriter
{
- private static Logger log = Logger.getLogger(DOMWriter.class);
// Print writer
private PrintWriter out;
// True, if canonical output
@@ -102,6 +100,8 @@
private Node rootNode;
// True if we want namespace completion
private boolean completeNamespaces = true;
+ // The current default namespace
+ private String currentDefaultNamespace;
public DOMWriter(Writer w)
{
@@ -290,6 +290,9 @@
String atName = attr.getNodeName();
String atValue = normalize(attr.getNodeValue(), canonical);
+ if (atName.equals("xmlns"))
+ currentDefaultNamespace = atValue;
+
if (atPrefix != null && !atPrefix.equals("xmlns")
&& !atPrefix.equals("xml"))
{
String nsURI = getNamespaceURI(atPrefix, element, rootNode);
@@ -332,9 +335,16 @@
// The SAX ContentHandler will by default not add the namespace declaration
// <Hello xmlns='http://somens'>World</Hello>
- if (elPrefix == null && elNamespaceURI != null &&
element.getAttribute("xmlns").length() == 0)
- out.print(" xmlns='" + elNamespaceURI + "'");
-
+ if (elPrefix == null && elNamespaceURI != null)
+ {
+ String defaultNamespace = element.getAttribute("xmlns");
+ if (defaultNamespace.length() == 0 &&
!elNamespaceURI.equals(currentDefaultNamespace))
+ {
+ out.print(" xmlns='" + elNamespaceURI +
"'");
+ currentDefaultNamespace = elNamespaceURI;
+ }
+ }
+
if (hasChildNodes)
{
out.print('>');
Modified:
trunk/jbossws-tests/src/java/org/jboss/test/ws/common/utils/DOMWriterTestCase.java
===================================================================
---
trunk/jbossws-tests/src/java/org/jboss/test/ws/common/utils/DOMWriterTestCase.java 2007-04-11
16:47:05 UTC (rev 2803)
+++
trunk/jbossws-tests/src/java/org/jboss/test/ws/common/utils/DOMWriterTestCase.java 2007-04-11
17:58:59 UTC (rev 2804)
@@ -222,30 +222,31 @@
public void testElementNamespaceURIElementNS() throws Exception
{
- String xmlIn = "<Hello
xmlns='http://somens'>World</Hello>";
+ String xmlIn = "<Hello
xmlns='http://somens'><Sub>World</Sub></Hello>";
Element root = DOMUtils.createElement(new QName("http://somens",
"Hello"));
assertEquals("http://somens", root.getNamespaceURI());
- root.setTextContent("World");
+ Element child = (Element)root.appendChild(DOMUtils.createElement(new
QName("Sub")));
+ child.setTextContent("World");
- String xmlOut = DOMWriter.printNode(root, true);
+ String xmlOut = DOMWriter.printNode(root, false);
assertEquals(xmlIn, xmlOut);
}
public void testElementNamespaceURIDocumentParse() throws Exception
{
- String xmlIn = "<Hello
xmlns='http://somens'>World</Hello>";
+ String xmlIn = "<Hello
xmlns='http://somens'><Sub>World</Sub></Hello>";
Element root = DOMUtils.parse(xmlIn);
assertEquals("http://somens", root.getNamespaceURI());
- String xmlOut = DOMWriter.printNode(root, true);
+ String xmlOut = DOMWriter.printNode(root, false);
assertEquals(xmlIn, xmlOut);
}
public void testElementNamespaceURITransformer() throws Exception
{
- String xmlIn = "<Hello
xmlns='http://somens'>World</Hello>";
+ String xmlIn = "<Hello
xmlns='http://somens'><Sub>World</Sub></Hello>";
StreamSource source = new StreamSource(new
ByteArrayInputStream(xmlIn.getBytes()));
Transformer transformer = TransformerFactory.newInstance().newTransformer();
@@ -256,7 +257,7 @@
Element root = ((Document)result.getNode()).getDocumentElement();
assertEquals("http://somens", root.getNamespaceURI());
- String xmlOut = DOMWriter.printNode(root, true);
+ String xmlOut = DOMWriter.printNode(root, false);
assertEquals(xmlIn, xmlOut);
}
}
Show replies by date