[英]Getting “InvalidPathException: Illegal char <*>” while upgrading from Spring 4.x to 5.x
I am trying to upgrade from Spring 4.x to Spring 5.x but facing one issue.我正在尝试从 Spring 4.x 升级到 Spring 5.x 但面临一个问题。 I have multiple spring xml configuration files in META-INF\spring\abc\
directory.我在META-INF\spring\abc\
目录中有多个 spring xml 配置文件。 In META-INF\spring\
directory I have abc-context.xml
file which contains following line:在META-INF\spring\
目录中,我有abc-context.xml
文件,其中包含以下行:
<!-- Spring Bean Profiles will ensure only one instance is loaded based on -Dinstance=[name] -->
<import resource="abc/*.xml"/>
When I run the application with Spring 4.x everything works fine.当我使用 Spring 4.x 运行应用程序时,一切正常。 Excerpt from the logs:日志摘录:
DEBUG PathMatchingResourcePatternResolver - Looking for matching resources in directory tree [C:\...\abc\target\classes\META-INF\spring\abc]
DEBUG PathMatchingResourcePatternResolver - Searching directory [C:\...\abc\target\classes\META-INF\spring\abc] for files matching pattern [.../abc/target/classes/META-INF/spring/abc/*.xml]
DEBUG PathMatchingResourcePatternResolver - Resolved location pattern [file:.../abc/target/classes/META-INF/spring/abc/*.xml] to resources [file [C:\...\abc\target\classes\META-INF\spring\abc\pqr.xml], file [C:\...\abc\target\classes\META-INF\spring\abc\mno.xml], file [C:\...\abc\target\classes\META-INF\spring\abc\xyz.xml]]
When I upgrade to Spring 5.x and try to run the application, I get following exception:当我升级到 Spring 5.x 并尝试运行应用程序时,出现以下异常:
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from file [...\target\classes\META-INF\spring\abc-context.xml]; nested exception is java.nio.file.InvalidPathException: Illegal char <*> at index 88: ...\target\classes\META-INF\spring\abc\*.xml
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:419)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:224)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:195)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:257)
at org.springframework.context.support.GenericXmlApplicationContext.load(GenericXmlApplicationContext.java:130)
at com.nomura.unity.stp.model.camel.UnityStpMain.createDefaultApplicationContext(UnityStpMain.java:69)
at org.apache.camel.spring.Main.doStart(Main.java:154)
at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
at org.apache.camel.main.MainSupport.run(MainSupport.java:138)
at org.apache.camel.main.MainSupport.run(MainSupport.java:390)
at com.nomura.unity.stp.model.camel.UnityStpMain.main(UnityStpMain.java:81)
at com.nomura.unity.stp.audit.Main.main(Main.java:12)
Caused by: java.nio.file.InvalidPathException: Illegal char <*> at index 88: ...\target\classes\META-INF\spring\abc\*.xml
at sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)
at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)
at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
at sun.nio.fs.WindowsPath.parse(WindowsPath.java:94)
at sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:255)
at java.io.File.toPath(File.java:2234)
at org.springframework.core.io.FileSystemResource.<init>(FileSystemResource.java:82)
at org.springframework.core.io.FileSystemResource.createRelative(FileSystemResource.java:310)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:248)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(DefaultBeanDefinitionDocumentReader.java:191)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:176)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:149)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:96)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:513)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:393)
... 14 more
Can someone please help me understand why * is getting treated as illegal character here?有人可以帮我理解为什么 * 在这里被视为非法字符吗? Any solution?有什么解决办法吗?
PS: I know I can have multiple bean profile definitions and import the files accordingly but I do not want to do that because it would be an additional change for me in many (200+) applications. PS:我知道我可以有多个 bean 配置文件定义并相应地导入文件,但我不想这样做,因为在许多(200 多个)应用程序中这对我来说是一个额外的变化。
I have got the solution.我有解决办法。
changing this改变这个
<import resource="abc/*.xml"/>
to this对此
<import resource="classpath:META-INF/spring/abc/*.xml"/>
solves the issue.解决了这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.