Subjects
Home
VOTE Move XML Commons to Xerces
Commented: (XERCESJ 589) Bug with pattern restriction on long strings
: Xerces J 2 8 1 Release on Wednesday, September 13th
: Xerces J 2 9 0 Release on Wednesday, November 22nd
Commented: (XERCESJ 1066) Restriction+choice+substitutionGroup error
Commented: (XERCESJ 1178) Error getting prefix for an attribute with no n
Updated: (XERCESJ 1244) XMLSchemaValidator does not contribute element 's
Some consideration about the xerces DOM implementation
Updated: (XERCESJ 1066) Restriction+choice+substitutionGroup error
Commented: (XERCESJ 1227) Poor performance / OutOfMemoryError for sequenc
retain exception stack traces
Updated: (XERCESJ 1193) NPE or hang when parsing using the "continue afte
Future of NekoHTML
Commented: (XERCESJ 1203) NPE in XMLDTDProcessor
DOM Level 3 APIs for Xalan J and a new Xalan release (2 7 1)
: xml commons external 1 3 04 Release on Wednesday, November 22nd
Commented: (XERCESJ 1247) Incorrect location information on SAX when usin
XInclude exceptions how to mirror Xerces J functionality into Xerces C++?
First proposal on SoC project "Add support for the StAX (JSR 173) cursor API
: xml commons resolver 1 2 Release on Wednesday, November 22nd
Typo in RangeToken java Please check
Validator features
java lang ClassCastException when adopting Node
using the org apache xerces impl xs identity package
Updated: (XERCESJ 1257) buffer overflow in UTF8Reader for characters out
Problem with ref attributes and schema validation
Updated: (XERCESJ 122) XMLSchemaValidator does not contribute element 's d
Performance problem under load Xerces with Weblogic 9 x
remove ignored memory allocation
Commented: (XERCESJ 1177) SAXXMLStreamReader doesn 't always report namesp
Commented: (XERCESJ 977) Null pointer exception during DOM parsing
Commented: (XERCESJ 1197) Code cleanup for org apache xml serialize
Commented: (XERCESJ 1201) Initial contribution for StAX Event API
Updated: (XERCESJ 1061) Regex "$ " and "^ " characters treated as special c
Commented: (XERCESJ 1199) SAXXMLStreamReader should attempt to register a
Commented: (XERCESJ 1061) Regex "$ " and "^ " characters treated as special
Updated: (XERCESJ 589) Bug with pattern restriction on long strings
StackOverflow
xerces Range unnecessarily not garbage collectable if not detached
Updated: (XERCESJ 1178) Error getting prefix for an attribute with no nam
Bug in xs:redefine
Commented: (XERCESJ 1204) Can not set XMLEntityResolver for LSParser
Updated: (XERCESJ 1253) Prototype for SoC2007 project "Add support for th
Updated: (XERCESJ 1259) Add SteamFilter Function to SoC2007 project "Add
Assigned: (XERCESJ 444) SAXException thrown by EntityResolver is reported
Google Summer of Code 2007
Xerces J and XInclude relative path issue
Assigned: (XERCESJ 206) Stack overflow when using a schema validation
Commented: (XERCESJ 1215) Restrictions involving two levels of substituti
Closed: (XERCESJ 1203) NPE in XMLDTDProcessor
non overriding equals methoda
Resolved: (XERCESJ 1079) invalid value returned for TOTALDIGITS facet in
Xerces AS3 port
Updated: (XERCESJ 325) Regular Expression; Pattern "| " clause order de
Updated: (XERCESJ 1196) Javadoc generation fails on Java SE 5 0
Closed: (XERCESJ 1202) DTD validation on XIncluded documents when the sch
Created: (XERCESJ 1124) Nonspecific schema error message
a bug in xerces
Updated: (XERCESJ 1201) Initial contribution for StAX Event API
Closed: (XERCESJ 1254) Empty uris in targetNamespace attribute not report
Links
Home
Oracle database error code
 
Search:  
Power your search with and, or, +, -, or "some phrase" operators.
Commented: (XERCESJ-1022) cloneNode forgets IDness of attribute

Commented: (XERCESJ-1022) cloneNode forgets IDness of attribute

2007-01-28       - By Jacob Kjome (JIRA)
Reply:     1     2  


   [ https://issues.apache.org/jira/browse/XERCESJ-1022?page=com.atlassian
.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12468098 ]

Jacob Kjome commented on XERCESJ-1022:
--------------------------------------

I have a similar problem with importNode()/adoptNode().  I'm not sure about
what approach to take on cloneNode(), since cloning an element with an Id will
surely create an invalid document; a document with two  (or more if deep=true
and children have Ids themselves) Ids of the same value.  However, importNode()
/adopNode(), while they could happen run into the same issue, make more sense
because Ids won't necessarily collide where they would necessarily with
cloneNode() within the same document.  Here's a patch transferring Id'ness from
the node (and children) of the source document to the destination document.  I
think I got the copyAdoptedIdentifiers() method below correct, but it should be
scrutinized.  Please consider adding this patch even if this functionality is
rejected for cloneNode()...

Jake


Index: src/org/apache/xerces/dom/CoreDocumentImpl.java
===================================================================
--- src/org/apache/xerces/dom/CoreDocumentImpl.java   (revision 500745)
+++ src/org/apache/xerces/dom/CoreDocumentImpl.java   (working copy)
@@ -1490,7 +1490,23 @@
     */
    public Node importNode(Node source, boolean deep)
    throws DOMException {
-        return importNode(source, deep, false, null);
+       Hashtable reversedImportedIdentifiers = null;
+      
+       try {
+         Hashtable importedIdentifiers = ((CoreDocumentImpl) source
.getOwnerDocument()).identifiers;      
+          if (importedIdentifiers != null) {
+              // Build a reverse mapping from element to identifier.
+              reversedImportedIdentifiers = new Hashtable();
+              for (Enumeration elementIds = importedIdentifiers.keys();
elementIds.hasMoreElements();) {
+                  Object elementId = elementIds.nextElement();
+                  reversedImportedIdentifiers.put(importedIdentifiers.get
(elementId), elementId);
+              }
+          }
+       } catch (ClassCastException e) {
+         // source node comes from a different DOMImplementation
+       }
+
+        return importNode(source, deep, false, reversedImportedIdentifiers);
    } // importNode(Node,boolean):Node

    /**
@@ -1857,6 +1873,26 @@
            }
            case ELEMENT_NODE: {
        userData = node.getUserDataRecord();
+
+         try {
+             Hashtable adoptedIdentifiers = ((CoreDocumentImpl) node
.getOwnerDocument()).identifiers;      
+              if (adoptedIdentifiers != null) {
+                  // Build a reverse mapping from element to identifier.
+                  Hashtable reversedAdoptedIdentifiers = new Hashtable();
+                  for (Enumeration elementIds = adoptedIdentifiers.keys();
elementIds.hasMoreElements();) {
+                      Object elementId = elementIds.nextElement();
+                      reversedAdoptedIdentifiers.put(adoptedIdentifiers.get
(elementId), elementId);
+                  }
+                  if (reversedAdoptedIdentifiers.size() > 0) {
+                   if (identifiers == null) identifiers = new Hashtable();
+                   // Register adopted element identifiers.
+                   copyAdoptedIdentifiers(node, reversedAdoptedIdentifiers);
+                    }
+              }
+         } catch (ClassCastException e) {
+           // source node comes from a different DOMImplementation
+         }
+
                // remove node from wherever it is
                Node parent = node.getParentNode();
                if (parent != null) {
@@ -1892,6 +1928,18 @@
        return node;
    }

+    private void copyAdoptedIdentifiers(Node node, Hashtable
reversedAdoptedIdentifiers) {
+       if (node.getNodeType() != Node.ELEMENT_NODE) return;
+     // Does element have an associated identifier?
+     Object elementId = reversedAdoptedIdentifiers.get(node);
+        if (elementId != null) {                        
+            identifiers.put(elementId, node);
+        }
+        for (Node kid = node.getFirstChild(); kid != null; kid = kid
.getNextSibling()) {        
+         copyAdoptedIdentifiers(kid, reversedAdoptedIdentifiers);
+        }
+    }
+
    /**
     * Traverses the DOM Tree and expands deferred nodes and their
     * children.


> cloneNode forgets IDness of attribute
> -------------------------------------
>
>                 Key: XERCESJ-1022
>                 URL: https://issues.apache.org/jira/browse/XERCESJ-1022
>             Project: Xerces2-J
>          Issue Type: Bug
>          Components: DOM (Level 3 Core)
>    Affects Versions: 2.6.2
>         Environment: java version "1.4.2_05"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_05-141.3)
> Java HotSpot(TM) Client VM (build 1.4.2-38, mixed mode)
>            Reporter: elharo
>         Attachments: IDTest.java
>
>
> Cloning a node that contains an ID type attribute forgets that the attribute
is an ID. Interestingly importing the element into a new document, even one
without a DocType, does not forget that the Attr has ID type.
> The attached program generates the following output:
> Xerces-J 2.6.2
> Found element with ID
> Did not find element with ID

--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@(protected)
For additional commands, e-mail: j-dev-help@(protected)