/*
 * Copyright 2002-2017 the original author or authors.
 *
 * 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
 *
 *      https://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.springframework.beans.factory.xml;

import java.io.StringReader;

import org.w3c.dom.Document;
import org.xml.sax.InputSource;

import org.springframework.beans.factory.BeanDefinitionStoreException;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.parsing.ProblemReporter;
import org.springframework.beans.factory.parsing.ReaderContext;
import org.springframework.beans.factory.parsing.ReaderEventListener;
import org.springframework.beans.factory.parsing.SourceExtractor;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.core.env.Environment;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.lang.Nullable;

Extension of ReaderContext, specific to use with an XmlBeanDefinitionReader. Provides access to the NamespaceHandlerResolver configured in the XmlBeanDefinitionReader.
Author:Rob Harrop, Juergen Hoeller
Since:2.0
/** * Extension of {@link org.springframework.beans.factory.parsing.ReaderContext}, * specific to use with an {@link XmlBeanDefinitionReader}. Provides access to the * {@link NamespaceHandlerResolver} configured in the {@link XmlBeanDefinitionReader}. * * @author Rob Harrop * @author Juergen Hoeller * @since 2.0 */
public class XmlReaderContext extends ReaderContext { private final XmlBeanDefinitionReader reader; private final NamespaceHandlerResolver namespaceHandlerResolver;
Construct a new XmlReaderContext.
Params:
  • resource – the XML bean definition resource
  • problemReporter – the problem reporter in use
  • eventListener – the event listener in use
  • sourceExtractor – the source extractor in use
  • reader – the XML bean definition reader in use
  • namespaceHandlerResolver – the XML namespace resolver
/** * Construct a new {@code XmlReaderContext}. * @param resource the XML bean definition resource * @param problemReporter the problem reporter in use * @param eventListener the event listener in use * @param sourceExtractor the source extractor in use * @param reader the XML bean definition reader in use * @param namespaceHandlerResolver the XML namespace resolver */
public XmlReaderContext( Resource resource, ProblemReporter problemReporter, ReaderEventListener eventListener, SourceExtractor sourceExtractor, XmlBeanDefinitionReader reader, NamespaceHandlerResolver namespaceHandlerResolver) { super(resource, problemReporter, eventListener, sourceExtractor); this.reader = reader; this.namespaceHandlerResolver = namespaceHandlerResolver; }
Return the XML bean definition reader in use.
/** * Return the XML bean definition reader in use. */
public final XmlBeanDefinitionReader getReader() { return this.reader; }
Return the bean definition registry to use.
See Also:
  • XmlBeanDefinitionReader.XmlBeanDefinitionReader(BeanDefinitionRegistry)
/** * Return the bean definition registry to use. * @see XmlBeanDefinitionReader#XmlBeanDefinitionReader(BeanDefinitionRegistry) */
public final BeanDefinitionRegistry getRegistry() { return this.reader.getRegistry(); }
Return the resource loader to use, if any.

This will be non-null in regular scenarios, also allowing access to the resource class loader.

See Also:
/** * Return the resource loader to use, if any. * <p>This will be non-null in regular scenarios, * also allowing access to the resource class loader. * @see XmlBeanDefinitionReader#setResourceLoader * @see ResourceLoader#getClassLoader() */
@Nullable public final ResourceLoader getResourceLoader() { return this.reader.getResourceLoader(); }
Return the bean class loader to use, if any.

Note that this will be null in regular scenarios, as an indication to lazily resolve bean classes.

See Also:
  • setBeanClassLoader.setBeanClassLoader
/** * Return the bean class loader to use, if any. * <p>Note that this will be null in regular scenarios, * as an indication to lazily resolve bean classes. * @see XmlBeanDefinitionReader#setBeanClassLoader */
@Nullable public final ClassLoader getBeanClassLoader() { return this.reader.getBeanClassLoader(); }
Return the environment to use.
See Also:
  • setEnvironment.setEnvironment
/** * Return the environment to use. * @see XmlBeanDefinitionReader#setEnvironment */
public final Environment getEnvironment() { return this.reader.getEnvironment(); }
Return the namespace resolver.
See Also:
  • setNamespaceHandlerResolver.setNamespaceHandlerResolver
/** * Return the namespace resolver. * @see XmlBeanDefinitionReader#setNamespaceHandlerResolver */
public final NamespaceHandlerResolver getNamespaceHandlerResolver() { return this.namespaceHandlerResolver; } // Convenience methods to delegate to
Call the bean name generator for the given bean definition.
See Also:
/** * Call the bean name generator for the given bean definition. * @see XmlBeanDefinitionReader#getBeanNameGenerator() * @see org.springframework.beans.factory.support.BeanNameGenerator#generateBeanName */
public String generateBeanName(BeanDefinition beanDefinition) { return this.reader.getBeanNameGenerator().generateBeanName(beanDefinition, getRegistry()); }
Call the bean name generator for the given bean definition and register the bean definition under the generated name.
See Also:
/** * Call the bean name generator for the given bean definition * and register the bean definition under the generated name. * @see XmlBeanDefinitionReader#getBeanNameGenerator() * @see org.springframework.beans.factory.support.BeanNameGenerator#generateBeanName * @see BeanDefinitionRegistry#registerBeanDefinition */
public String registerWithGeneratedName(BeanDefinition beanDefinition) { String generatedName = generateBeanName(beanDefinition); getRegistry().registerBeanDefinition(generatedName, beanDefinition); return generatedName; }
Read an XML document from the given String.
See Also:
  • getReader()
/** * Read an XML document from the given String. * @see #getReader() */
public Document readDocumentFromString(String documentContent) { InputSource is = new InputSource(new StringReader(documentContent)); try { return this.reader.doLoadDocument(is, getResource()); } catch (Exception ex) { throw new BeanDefinitionStoreException("Failed to read XML document", ex); } } }