You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by di...@apache.org on 2005/07/10 18:17:53 UTC
svn commit: r210023 -
/webservices/axis/trunk/java/modules/xml/src/org/apache/axis2/om/xpath/DocumentNavigator.java
Author: dims
Date: Sun Jul 10 09:17:52 2005
New Revision: 210023
URL: http://svn.apache.org/viewcvs?rev=210023&view=rev
Log:
Initial impl of getNamespaceAxisIterator
Modified:
webservices/axis/trunk/java/modules/xml/src/org/apache/axis2/om/xpath/DocumentNavigator.java
Modified: webservices/axis/trunk/java/modules/xml/src/org/apache/axis2/om/xpath/DocumentNavigator.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/xml/src/org/apache/axis2/om/xpath/DocumentNavigator.java?rev=210023&r1=210022&r2=210023&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/xml/src/org/apache/axis2/om/xpath/DocumentNavigator.java (original)
+++ webservices/axis/trunk/java/modules/xml/src/org/apache/axis2/om/xpath/DocumentNavigator.java Sun Jul 10 09:17:52 2005
@@ -7,6 +7,7 @@
import org.apache.axis2.om.OMText;
import org.apache.axis2.om.OMContainer;
import org.apache.axis2.om.impl.llom.OMDocument;
+import org.apache.axis2.om.impl.llom.OMNamespaceImpl;
import org.apache.axis2.om.impl.llom.builder.StAXOMBuilder;
import org.jaxen.BaseXPath;
import org.jaxen.DefaultNavigator;
@@ -21,6 +22,11 @@
import javax.xml.stream.XMLStreamReader;
import java.net.URL;
import java.util.Iterator;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Arrays;
+import java.util.Collection;
import java.io.FileInputStream;
public class DocumentNavigator extends DefaultNavigator {
@@ -328,8 +334,36 @@
* not supported by this object model
*/
public Iterator getNamespaceAxisIterator(Object contextNode) throws UnsupportedAxisException {
- //TODO: Fix this better?
- return super.getNamespaceAxisIterator(contextNode);
+ if (! (contextNode instanceof OMContainer && contextNode instanceof OMElement)) {
+ return JaxenConstants.EMPTY_ITERATOR;
+ }
+ List nsList = new ArrayList();
+ HashSet prefixes = new HashSet();
+ for (OMContainer context = (OMContainer) contextNode; context != null && !(context instanceof OMDocument); context = ((OMElement) context).getParent()) {
+ OMElement element = (OMElement) context;
+ ArrayList declaredNS = new ArrayList();
+ Iterator i = element.getAllDeclaredNamespaces();
+ while (i != null && i.hasNext()) {
+ declaredNS.add(i.next());
+ }
+ declaredNS.add(element.getNamespace());
+ for (Iterator iter = element.getAttributes(); iter != null && iter.hasNext();) {
+ OMAttribute attr = (OMAttribute) iter.next();
+ declaredNS.add(attr.getNamespace());
+ }
+ for (Iterator iter = declaredNS.iterator(); iter != null && iter.hasNext();) {
+ OMNamespace namespace = (OMNamespace) iter.next();
+ if(namespace != null) {
+ String prefix = namespace.getPrefix();
+ if (prefix != null && ! prefixes.contains(prefix)) {
+ prefixes.add(prefix);
+ nsList.add(namespace);
+ }
+ }
+ }
+ }
+ nsList.add(new OMNamespaceImpl("http://www.w3.org/XML/1998/namespace", "xml"));
+ return nsList.iterator();
}
/**
@@ -590,7 +624,8 @@
public Object getParentNode(Object contextNode) throws UnsupportedAxisException {
if (contextNode == null ||
contextNode instanceof OMDocument ||
- contextNode instanceof OMAttribute)
+ contextNode instanceof OMAttribute ||
+ contextNode instanceof OMNamespace)
return null;
return getDocumentNode(((OMNode) contextNode).getParent());
}