You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commons-dev@ws.apache.org by ch...@apache.org on 2006/05/08 11:18:16 UTC

svn commit: r404977 - in /webservices/commons/trunk/modules/axiom: src/org/apache/axiom/om/impl/llom/OMElementImpl.java src/org/apache/axiom/om/impl/util/OMSerializerUtil.java test/org/apache/axiom/om/NamespaceTest.java

Author: chinthaka
Date: Mon May  8 02:18:13 2006
New Revision: 404977

URL: http://svn.apache.org/viewcvs?rev=404977&view=rev
Log:
Fixing yet another namespace issue with a test case. Thanks Raymond for pointing this out.

Modified:
    webservices/commons/trunk/modules/axiom/src/org/apache/axiom/om/impl/llom/OMElementImpl.java
    webservices/commons/trunk/modules/axiom/src/org/apache/axiom/om/impl/util/OMSerializerUtil.java
    webservices/commons/trunk/modules/axiom/test/org/apache/axiom/om/NamespaceTest.java

Modified: webservices/commons/trunk/modules/axiom/src/org/apache/axiom/om/impl/llom/OMElementImpl.java
URL: http://svn.apache.org/viewcvs/webservices/commons/trunk/modules/axiom/src/org/apache/axiom/om/impl/llom/OMElementImpl.java?rev=404977&r1=404976&r2=404977&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/src/org/apache/axiom/om/impl/llom/OMElementImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/src/org/apache/axiom/om/impl/llom/OMElementImpl.java Mon May  8 02:18:13 2006
@@ -305,10 +305,8 @@
      * @param uri
      */
     public OMNamespace declareDefaultNamespace(String uri) {
-        if (uri == null || "".equals(uri)) {
-            return null;
-        }
-        OMNamespaceImpl namespace = new OMNamespaceImpl(uri, "");
+
+        OMNamespaceImpl namespace = new OMNamespaceImpl(uri == null ? "" : uri, "");
 
         if (namespaces == null) {
             this.namespaces = new HashMap(5);

Modified: webservices/commons/trunk/modules/axiom/src/org/apache/axiom/om/impl/util/OMSerializerUtil.java
URL: http://svn.apache.org/viewcvs/webservices/commons/trunk/modules/axiom/src/org/apache/axiom/om/impl/util/OMSerializerUtil.java?rev=404977&r1=404976&r2=404977&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/src/org/apache/axiom/om/impl/util/OMSerializerUtil.java (original)
+++ webservices/commons/trunk/modules/axiom/src/org/apache/axiom/om/impl/util/OMSerializerUtil.java Mon May  8 02:18:13 2006
@@ -117,6 +117,16 @@
                     writer.setPrefix(prefix, uri);
                 }
             }
+        } else {
+            // now the nsURI passed is "" or null. Meaning we gonna work with defaultNS.
+            // check whether there is a defaultNS already declared. If yes, is it the same as this ?
+            String currentDefaultNSURI = writer.getNamespaceContext().getNamespaceURI("");
+            if( (currentDefaultNSURI != null && !currentDefaultNSURI.equals(uri)) ||
+                    uri != null && !uri.equals(currentDefaultNSURI)){
+                // this has not been declared earlier
+                writer.writeDefaultNamespace(uri);
+                writer.setDefaultNamespace(uri);
+            }
         }
     }
 

Modified: webservices/commons/trunk/modules/axiom/test/org/apache/axiom/om/NamespaceTest.java
URL: http://svn.apache.org/viewcvs/webservices/commons/trunk/modules/axiom/test/org/apache/axiom/om/NamespaceTest.java?rev=404977&r1=404976&r2=404977&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/test/org/apache/axiom/om/NamespaceTest.java (original)
+++ webservices/commons/trunk/modules/axiom/test/org/apache/axiom/om/NamespaceTest.java Mon May  8 02:18:13 2006
@@ -1,11 +1,16 @@
 package org.apache.axiom.om;
 
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.impl.llom.factory.OMXMLBuilderFactory;
 import org.custommonkey.xmlunit.XMLTestCase;
 import org.xml.sax.SAXException;
 
 import javax.xml.namespace.QName;
 import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.util.Iterator;
 /*
@@ -147,6 +152,29 @@
         OMElement childTwo = omFac.createOMElement("ChildElementTwo", ns1, childOne);
 
         assertEquals(1, getNumberOfOccurrences(documentElement.toStringWithConsume(), "xmlns:ns2=\"http://one.org\""));
+    }
+
+
+    public void testNamespaceProblem4() throws Exception {
+        String xml = "<getCreditScoreResponse xmlns=\"http://www.example.org/creditscore/doclitwrapped/\"><score xmlns=\"\">750</score></getCreditScoreResponse>";
+        XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(new ByteArrayInputStream(xml.getBytes()));
+        OMXMLParserWrapper builder = OMXMLBuilderFactory.createStAXOMBuilder(OMAbstractFactory.getOMFactory(), parser);
+        OMElement root = builder.getDocumentElement();
+        String actualXML = root.toString();
+        assertTrue(actualXML.indexOf("xmlns=\"\"")!=-1);
+    }
+
+    public void testNamespaceProblem5() {
+        String xml = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"><soapenv:Header /><soapenv:Body><ns1:createAccountRequest xmlns:ns1=\"http://www.wso2.com/types\"><clientinfo xmlns=\"http://www.wso2.com/types\"><name>bob</name><ssn>123456789</ssn></clientinfo><password xmlns=\"\">passwd</password></ns1:createAccountRequest></soapenv:Body></soapenv:Envelope>";
+
+        try {
+            OMElement documentElement = new StAXOMBuilder(new ByteArrayInputStream(xml.getBytes())).getDocumentElement();
+            String actualXML = documentElement.toString();
+            assertXMLEqual(xml, actualXML);
+        } catch (Exception e) {
+            e.printStackTrace();
+            fail();
+        }
     }
 
     private int getNumberOfOccurrences(String xml, String pattern){