You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by ve...@apache.org on 2016/04/22 23:30:20 UTC
svn commit: r1740609 - in /webservices/axiom/trunk:
aspects/dom-aspects/src/main/java/org/apache/axiom/dom/
aspects/dom-aspects/src/main/java/org/apache/axiom/dom/impl/mixin/
implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/
impleme...
Author: veithen
Date: Fri Apr 22 21:30:20 2016
New Revision: 1740609
URL: http://svn.apache.org/viewvc?rev=1740609&view=rev
Log:
Replace ID attribute handling by a better implementation (except for the fact that it rejects namespace declarations as ID attributes).
Modified:
webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMTypedAttribute.java
webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/impl/mixin/DOMDocumentSupport.aj
webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/impl/mixin/DOMElementSupport.aj
webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/impl/mixin/DOMNamespaceDeclarationSupport.aj
webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/impl/mixin/DOMTypedAttributeSupport.aj
webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/AttrImpl.java
webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java
webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java
webservices/axiom/trunk/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/DOMImplementationTest.java
Modified: webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMTypedAttribute.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMTypedAttribute.java?rev=1740609&r1=1740608&r2=1740609&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMTypedAttribute.java (original)
+++ webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMTypedAttribute.java Fri Apr 22 21:30:20 2016
@@ -18,6 +18,8 @@
*/
package org.apache.axiom.dom;
-public interface DOMTypedAttribute extends DOMAttribute, DOMNamedNode{
+import org.apache.axiom.core.CoreTypedAttribute;
+
+public interface DOMTypedAttribute extends DOMAttribute, DOMNamedNode, CoreTypedAttribute {
}
Modified: webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/impl/mixin/DOMDocumentSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/impl/mixin/DOMDocumentSupport.aj?rev=1740609&r1=1740608&r2=1740609&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/impl/mixin/DOMDocumentSupport.aj (original)
+++ webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/impl/mixin/DOMDocumentSupport.aj Fri Apr 22 21:30:20 2016
@@ -20,17 +20,23 @@ package org.apache.axiom.dom.impl.mixin;
import static org.apache.axiom.dom.DOMExceptionUtil.newDOMException;
+import java.util.Iterator;
+
import javax.xml.XMLConstants;
+import org.apache.axiom.core.Axis;
+import org.apache.axiom.core.CoreAttribute;
import org.apache.axiom.core.CoreChildNode;
import org.apache.axiom.core.CoreElement;
import org.apache.axiom.core.CoreModelException;
+import org.apache.axiom.core.Mappers;
import org.apache.axiom.dom.DOMAttribute;
import org.apache.axiom.dom.DOMCDATASection;
import org.apache.axiom.dom.DOMComment;
import org.apache.axiom.dom.DOMConfigurationImpl;
import org.apache.axiom.dom.DOMDocument;
import org.apache.axiom.dom.DOMDocumentFragment;
+import org.apache.axiom.dom.DOMElement;
import org.apache.axiom.dom.DOMEntityReference;
import org.apache.axiom.dom.DOMExceptionUtil;
import org.apache.axiom.dom.DOMNSAwareAttribute;
@@ -385,4 +391,20 @@ public aspect DOMDocumentSupport {
throw newDOMException(DOMException.HIERARCHY_REQUEST_ERR);
}
}
+
+ public final Element DOMDocument.getElementById(String elementId) {
+ try {
+ for (Iterator<DOMElement> it = coreGetNodes(Axis.DESCENDANTS, DOMElement.class, Mappers.<DOMElement>identity(), DOMSemantics.INSTANCE); it.hasNext(); ) {
+ DOMElement element = it.next();
+ for (CoreAttribute attr = element.coreGetFirstAttribute(); attr != null; attr = attr.coreGetNextAttribute()) {
+ if (((DOMAttribute)attr).isId() && elementId.equals(attr.coreGetCharacterData().toString())) {
+ return element;
+ }
+ }
+ }
+ return null;
+ } catch (CoreModelException ex) {
+ throw DOMExceptionUtil.toUncheckedException(ex);
+ }
+ }
}
Modified: webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/impl/mixin/DOMElementSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/impl/mixin/DOMElementSupport.aj?rev=1740609&r1=1740608&r2=1740609&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/impl/mixin/DOMElementSupport.aj (original)
+++ webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/impl/mixin/DOMElementSupport.aj Fri Apr 22 21:30:20 2016
@@ -21,10 +21,12 @@ package org.apache.axiom.dom.impl.mixin;
import javax.xml.XMLConstants;
import org.apache.axiom.core.AttributeMatcher;
+import org.apache.axiom.core.CoreAttribute;
import org.apache.axiom.core.CoreElement;
import org.apache.axiom.core.CoreModelException;
import org.apache.axiom.core.CoreNSAwareAttribute;
import org.apache.axiom.core.CoreNamespaceDeclaration;
+import org.apache.axiom.core.CoreTypedAttribute;
import org.apache.axiom.core.ElementAction;
import org.apache.axiom.dom.AttributesNamedNodeMap;
import org.apache.axiom.dom.DOMAttribute;
@@ -229,4 +231,31 @@ public aspect DOMElementSupport {
public final NodeList DOMElement.getElementsByTagNameNS(String namespaceURI, String localName) {
return new ElementsByTagNameNS(this, namespaceURI, localName);
}
+
+ public final void DOMElement.setIdAttribute(String name, boolean isId) throws DOMException {
+ CoreAttribute attr = coreGetAttribute(DOMSemantics.DOM1_ATTRIBUTE_MATCHER, null, name);
+ if (attr == null) {
+ throw DOMExceptionUtil.newDOMException(DOMException.NOT_FOUND_ERR);
+ } else {
+ ((CoreTypedAttribute)attr).coreSetType(isId ? "ID" : "CDATA");
+ }
+ }
+
+ public final void DOMElement.setIdAttributeNS(String namespaceURI, String localName, boolean isId) throws DOMException {
+ // Here, we assume that a namespace declaration can never be an ID attribute
+ CoreAttribute attr = coreGetAttribute(DOMSemantics.DOM2_ATTRIBUTE_MATCHER, NSUtil.normalizeNamespaceURI(namespaceURI), localName);
+ if (attr == null) {
+ throw DOMExceptionUtil.newDOMException(DOMException.NOT_FOUND_ERR);
+ } else {
+ ((CoreTypedAttribute)attr).coreSetType(isId ? "ID" : "CDATA");
+ }
+ }
+
+ public final void DOMElement.setIdAttributeNode(Attr idAttr, boolean isId) throws DOMException {
+ if (idAttr.getOwnerElement() != this) {
+ throw DOMExceptionUtil.newDOMException(DOMException.NOT_FOUND_ERR);
+ } else {
+ ((CoreTypedAttribute)idAttr).coreSetType(isId ? "ID" : "CDATA");
+ }
+ }
}
Modified: webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/impl/mixin/DOMNamespaceDeclarationSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/impl/mixin/DOMNamespaceDeclarationSupport.aj?rev=1740609&r1=1740608&r2=1740609&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/impl/mixin/DOMNamespaceDeclarationSupport.aj (original)
+++ webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/impl/mixin/DOMNamespaceDeclarationSupport.aj Fri Apr 22 21:30:20 2016
@@ -52,4 +52,8 @@ public aspect DOMNamespaceDeclarationSup
return XMLConstants.XMLNS_ATTRIBUTE + ":" + declaredPrefix;
}
}
+
+ public final boolean DOMNamespaceDeclaration.isId() {
+ return false;
+ }
}
Modified: webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/impl/mixin/DOMTypedAttributeSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/impl/mixin/DOMTypedAttributeSupport.aj?rev=1740609&r1=1740608&r2=1740609&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/impl/mixin/DOMTypedAttributeSupport.aj (original)
+++ webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/impl/mixin/DOMTypedAttributeSupport.aj Fri Apr 22 21:30:20 2016
@@ -24,4 +24,8 @@ public aspect DOMTypedAttributeSupport {
public final String DOMTypedAttribute.getName() {
return internalGetName();
}
+
+ public final boolean DOMTypedAttribute.isId() {
+ return "ID".equals(coreGetType());
+ }
}
Modified: webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/AttrImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/AttrImpl.java?rev=1740609&r1=1740608&r2=1740609&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/AttrImpl.java (original)
+++ webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/AttrImpl.java Fri Apr 22 21:30:20 2016
@@ -23,10 +23,5 @@ import org.apache.axiom.dom.DOMAttribute
/** Implementation of <code>org.w3c.dom.Attr</code> and <code>org.apache.axiom.om.OMAttribute</code> */
public abstract class AttrImpl extends ParentNode implements DOMAttribute {
- /** Flag used to mark an attribute as per the DOM Level 3 specification */
- protected boolean isId;
- public boolean isId() {
- return isId;
- }
}
Modified: webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java?rev=1740609&r1=1740608&r2=1740609&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java (original)
+++ webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java Fri Apr 22 21:30:20 2016
@@ -21,9 +21,7 @@ package org.apache.axiom.om.impl.dom;
import static org.apache.axiom.dom.DOMExceptionUtil.newDOMException;
-import java.util.Enumeration;
import java.util.Hashtable;
-import java.util.Vector;
import org.apache.axiom.dom.DOMDocument;
import org.apache.axiom.om.impl.intf.AxiomDocument;
@@ -35,29 +33,8 @@ import org.w3c.dom.Node;
import org.w3c.dom.ProcessingInstruction;
public class DocumentImpl extends ParentNode implements DOMDocument, AxiomDocument {
- private Vector idAttrs;
-
protected Hashtable identifiers;
- public Element getElementById(String elementId) {
-
- //If there are no id attrs
- if (this.idAttrs == null) {
- return null;
- }
-
- Enumeration attrEnum = this.idAttrs.elements();
- while (attrEnum.hasMoreElements()) {
- Attr tempAttr = (Attr) attrEnum.nextElement();
- if (tempAttr.getValue().equals(elementId)) {
- return tempAttr.getOwnerElement();
- }
- }
-
- //If we reach this point then, there's no such attr
- return null;
- }
-
public Node importNode(Node importedNode, boolean deep) throws DOMException {
short type = importedNode.getNodeType();
@@ -147,20 +124,6 @@ public class DocumentImpl extends Parent
}
- protected void addIdAttr(Attr attr) {
- if (this.idAttrs == null) {
- this.idAttrs = new Vector();
- }
- this.idAttrs.add(attr);
- }
-
- protected void removeIdAttr(Attr attr) {
- if (this.idAttrs != null) {
- this.idAttrs.remove(attr);
- }
-
- }
-
/*
* DOM-Level 3 methods
*/
Modified: webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java?rev=1740609&r1=1740608&r2=1740609&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java (original)
+++ webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java Fri Apr 22 21:30:20 2016
@@ -19,61 +19,8 @@
package org.apache.axiom.om.impl.dom;
-import static org.apache.axiom.dom.DOMExceptionUtil.newDOMException;
-
-import org.apache.axiom.dom.DOMAttribute;
import org.apache.axiom.dom.DOMElement;
-import org.w3c.dom.Attr;
-import org.w3c.dom.DOMException;
public abstract class ElementImpl extends ParentNode implements DOMElement {
- /*
- * DOM-Level 3 methods
- */
-
- public final void setIdAttribute(String name, boolean isId) throws DOMException {
- //find the attr
- AttrImpl tempAttr = (AttrImpl) this.getAttributeNode(name);
- if (tempAttr == null) {
- throw newDOMException(DOMException.NOT_FOUND_ERR);
- }
-
- this.updateIsId(isId, tempAttr);
- }
-
- public final void setIdAttributeNS(String namespaceURI, String localName, boolean isId)
- throws DOMException {
- //find the attr
- AttrImpl tempAttr = (AttrImpl) this.getAttributeNodeNS(namespaceURI, localName);
- if (tempAttr == null) {
- throw newDOMException(DOMException.NOT_FOUND_ERR);
- }
-
- this.updateIsId(isId, tempAttr);
- }
-
- public final void setIdAttributeNode(Attr idAttr, boolean isId) throws DOMException {
- //find the attr
- if (((DOMAttribute)idAttr).coreGetOwnerElement() != this) {
- throw newDOMException(DOMException.NOT_FOUND_ERR);
- }
- this.updateIsId(isId, (AttrImpl)idAttr);
- }
- /**
- * Updates the id state of the attr and notifies the document
- *
- * @param isId
- * @param tempAttr
- */
- private void updateIsId(boolean isId, AttrImpl tempAttr) {
- if (tempAttr.isId != isId) {
- tempAttr.isId = isId;
- if (isId) {
- ownerDocument().addIdAttr(tempAttr);
- } else {
- ownerDocument().removeIdAttr(tempAttr);
- }
- }
- }
}
Modified: webservices/axiom/trunk/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/DOMImplementationTest.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/DOMImplementationTest.java?rev=1740609&r1=1740608&r2=1740609&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/DOMImplementationTest.java (original)
+++ webservices/axiom/trunk/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/DOMImplementationTest.java Fri Apr 22 21:30:20 2016
@@ -74,7 +74,6 @@ public class DOMImplementationTest exten
builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level2/core/domimplementationcreatedocumenttype01)");
builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level2/core/domimplementationcreatedocumenttype02)");
builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level2/core/domimplementationcreatedocumenttype04)");
- builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level2/core/getElementById01)");
builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level2/core/getElementsByTagNameNS01)");
builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level2/core/getElementsByTagNameNS08)");
builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level2/core/hc_nodedocumentfragmentnormalize1)");
@@ -94,8 +93,6 @@ public class DOMImplementationTest exten
builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level2/core/prefix06)");
builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level2/core/prefix07)");
builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level2/core/removeAttributeNS02)");
- builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/attrisid04)");
- builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/attrisid05)");
builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/canonicalform06)");
builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/checkcharacternormalization01)");
builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/documentadoptnode07)");
@@ -171,9 +168,18 @@ public class DOMImplementationTest exten
builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/domstringlistitem01)");
builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/domstringlistitem02)");
builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/elementcontentwhitespace01)");
+ builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/elementsetidattributenode01)");
+ builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/elementsetidattributenode04)");
+ builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/elementsetidattributenode08)");
builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/elementsetidattributenode09)");
+ builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/elementsetidattributens01)");
+ builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/elementsetidattributens03)");
builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/elementsetidattributens05)");
builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/elementsetidattributens09)");
+ builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/elementsetidattributens10)");
+ builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/elementsetidattributens11)");
+ builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/elementsetidattributens13)");
+ builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/elementsetidattributens14)");
builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/entities03)");
builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/handleerror01)");
builder.exclude(W3CTestCase.class, "(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/handleerror02)");