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){


Reply via email to