Получение «InvalidPathException: Illegal char <*>» при обновлении с Spring 4.x до 5.x - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь обновить Spring 4.x до Spring 5.x, но столкнулся с одной проблемой. У меня есть несколько конфигурационных файлов Spring XML в каталоге META-INF\spring\abc\. В каталоге META-INF\spring\ у меня есть файл abc-context.xml, который содержит следующую строку:

<!-- Spring Bean Profiles will ensure only one instance is loaded based on -Dinstance=[name] -->
<import resource="abc/*.xml"/>

Когда я запускаю приложение с Spring 4.x, все работает нормально. Выдержка из журналов:

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]]

Когда я обновляюсь до 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

Может кто-нибудь помочь мне понять, почему* здесь рассматривается как незаконный персонаж? Любое решение?

PS: Я знаю, что могу иметь несколько определений профиля bean-компонента и соответственно импортировать файлы, но я не хочу этого делать, потому что это будет дополнительным изменением для меня во многих (более 200) приложениях.

1 Ответ

0 голосов
/ 15 октября 2019

У меня есть решение.

изменение этого

<import resource="abc/*.xml"/>

на это

<import resource="classpath:META-INF/spring/abc/*.xml"/>

решает проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...