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/03/03 23:51:30 UTC
svn commit: r1733534 -
/webservices/axiom/branches/stax-stream/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/stax/StAXPivot.java
Author: veithen
Date: Thu Mar 3 22:51:30 2016
New Revision: 1733534
URL: http://svn.apache.org/viewvc?rev=1733534&view=rev
Log:
Correctly support predefined namespace bindings in the XMLStreamReader implementation.
Modified:
webservices/axiom/branches/stax-stream/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/stax/StAXPivot.java
Modified: webservices/axiom/branches/stax-stream/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/stax/StAXPivot.java
URL: http://svn.apache.org/viewvc/webservices/axiom/branches/stax-stream/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/stax/StAXPivot.java?rev=1733534&r1=1733533&r2=1733534&view=diff
==============================================================================
--- webservices/axiom/branches/stax-stream/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/stax/StAXPivot.java (original)
+++ webservices/axiom/branches/stax-stream/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/stax/StAXPivot.java Thu Mar 3 22:51:30 2016
@@ -18,6 +18,7 @@
*/
package org.apache.axiom.core.stream.stax;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@@ -48,64 +49,78 @@ public final class StAXPivot implements
@Override
public String getPrefix(String namespaceURI) {
- // TODO
- int bindings = getNamespaceBindingsCount();
- outer: for (int i=(bindings-1)*2; i>=0; i-=2) {
- if (namespaceURI.equals(namespaceStack[i+1])) {
- String prefix = namespaceStack[i];
- // Now check that the prefix is not masked
- for (int j=i+2; j<bindings*2; j+=2) {
- if (prefix.equals(namespaceStack[j])) {
- continue outer;
+ if (namespaceURI == null) {
+ throw new IllegalArgumentException();
+ } else if (namespaceURI.equals(XMLConstants.XML_NS_URI)) {
+ return XMLConstants.XML_NS_PREFIX;
+ } else if (namespaceURI.equals(XMLConstants.XMLNS_ATTRIBUTE_NS_URI)) {
+ return XMLConstants.XMLNS_ATTRIBUTE;
+ } else {
+ int bindings = getNamespaceBindingsCount();
+ outer: for (int i=(bindings-1)*2; i>=0; i-=2) {
+ if (namespaceURI.equals(namespaceStack[i+1])) {
+ String prefix = namespaceStack[i];
+ // Now check that the prefix is not masked
+ for (int j=i+2; j<bindings*2; j+=2) {
+ if (prefix.equals(namespaceStack[j])) {
+ continue outer;
+ }
}
+ return prefix;
}
- return prefix;
}
+ return null;
}
- return null;
}
@Override
- public Iterator getPrefixes(final String namespaceURI) {
- // TODO
- final int bindings = getNamespaceBindingsCount();
- return new Iterator<String>() {
- private int binding = bindings;
- private String next;
-
- public boolean hasNext() {
- if (next == null) {
- outer: while (--binding >= 0) {
- if (namespaceURI.equals(namespaceStack[binding*2+1])) {
- String prefix = namespaceStack[binding*2];
- // Now check that the prefix is not masked
- for (int j=binding+1; j<bindings; j++) {
- if (prefix.equals(namespaceStack[j*2])) {
- continue outer;
+ public Iterator<String> getPrefixes(final String namespaceURI) {
+ if (namespaceURI == null) {
+ throw new IllegalArgumentException("namespaceURI can't be null");
+ } else if (namespaceURI.equals(XMLConstants.XML_NS_URI)) {
+ return Collections.singleton(XMLConstants.XML_NS_PREFIX).iterator();
+ } else if (namespaceURI.equals(XMLConstants.XMLNS_ATTRIBUTE_NS_URI)) {
+ return Collections.singleton(XMLConstants.XMLNS_ATTRIBUTE).iterator();
+ } else {
+ final int bindings = getNamespaceBindingsCount();
+ return new Iterator<String>() {
+ private int binding = bindings;
+ private String next;
+
+ public boolean hasNext() {
+ if (next == null) {
+ outer: while (--binding >= 0) {
+ if (namespaceURI.equals(namespaceStack[binding*2+1])) {
+ String prefix = namespaceStack[binding*2];
+ // Now check that the prefix is not masked
+ for (int j=binding+1; j<bindings; j++) {
+ if (prefix.equals(namespaceStack[j*2])) {
+ continue outer;
+ }
}
+ next = prefix;
+ break;
}
- next = prefix;
- break;
}
}
+ return next != null;
}
- return next != null;
- }
- public String next() {
- if (hasNext()) {
- String result = next;
- next = null;
- return result;
- } else {
- throw new NoSuchElementException();
+ public String next() {
+ if (hasNext()) {
+ String result = next;
+ next = null;
+ return result;
+ } else {
+ throw new NoSuchElementException();
+ }
}
- }
- public void remove() {
- throw new UnsupportedOperationException();
- }
- };
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+ };
+ }
}
}
@@ -471,12 +486,18 @@ public final class StAXPivot implements
}
String lookupNamespaceURI(String prefix) {
- for (int i=(getNamespaceBindingsCount()-1)*2; i>=0; i-=2) {
- if (prefix.equals(namespaceStack[i])) {
- return namespaceStack[i+1];
+ if (prefix.equals(XMLConstants.XML_NS_PREFIX)) {
+ return XMLConstants.XML_NS_URI;
+ } else if (prefix.equals(XMLConstants.XMLNS_ATTRIBUTE)) {
+ return XMLConstants.XMLNS_ATTRIBUTE_NS_URI;
+ } else {
+ for (int i=(getNamespaceBindingsCount()-1)*2; i>=0; i-=2) {
+ if (prefix.equals(namespaceStack[i])) {
+ return namespaceStack[i+1];
+ }
}
+ return prefix.isEmpty() ? "" : null;
}
- return prefix.isEmpty() ? "" : null;
}
@Override