001/* 002 * Copyright 2002-2014 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * https://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017package org.springframework.beans.factory.xml; 018 019import java.io.StringReader; 020 021import org.w3c.dom.Document; 022import org.xml.sax.InputSource; 023 024import org.springframework.beans.factory.BeanDefinitionStoreException; 025import org.springframework.beans.factory.config.BeanDefinition; 026import org.springframework.beans.factory.parsing.ProblemReporter; 027import org.springframework.beans.factory.parsing.ReaderContext; 028import org.springframework.beans.factory.parsing.ReaderEventListener; 029import org.springframework.beans.factory.parsing.SourceExtractor; 030import org.springframework.beans.factory.support.BeanDefinitionRegistry; 031import org.springframework.core.env.Environment; 032import org.springframework.core.io.Resource; 033import org.springframework.core.io.ResourceLoader; 034 035/** 036 * Extension of {@link org.springframework.beans.factory.parsing.ReaderContext}, 037 * specific to use with an {@link XmlBeanDefinitionReader}. Provides access to the 038 * {@link NamespaceHandlerResolver} configured in the {@link XmlBeanDefinitionReader}. 039 * 040 * @author Rob Harrop 041 * @author Juergen Hoeller 042 * @since 2.0 043 */ 044public class XmlReaderContext extends ReaderContext { 045 046 private final XmlBeanDefinitionReader reader; 047 048 private final NamespaceHandlerResolver namespaceHandlerResolver; 049 050 051 public XmlReaderContext( 052 Resource resource, ProblemReporter problemReporter, 053 ReaderEventListener eventListener, SourceExtractor sourceExtractor, 054 XmlBeanDefinitionReader reader, NamespaceHandlerResolver namespaceHandlerResolver) { 055 056 super(resource, problemReporter, eventListener, sourceExtractor); 057 this.reader = reader; 058 this.namespaceHandlerResolver = namespaceHandlerResolver; 059 } 060 061 062 public final XmlBeanDefinitionReader getReader() { 063 return this.reader; 064 } 065 066 public final BeanDefinitionRegistry getRegistry() { 067 return this.reader.getRegistry(); 068 } 069 070 public final ResourceLoader getResourceLoader() { 071 return this.reader.getResourceLoader(); 072 } 073 074 public final ClassLoader getBeanClassLoader() { 075 return this.reader.getBeanClassLoader(); 076 } 077 078 public final Environment getEnvironment() { 079 return this.reader.getEnvironment(); 080 } 081 082 public final NamespaceHandlerResolver getNamespaceHandlerResolver() { 083 return this.namespaceHandlerResolver; 084 } 085 086 087 public String generateBeanName(BeanDefinition beanDefinition) { 088 return this.reader.getBeanNameGenerator().generateBeanName(beanDefinition, getRegistry()); 089 } 090 091 public String registerWithGeneratedName(BeanDefinition beanDefinition) { 092 String generatedName = generateBeanName(beanDefinition); 093 getRegistry().registerBeanDefinition(generatedName, beanDefinition); 094 return generatedName; 095 } 096 097 public Document readDocumentFromString(String documentContent) { 098 InputSource is = new InputSource(new StringReader(documentContent)); 099 try { 100 return this.reader.doLoadDocument(is, getResource()); 101 } 102 catch (Exception ex) { 103 throw new BeanDefinitionStoreException("Failed to read XML document", ex); 104 } 105 } 106 107}