diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/xml/BeansDtdResolver.java b/spring-beans/src/main/java/org/springframework/beans/factory/xml/BeansDtdResolver.java index 6f3386cb86..70b64e2ee9 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/xml/BeansDtdResolver.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/xml/BeansDtdResolver.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2015 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. @@ -17,7 +17,6 @@ package org.springframework.beans.factory.xml; import java.io.IOException; -import java.util.Arrays; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -45,7 +44,9 @@ public class BeansDtdResolver implements EntityResolver { private static final String DTD_EXTENSION = ".dtd"; - private static final String[] DTD_NAMES = {"spring-beans-2.0", "spring-beans"}; + private static final String DTD_FILENAME = "spring-beans-2.0"; + + private static final String DTD_NAME = "spring-beans"; private static final Log logger = LogFactory.getLog(BeansDtdResolver.class); @@ -58,30 +59,28 @@ public class BeansDtdResolver implements EntityResolver { } if (systemId != null && systemId.endsWith(DTD_EXTENSION)) { int lastPathSeparator = systemId.lastIndexOf("/"); - for (String DTD_NAME : DTD_NAMES) { - int dtdNameStart = systemId.indexOf(DTD_NAME); - if (dtdNameStart > lastPathSeparator) { - String dtdFile = systemId.substring(dtdNameStart); - if (logger.isTraceEnabled()) { - logger.trace("Trying to locate [" + dtdFile + "] in Spring jar"); - } - try { - Resource resource = new ClassPathResource(dtdFile, getClass()); - InputSource source = new InputSource(resource.getInputStream()); - source.setPublicId(publicId); - source.setSystemId(systemId); - if (logger.isDebugEnabled()) { - logger.debug("Found beans DTD [" + systemId + "] in classpath: " + dtdFile); - } - return source; + int dtdNameStart = systemId.indexOf(DTD_NAME); + if (dtdNameStart > lastPathSeparator) { + String dtdFile = DTD_FILENAME + DTD_EXTENSION; + if (logger.isTraceEnabled()) { + logger.trace("Trying to locate [" + dtdFile + "] in Spring jar on classpath"); + } + try { + Resource resource = new ClassPathResource(dtdFile, getClass()); + InputSource source = new InputSource(resource.getInputStream()); + source.setPublicId(publicId); + source.setSystemId(systemId); + if (logger.isDebugEnabled()) { + logger.debug("Found beans DTD [" + systemId + "] in classpath: " + dtdFile); } - catch (IOException ex) { - if (logger.isDebugEnabled()) { - logger.debug("Could not resolve beans DTD [" + systemId + "]: not found in class path", ex); - } + return source; + } + catch (IOException ex) { + if (logger.isDebugEnabled()) { + logger.debug("Could not resolve beans DTD [" + systemId + "]: not found in classpath", ex); } - } + } } @@ -92,7 +91,7 @@ public class BeansDtdResolver implements EntityResolver { @Override public String toString() { - return "EntityResolver for DTDs " + Arrays.toString(DTD_NAMES); + return "EntityResolver for spring-beans DTD"; } } diff --git a/spring-beans/src/test/resources/org/springframework/beans/factory/xml/import.xml b/spring-beans/src/test/resources/org/springframework/beans/factory/xml/import.xml index 278e5dff81..96446f02ba 100644 --- a/spring-beans/src/test/resources/org/springframework/beans/factory/xml/import.xml +++ b/spring-beans/src/test/resources/org/springframework/beans/factory/xml/import.xml @@ -1,5 +1,5 @@ - +