Author: dims
Date: Wed Jun 7 09:06:25 2006
New Revision: 412440
URL: http://svn.apache.org/viewvc?rev=412440&view=rev
Log:
Fix for AXIS2-461 - JAXB2 unmarshaling(XMLStramWriter) leads to
java.langUnsupportedOperationException
Added:
webservices/commons/trunk/modules/axiom/src/org/apache/axiom/om/impl/llom/util/NamespaceContextImpl.java
Modified:
webservices/commons/trunk/modules/axiom/src/org/apache/axiom/om/impl/llom/OMStAXWrapper.java
Modified:
webservices/commons/trunk/modules/axiom/src/org/apache/axiom/om/impl/llom/OMStAXWrapper.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/src/org/apache/axiom/om/impl/llom/OMStAXWrapper.java?rev=412440&r1=412439&r2=412440&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/src/org/apache/axiom/om/impl/llom/OMStAXWrapper.java
(original)
+++
webservices/commons/trunk/modules/axiom/src/org/apache/axiom/om/impl/llom/OMStAXWrapper.java
Wed Jun 7 09:06:25 2006
@@ -24,7 +24,9 @@
import org.apache.axiom.om.OMNode;
import org.apache.axiom.om.OMText;
import org.apache.axiom.om.OMXMLParserWrapper;
+import org.apache.axiom.om.OMContainer;
import org.apache.axiom.om.impl.EmptyOMLocation;
+import org.apache.axiom.om.impl.llom.util.NamespaceContextImpl;
import org.apache.axiom.om.impl.exception.OMStreamingException;
import javax.xml.namespace.NamespaceContext;
@@ -35,6 +37,12 @@
import javax.xml.stream.XMLStreamReader;
import java.util.Iterator;
import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Map;
+import java.util.LinkedHashMap;
+import java.util.HashMap;
/**
* Note - This class also implements the streaming constants interface
@@ -758,7 +766,7 @@
/**
* Method getNamespaceURI.
*
- * @param s
+ * @param prefix
* @return Returns String.
*/
public String getNamespaceURI(String prefix) {
@@ -829,9 +837,9 @@
if (eventType != XMLStreamConstants.START_ELEMENT && eventType !=
XMLStreamConstants.END_ELEMENT) {
throw new XMLStreamException("expected start or end tag",
getLocation());
}
- return eventType;
+ return eventType;
}
-
+
/**
* @return Returns String.
* @throws XMLStreamException
@@ -1001,7 +1009,7 @@
* @return Returns NamespaceContext.
*/
public NamespaceContext getNamespaceContext() {
- throw new UnsupportedOperationException();
+ return new NamespaceContextImpl(getAllNamespaces(lastNode));
}
/**
@@ -1251,4 +1259,33 @@
this.parser = parser;
}
+ private Map getAllNamespaces(Object contextNode) {
+ if (!(contextNode instanceof OMContainer &&
+ contextNode instanceof OMElement)) {
+ return new HashMap();
+ }
+ Map nsMap = new LinkedHashMap();
+ for (OMContainer context = (OMContainer) contextNode;
+ context != null && !(context instanceof OMDocument);
+ context = ((OMElement) context).getParent()) {
+ OMElement element = (OMElement) context;
+ Iterator i = element.getAllDeclaredNamespaces();
+ while (i != null && i.hasNext()) {
+ addNamespaceToMap((OMNamespace) i.next(), nsMap);
+ }
+ addNamespaceToMap(element.getNamespace(), nsMap);
+ for (Iterator iter = element.getAllAttributes();
+ iter != null && iter.hasNext();) {
+ OMAttribute attr = (OMAttribute) iter.next();
+ addNamespaceToMap(attr.getNamespace(), nsMap);
+ }
+ }
+ return nsMap;
+ }
+
+ private void addNamespaceToMap(OMNamespace ns, Map map) {
+ if(map.get(ns.getPrefix())==null) {
+ map.put(ns.getPrefix(), ns.getName());
+ }
+ }
}
Added:
webservices/commons/trunk/modules/axiom/src/org/apache/axiom/om/impl/llom/util/NamespaceContextImpl.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/src/org/apache/axiom/om/impl/llom/util/NamespaceContextImpl.java?rev=412440&view=auto
==============================================================================
---
webservices/commons/trunk/modules/axiom/src/org/apache/axiom/om/impl/llom/util/NamespaceContextImpl.java
(added)
+++
webservices/commons/trunk/modules/axiom/src/org/apache/axiom/om/impl/llom/util/NamespaceContextImpl.java
Wed Jun 7 09:06:25 2006
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.axiom.om.impl.llom.util;
+
+import javax.xml.XMLConstants;
+import javax.xml.namespace.NamespaceContext;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+public class NamespaceContextImpl
+ implements
+ NamespaceContext {
+ protected Map namespaces;
+
+ public NamespaceContextImpl(Map map) {
+ namespaces = map;
+ }
+
+ /**
+ * Get the URI given a prefix
+ *
+ * @param prefix
+ * @return uri string
+ */
+ public String getNamespaceURI(String prefix) {
+ if (prefix == null) {
+ throw new IllegalArgumentException("null prefix argument is
invalid");
+ } else 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 if (namespaces.containsKey(prefix)) {
+ return (String) namespaces.get(prefix);
+ }
+ return null;
+ }
+
+ /**
+ * Get the prefix for a uri
+ *
+ * @param nsURI
+ * @return prefix string
+ */
+ public String getPrefix(String nsURI) {
+ if (nsURI == null) {
+ throw new IllegalArgumentException("invalid null nsURI");
+ } else if (nsURI.length() == 0) {
+ throw new IllegalArgumentException("invalid empty nsURI");
+ } else if (nsURI.equals(XMLConstants.XML_NS_URI)) {
+ return XMLConstants.XML_NS_PREFIX;
+ } else if (nsURI.equals(XMLConstants.XMLNS_ATTRIBUTE_NS_URI)) {
+ return XMLConstants.XMLNS_ATTRIBUTE;
+ }
+ Iterator iter = namespaces.entrySet().iterator();
+ while (iter.hasNext()) {
+ Map.Entry entry = (Map.Entry) iter.next();
+ String uri = (String) entry.getValue();
+ if (uri.equals(nsURI)) {
+ return (String) entry.getKey();
+ }
+ }
+ if (nsURI.length() == 0) {
+ return "";
+ }
+ return null;
+ }
+
+ /**
+ * Get list of prefixes
+ *
+ * @param nsURI
+ * @return iterator (of strings)
+ */
+ public Iterator getPrefixes(String nsURI) {
+ if (nsURI == null) {
+ throw new IllegalArgumentException("invalid null nsURI");
+ } else if (nsURI.equals(XMLConstants.XML_NS_URI)) {
+ return
Collections.singleton(XMLConstants.XML_NS_PREFIX).iterator();
+ } else if (nsURI.equals(XMLConstants.XMLNS_ATTRIBUTE_NS_URI)) {
+ return Collections.singleton(XMLConstants.XMLNS_ATTRIBUTE)
+ .iterator();
+ }
+ Set prefixes = null;
+ Iterator iter = namespaces.entrySet().iterator();
+ while (iter.hasNext()) {
+ Map.Entry entry = (Map.Entry) iter.next();
+ String uri = (String) entry.getValue();
+ if (uri.equals(nsURI)) {
+ if (prefixes == null) {
+ prefixes = new HashSet();
+ }
+ prefixes.add(entry.getKey());
+ }
+ }
+ if (prefixes != null) {
+ return Collections.unmodifiableSet(prefixes).iterator();
+ } else if (nsURI.length() == 0) {
+ return Collections.singleton("").iterator();
+ } else {
+ return Collections.EMPTY_LIST.iterator();
+ }
+ }
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]