}
private String getNewSchemaLocation(String schemaLocation, String namespace, String systemId) {
// 根据指定的schemaLocation判断
if (schemaLocation != null) {
Schema schema = schemas.findSchema(schemaLocation);
if (schema != null) {
return normalizedPrefix + schema.getName();
} else {
return schemaLocation; // 返回原本的location,但可能是错误的!
}
}
// 再根据namespace判断
if (namespace != null) {
Set<Schema> nsSchemas = schemas.getNamespaceMappings().get(namespace);
if (nsSchemas != null && !nsSchemas.isEmpty()) {
// 首先,在所有相同ns的schema中查找版本相同的schema。
String versionedExtension = getVersionedExtension(systemId);
if (versionedExtension != null) {
for (Schema schema : nsSchemas) {
if (schema.getName().endsWith(versionedExtension)) {
return normalizedPrefix + schema.getName();
}
}
}
// 其次,选择第一个默认的schema,其顺序是:beans.xsd、beans-2.5.xsd、beans-2.0.xsd