/******************************************************************************* * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * bdoughan - June 25/2009 - 2.0 - Initial implementation ******************************************************************************/ package org.eclipse.persistence.internal.oxm.record.namespaces; import java.util.HashSet; import java.util.Set; import javax.xml.stream.XMLStreamReader; import org.eclipse.persistence.internal.oxm.Constants; /** * An UnmarshalNamespaceResolver that delegates all work to a NamespaceContext. * This is useful when using XML input from sources such as StAX. */ public class UnmarshalNamespaceContext implements UnmarshalNamespaceResolver { private XMLStreamReader xmlStreamReader; private Set<String> prefixes; public UnmarshalNamespaceContext() { this.prefixes = new HashSet(4); } public UnmarshalNamespaceContext(XMLStreamReader anXMLStreamReader) { this.xmlStreamReader = anXMLStreamReader; this.prefixes = new HashSet(4); } public String getNamespaceURI(String prefix) { if(null == prefix) { prefix = Constants.EMPTY_STRING; } try { String namespaceURI = xmlStreamReader.getNamespaceURI(prefix); if(null == namespaceURI) { return xmlStreamReader.getAttributeValue(javax.xml.XMLConstants.XMLNS_ATTRIBUTE_NS_URI, prefix); } return namespaceURI; } catch(IllegalStateException e) { return null; } } public String getPrefix(String namespaceURI) { return xmlStreamReader.getNamespaceContext().getPrefix(namespaceURI); } /** * The underlying NamespaceContext is responsible for maintaining the * appropriate prefix/URI associations. */ public void push(String prefix, String namespaceURI) { prefixes.add(prefix); } /** * The underlying NamespaceContext is responsible for maintaining the * appropriate prefix/URI associations. */ public void pop(String prefix) { if(null!= getNamespaceURI(prefix)) { prefixes.remove(prefix); } } public Set<String> getPrefixes() { return prefixes; } public XMLStreamReader getXmlStreamReader() { return xmlStreamReader; } public void setXmlStreamReader(XMLStreamReader xmlStreamReader) { this.xmlStreamReader = xmlStreamReader; } }