Bug 3442: when building the prefix table for an element, just override prefixes defined in parent element with uris that have been redefined by the element instead of keeping both uris in the table.


git-svn-id: https://svn.apache.org/repos/asf/xalan/java/trunk@335485 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/org/apache/xalan/templates/ElemTemplateElement.java b/src/org/apache/xalan/templates/ElemTemplateElement.java
index 2a2c86c..6e05b9e 100644
--- a/src/org/apache/xalan/templates/ElemTemplateElement.java
+++ b/src/org/apache/xalan/templates/ElemTemplateElement.java
@@ -1012,6 +1012,7 @@
           decl = new XMLNSDecl(prefix, uri, shouldExclude);
 
         m_prefixTable.addElement(decl);
+        
       }
     }
 
@@ -1047,7 +1048,8 @@
                                  shouldExclude);
           }
           
-          m_prefixTable.addElement(decl);
+          //m_prefixTable.addElement(decl);
+          addOrReplaceDecls(decl);
         }
       }
     }
@@ -1060,6 +1062,29 @@
   }
   
   /**
+   * Add or replace this namespace declaration in list
+   * of namespaces in scope for this element.
+   *
+   * @param newDecl namespace declaration to add to list
+   */
+  void addOrReplaceDecls(XMLNSDecl newDecl)
+  {
+      int n = m_prefixTable.size();
+
+        for (int i = n - 1; i >= 0; i--)
+        {
+          XMLNSDecl decl = (XMLNSDecl) m_prefixTable.elementAt(i);
+
+          if (decl.getPrefix().equals(newDecl.getPrefix()))
+          {
+            return;
+          }
+        }
+      m_prefixTable.addElement(newDecl);    
+    
+  }
+  
+  /**
    * Return whether we need to check namespace prefixes 
    * against and exclude result prefixes list.
    */