Description
Affects: 5.3.14 and earlier
If you want to load a DTD configuration file, <! --
Different positions from -->
will affect the loading of spring.
If my profile is written like this:
<?xml version="1.0" encoding="UTF-8"?>
<!--
DOCTYPE --> <!-- -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
</beans>
Then, when Spring is used to load the configuration file, an exception will appear.
This is because there is a bug when determining the profile validation pattern.
In org.springframework.util.xml.XmlValidationModeDetector
,Spring analyzes programs one line at a time.
However, each analysis focuses only on the first <!--
in each line. Spring will put <!--
The previous content is not considered as a comment.
Thus, the situation in the above example is ignored.
I think that can result in org.springframework.util.xml.XmlValidationModeDetector#consumeCommentTokens(String line)
return to add the following code before:
@Nullable
private String consumeCommentTokens(String line) {
int indexOfStartComment = line.indexOf(START_COMMENT);
if (indexOfStartComment == -1 && !line.contains(END_COMMENT)) {
return line;
}
String result = "";
String currLine = line;
if (indexOfStartComment >= 0) {
result = line.substring(0, indexOfStartComment);
currLine = line.substring(indexOfStartComment);
}
while ((currLine = consume(currLine)) != null) {
if (!this.inComment && !currLine.trim().startsWith(START_COMMENT)) {
int index = result.indexOf(END_COMMENT);
if(index != -1) result = result.substring(index + END_COMMENT.length());
return result + currLine;
}
}
return null;
}
It can be removed in front of '-->'.