|
|
|
@ -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"; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|