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 di...@apache.org on 2007/07/10 20:42:29 UTC

svn commit: r555034 - in /webservices/commons/trunk/modules/axiom: ./ modules/axiom-api/src/main/java/org/apache/axiom/om/impl/serialize/ modules/axiom-api/src/main/java/org/apache/axiom/om/impl/util/ modules/axiom-api/src/main/java/org/apache/axiom/om...

Author: dims
Date: Tue Jul 10 11:42:27 2007
New Revision: 555034

URL: http://svn.apache.org/viewvc?view=rev&rev=555034
Log:
Fix for WSCOMMONS-175 - Serialization: Namespace declarations only output on first iteration

- Tested with SJSXP 1.0.1
- Added DeclTest
- Explictly set IS_REPAIRING_NAMESPACES to false (IS_REPAIRING_NAMESPACES is default in woodstox by default)
- pom changes to be able to specify stax impl in just one place - the main pom.xml


Added:
    webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/DeclTest.java
Modified:
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/serialize/StreamingOMSerializer.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/util/OMSerializerUtil.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/util/StAXUtils.java
    webservices/commons/trunk/modules/axiom/modules/axiom-tests/pom.xml
    webservices/commons/trunk/modules/axiom/pom.xml

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/serialize/StreamingOMSerializer.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/serialize/StreamingOMSerializer.java?view=diff&rev=555034&r1=555033&r2=555034
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/serialize/StreamingOMSerializer.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/serialize/StreamingOMSerializer.java Tue Jul 10 11:42:27 2007
@@ -156,7 +156,7 @@
             String namespace = reader.getNamespaceURI(i);
             namespace = (namespace != null && namespace.length() == 0) ? null : namespace;
 
-            String newPrefix = OMSerializerUtil.generateSetPrefix(prefix, namespace, writer, false);
+            String newPrefix = OMSerializerUtil.generateSetPrefix(prefix, namespace, writer, false, setPrefixFirst);
             // If this is a new association, remember it so that it can written out later
             if (newPrefix != null) {
                 if (writePrefixList == null) {
@@ -173,7 +173,7 @@
         // Generate setPrefix for the element
         // If the prefix is not associated with a namespace yet, remember it so that we can
         // write out a namespace declaration
-        String newPrefix = OMSerializerUtil.generateSetPrefix(ePrefix, eNamespace, writer, false);
+        String newPrefix = OMSerializerUtil.generateSetPrefix(ePrefix, eNamespace, writer, false, setPrefixFirst);
         // If this is a new association, remember it so that it can written out later
         if (newPrefix != null) {
             if (writePrefixList == null) {
@@ -203,7 +203,7 @@
                         writerPrefix :
                         generateUniquePrefix(writer.getNamespaceContext());
             }
-            newPrefix = OMSerializerUtil.generateSetPrefix(prefix, namespace, writer, true);
+            newPrefix = OMSerializerUtil.generateSetPrefix(prefix, namespace, writer, true, setPrefixFirst);
             // If the prefix is not associated with a namespace yet, remember it so that we can
             // write out a namespace declaration
             if (newPrefix != null) {

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/util/OMSerializerUtil.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/util/OMSerializerUtil.java?view=diff&rev=555034&r1=555033&r2=555034
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/util/OMSerializerUtil.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/util/OMSerializerUtil.java Tue Jul 10 11:42:27 2007
@@ -241,7 +241,7 @@
             namespace = (namespace != null && namespace.length() == 0) ? null : namespace;
 
 
-            String newPrefix = generateSetPrefix(prefix, namespace, writer, false);
+            String newPrefix = generateSetPrefix(prefix, namespace, writer, false, setPrefixFirst);
             // If this is a new association, remember it so that it can written out later
             if (newPrefix != null) {
                 if (writePrefixList == null) {
@@ -257,7 +257,7 @@
 
         // Generate setPrefix for the element
         // Get the prefix and namespace of the element.  "" and null are identical.
-        String newPrefix = generateSetPrefix(ePrefix, eNamespace, writer, false);
+        String newPrefix = generateSetPrefix(ePrefix, eNamespace, writer, false, setPrefixFirst);
         // If this is a new association, remember it so that it can written out later
         if (newPrefix != null) {
             if (writePrefixList == null) {
@@ -292,7 +292,7 @@
                 prefix = (writerPrefix != null) ?
                         writerPrefix : getNextNSPrefix();
             }
-            newPrefix = generateSetPrefix(prefix, namespace, writer, true);
+            newPrefix = generateSetPrefix(prefix, namespace, writer, true, setPrefixFirst);
             // If the prefix is not associated with a namespace yet, remember it so that we can
             // write out a namespace declaration
             if (newPrefix != null) {
@@ -518,7 +518,7 @@
      * @return prefix name if a setPrefix/setDefaultNamespace is performed
      */
     public static String generateSetPrefix(String prefix, String namespace, XMLStreamWriter writer,
-                                           boolean attr) throws XMLStreamException {
+                                           boolean attr, boolean isSetPrefixFirst) throws XMLStreamException {
         // Generate setPrefix/setDefaultNamespace if the prefix is not associated.
         String newPrefix = null;
         if (namespace != null) {
@@ -540,6 +540,9 @@
                 }
             } else {
                 // No Action needed..The writer already has associated this prefix to this namespace
+                if(isSetPrefixFirst){
+                    newPrefix = writer.getNamespaceContext().getPrefix(namespace);
+                }
             }
         } else {
             // Unqualified Namespace

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/util/StAXUtils.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/util/StAXUtils.java?view=diff&rev=555034&r1=555033&r2=555034
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/util/StAXUtils.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/util/StAXUtils.java Tue Jul 10 11:42:27 2007
@@ -125,6 +125,7 @@
                                     try {
                                         currentThread.setContextClassLoader(StAXUtils.class.getClassLoader());
                                         factory = XMLOutputFactory.newInstance();
+                                        factory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, Boolean.FALSE);
                                     }
                                     finally {
                                         currentThread.setContextClassLoader(savedClassLoader);
@@ -136,7 +137,9 @@
             },
             new ObjectCreator() {
                 public Object newObject() {
-                    return XMLOutputFactory.newInstance();
+                    XMLOutputFactory factory = XMLOutputFactory.newInstance();
+                    factory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, Boolean.FALSE);
+                    return factory;
                 }
             }
     });

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-tests/pom.xml
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-tests/pom.xml?view=diff&rev=555034&r1=555033&r2=555034
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-tests/pom.xml (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-tests/pom.xml Tue Jul 10 11:42:27 2007
@@ -80,8 +80,8 @@
             <scope>compile</scope>
         </dependency>
         <dependency>
-            <groupId>woodstox</groupId>
-            <artifactId>wstx-asl</artifactId>
+            <groupId>${stax.impl.groupid}</groupId>
+            <artifactId>${stax.impl.artifact}</artifactId>
         </dependency>
     </dependencies>
     <build>

Added: webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/DeclTest.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/DeclTest.java?view=auto&rev=555034
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/DeclTest.java (added)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/DeclTest.java Tue Jul 10 11:42:27 2007
@@ -0,0 +1,47 @@
+package org.apache.axiom.om;
+
+import org.custommonkey.xmlunit.XMLTestCase;
+
+import javax.xml.stream.XMLStreamException;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+
+public class DeclTest extends XMLTestCase {
+
+    static OMFactory factory = OMAbstractFactory.getOMFactory();
+
+    static OMDocument model = factory.createOMDocument();
+
+    static {
+        OMElement root = factory.createOMElement("root", null);
+        model.addChild(root);
+    }
+
+    private OMElement getElement(String name) {
+        OMNamespace ns1 = factory.createOMNamespace("axiom:declaration-test,2007:1", "test");
+        OMElement elem = factory.createOMElement(name, ns1);
+        return elem;
+    }
+
+
+    private void writeModel(OutputStream os) throws XMLStreamException {
+        model.serialize(os);
+    }
+
+    public void testDecl() throws Exception {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+        DeclTest app = new DeclTest();
+        model.getOMDocumentElement().addChild(app.getElement("foo"));
+        model.getOMDocumentElement().addChild(app.getElement("bar"));
+        model.getOMDocumentElement().addChild(app.getElement("foo"));
+        app.writeModel(baos);
+
+        String xmlExpected = "<?xml version=\"1.0\" encoding=\"utf-8\"?><root><test:foo xmlns:test=\"axiom:declaration-test,2007:1\"></test:foo><test:bar xmlns:test=\"axiom:declaration-test,2007:1\"></test:bar><test:foo xmlns:test=\"axiom:declaration-test,2007:1\"></test:foo></root>";
+        this.assertXMLEqual(new InputStreamReader(new ByteArrayInputStream(xmlExpected.getBytes())),
+                new InputStreamReader(new ByteArrayInputStream(baos.toByteArray())));
+
+    }
+}

Modified: webservices/commons/trunk/modules/axiom/pom.xml
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/pom.xml?view=diff&rev=555034&r1=555033&r2=555034
==============================================================================
--- webservices/commons/trunk/modules/axiom/pom.xml (original)
+++ webservices/commons/trunk/modules/axiom/pom.xml Tue Jul 10 11:42:27 2007
@@ -385,9 +385,9 @@
                 </exclusions>
             </dependency>
             <dependency>
-                <groupId>woodstox</groupId>
-                <artifactId>wstx-asl</artifactId>
-                <version>3.2.0</version>
+                <groupId>${stax.impl.groupid}</groupId>
+                <artifactId>${stax.impl.artifact}</artifactId>
+                <version>${stax.impl.version}</version>
             </dependency>
             <dependency>
                 <groupId>jaxen</groupId>
@@ -502,5 +502,8 @@
     </modules>
     <properties>
         <axiom.version>${pom.version}</axiom.version>
+        <stax.impl.groupid>org.codehaus.woodstox</stax.impl.groupid>
+        <stax.impl.artifact>wstx-asl</stax.impl.artifact>
+        <stax.impl.version>3.2.1</stax.impl.version>
     </properties>
 </project>



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: commons-dev-help@ws.apache.org