Author: veithen Date: Sat Mar 14 11:07:59 2009 New Revision: 753636 URL: http://svn.apache.org/viewvc?rev=753636&view=rev Log: * Moved NamespaceContextImpl from axiom-impl to axiom-api. * Merged changes in r412440 (implementation of getNamespacePrefix) from OMStAXWrapper to DOMStAXWrapper. * Added a unit test for getNamespacePrefix.
Added: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/util/NamespaceContextImpl.java - copied, changed from r753622, webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/util/NamespaceContextImpl.java Removed: webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/util/NamespaceContextImpl.java Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/om/impl/OMStAXWrapperTestBase.java webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DOMStAXWrapper.java webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java Copied: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/util/NamespaceContextImpl.java (from r753622, webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/util/NamespaceContextImpl.java) URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/util/NamespaceContextImpl.java?p2=webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/util/NamespaceContextImpl.java&p1=webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/util/NamespaceContextImpl.java&r1=753622&r2=753636&rev=753636&view=diff ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/util/NamespaceContextImpl.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/util/NamespaceContextImpl.java Sat Mar 14 11:07:59 2009 @@ -17,7 +17,7 @@ * under the License. */ -package org.apache.axiom.om.impl.llom.util; +package org.apache.axiom.om.impl.util; import javax.xml.XMLConstants; import javax.xml.namespace.NamespaceContext; Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/om/impl/OMStAXWrapperTestBase.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/om/impl/OMStAXWrapperTestBase.java?rev=753636&r1=753635&r2=753636&view=diff ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/om/impl/OMStAXWrapperTestBase.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/om/impl/OMStAXWrapperTestBase.java Sat Mar 14 11:07:59 2009 @@ -22,6 +22,7 @@ import java.io.InputStream; import java.util.Arrays; +import javax.xml.namespace.NamespaceContext; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamReader; @@ -176,4 +177,18 @@ assertEquals(XMLStreamReader.START_ELEMENT, stream.getEventType()); assertEquals("c", stream.getLocalName()); } + + public void testGetNamespaceContext() throws Exception { + OMElement element = AXIOMUtil.stringToOM(omMetaFactory.getOMFactory(), + "<a xmlns='urn:ns1' xmlns:ns2='urn:ns2'><b xmlns:ns3='urn:ns3'/></a>"); + XMLStreamReader stream = element.getXMLStreamReader(); + stream.next(); + assertEquals(XMLStreamReader.START_ELEMENT, stream.next()); + assertEquals("b", stream.getLocalName()); + NamespaceContext context = stream.getNamespaceContext(); + assertEquals("urn:ns1", context.getNamespaceURI("")); + assertEquals("urn:ns2", context.getNamespaceURI("ns2")); + assertEquals("urn:ns3", context.getNamespaceURI("ns3")); + assertEquals("ns2", context.getPrefix("urn:ns2")); + } } Modified: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DOMStAXWrapper.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DOMStAXWrapper.java?rev=753636&r1=753635&r2=753636&view=diff ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DOMStAXWrapper.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DOMStAXWrapper.java Sat Mar 14 11:07:59 2009 @@ -23,6 +23,7 @@ import org.apache.axiom.om.OMAttribute; import org.apache.axiom.om.OMComment; import org.apache.axiom.om.OMConstants; +import org.apache.axiom.om.OMContainer; import org.apache.axiom.om.OMDocument; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMException; @@ -35,6 +36,7 @@ import org.apache.axiom.om.impl.OMNavigator; import org.apache.axiom.om.impl.builder.StAXBuilder; import org.apache.axiom.om.impl.exception.OMStreamingException; +import org.apache.axiom.om.impl.util.NamespaceContextImpl; import org.w3c.dom.Attr; import javax.activation.DataHandler; @@ -44,7 +46,11 @@ import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; + +import java.util.HashMap; import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; import java.util.Stack; /** @@ -1022,7 +1028,7 @@ * @return Returns NamespaceContext. */ public NamespaceContext getNamespaceContext() { - throw new UnsupportedOperationException(); + return new NamespaceContextImpl(getAllNamespaces(lastNode)); } /** @@ -1274,6 +1280,40 @@ this.parser = parser; } + private Map getAllNamespaces(OMNode 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); + } + if (element.getNamespace() != null) { + addNamespaceToMap(element.getNamespace(), nsMap); + } + for (Iterator iter = element.getAllAttributes(); + iter != null && iter.hasNext();) { + OMAttribute attr = (OMAttribute) iter.next(); + if (attr.getNamespace() != null) { + addNamespaceToMap(attr.getNamespace(), nsMap); + } + } + } + return nsMap; + } + + private void addNamespaceToMap(OMNamespace ns, Map map) { + if (map.get(ns.getPrefix()) == null) { + map.put(ns.getPrefix(), ns.getNamespaceURI()); + } + } + public DataHandler getDataHandler(String blobcid) { DataHandler dh = null; if (builder != null && Modified: webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java?rev=753636&r1=753635&r2=753636&view=diff ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java Sat Mar 14 11:07:59 2009 @@ -50,7 +50,7 @@ import org.apache.axiom.om.impl.OMNavigator; import org.apache.axiom.om.impl.builder.StAXBuilder; import org.apache.axiom.om.impl.exception.OMStreamingException; -import org.apache.axiom.om.impl.llom.util.NamespaceContextImpl; +import org.apache.axiom.om.impl.util.NamespaceContextImpl; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory;