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]

Reply via email to