Skip to content

URISyntaxException is raised if the spring boot application is started in a location that contains invalid URI characters #40615

Closed
@FrankKlOS

Description

@FrankKlOS

The stack trace below is logged, if our spring boot application is started in a path that contains for example '('.
The stack we are using is: thymeleaf together with webjars+jetty

Spring-Boot version: 3.2.4

Caused by: java.io.IOError: java.net.URISyntaxException: Illegal character in path at index 29: nested:/C:/DEV-Install/testaa tst (x86)/service-manager/apps/gateway/gateway-app.jar/!BOOT-INF/lib/i18next-1.11.5.jar
 	at org.springframework.boot.loader.nio.file.NestedPath.toUri(NestedPath.java:148)
 	at jdk.zipfs/jdk.nio.zipfs.ZipPath.toUri(ZipPath.java:201)
 	at org.eclipse.jetty.util.resource.FileSystemPool.mount(FileSystemPool.java:131)
 	at org.eclipse.jetty.util.resource.ResourceFactoryInternals$CompositeResourceFactory.mountIfNeeded(ResourceFactoryInternals.java:268)
 	at org.eclipse.jetty.util.resource.ResourceFactoryInternals$CompositeResourceFactory.newResource(ResourceFactoryInternals.java:225)
 	at org.eclipse.jetty.util.resource.ResourceFactoryInternals$LifeCycle.newResource(ResourceFactoryInternals.java:171)
 	at org.eclipse.jetty.util.resource.ResourceFactory.newResource(ResourceFactory.java:370)
 	at org.eclipse.jetty.ee10.servlet.ServletContextHandler$ServletContextApi.getResourceAsStream(ServletContextHandler.java:2834)
 	at org.springframework.web.context.support.ServletContextResource.isReadable(ServletContextResource.java:120)
 	at org.springframework.web.servlet.resource.PathResourceResolver.getResource(PathResourceResolver.java:190)
 	at org.springframework.web.servlet.resource.PathResourceResolver.getResource(PathResourceResolver.java:159)
 	at org.springframework.web.servlet.resource.PathResourceResolver.resolveUrlPathInternal(PathResourceResolver.java:149)
 	at org.springframework.web.servlet.resource.AbstractResourceResolver.resolveUrlPath(AbstractResourceResolver.java:53)
 	at org.springframework.web.servlet.resource.DefaultResourceResolverChain.resolveUrlPath(DefaultResourceResolverChain.java:82)
 	at org.springframework.web.servlet.resource.WebJarsResourceResolver.resolveUrlPathInternal(WebJarsResourceResolver.java:96)
 	at org.springframework.web.servlet.resource.AbstractResourceResolver.resolveUrlPath(AbstractResourceResolver.java:53)
 	at org.springframework.web.servlet.resource.DefaultResourceResolverChain.resolveUrlPath(DefaultResourceResolverChain.java:82)
 	at org.springframework.web.servlet.resource.CachingResourceResolver.resolveUrlPathInternal(CachingResourceResolver.java:172)
 	at org.springframework.web.servlet.resource.AbstractResourceResolver.resolveUrlPath(AbstractResourceResolver.java:53)
 	at org.springframework.web.servlet.resource.DefaultResourceResolverChain.resolveUrlPath(DefaultResourceResolverChain.java:82)
 	at org.springframework.web.servlet.resource.ResourceUrlProvider.getForLookupPath(ResourceUrlProvider.java:245)
 	at org.springframework.web.servlet.resource.ResourceUrlEncodingFilter$ResourceUrlEncodingRequestWrapper.resolveUrlPath(ResourceUrlEncodingFilter.java:126)
 	at org.springframework.web.servlet.resource.ResourceUrlEncodingFilter$ResourceUrlEncodingResponseWrapper.encodeURL(ResourceUrlEncodingFilter.java:159)
 	at org.thymeleaf.web.servlet.JakartaServletWebExchange.transformURL(JakartaServletWebExchange.java:124)
 	at org.thymeleaf.linkbuilder.StandardLinkBuilder.processLink(StandardLinkBuilder.java:547)
 	at org.thymeleaf.linkbuilder.StandardLinkBuilder.buildLink(StandardLinkBuilder.java:138)
 	at org.thymeleaf.context.AbstractEngineContext.buildLink(AbstractEngineContext.java:167)
 	at org.thymeleaf.standard.expression.LinkExpression.executeLinkExpression(LinkExpression.java:292)
 	at org.thymeleaf.standard.expression.SimpleExpression.executeSimple(SimpleExpression.java:85)
 	at org.thymeleaf.standard.expression.Expression.execute(Expression.java:109)
 	at org.thymeleaf.standard.expression.Expression.execute(Expression.java:138)
 	at org.thymeleaf.standard.processor.AbstractStandardExpressionAttributeTagProcessor.doProcess(AbstractStandardExpressionAttributeTagProcessor.java:144)
 	at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:74)
 	at org.thymeleaf.processor.element.AbstractElementTagProcessor.process(AbstractElementTagProcessor.java:95)
 	at org.thymeleaf.util.ProcessorConfigurationUtils$ElementTagProcessorWrapper.process(ProcessorConfigurationUtils.java:633)
 	at org.thymeleaf.engine.ProcessorTemplateHandler.handleOpenElement(ProcessorTemplateHandler.java:1314)
 	at org.thymeleaf.engine.OpenElementTag.beHandled(OpenElementTag.java:205)
 	at org.thymeleaf.engine.TemplateModel.process(TemplateModel.java:136)
 	at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:592)
 	at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1103)
 	at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1077)
 	at org.thymeleaf.spring6.view.ThymeleafView.renderFragment(ThymeleafView.java:372)
 	at org.thymeleaf.spring6.view.ThymeleafView.render(ThymeleafView.java:192)
 	at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1431)
 	at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1167)
 	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1106)
 	... 146 common frames omitted
 Caused by: java.net.URISyntaxException: Illegal character in path at index 29: nested:/C:/DEV-Install/testaa tst (x86)/service-manager/apps/gateway/gateway-app.jar/!BOOT-INF/lib/i18next-1.11.5.jar
 	at java.base/java.net.URI$Parser.fail(URI.java:2974)
 	at java.base/java.net.URI$Parser.checkChars(URI.java:3145)
 	at java.base/java.net.URI$Parser.parseHierarchical(URI.java:3227)
 	at java.base/java.net.URI$Parser.parse(URI.java:3175)
 	at java.base/java.net.URI.<init>(URI.java:623)
 	at org.springframework.boot.loader.nio.file.NestedPath.toUri(NestedPath.java:145)
 	... 191 common frames omitted

Metadata

Metadata

Assignees

Labels

type: regressionA regression from a previous release

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions