You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Claus Ibsen (Jira)" <ji...@apache.org> on 2021/12/31 09:41:00 UTC

[jira] [Comment Edited] (CAMEL-17389) toD (Dynamic To URI) doesn't work with Windows paths with file component

    [ https://issues.apache.org/jira/browse/CAMEL-17389?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17467165#comment-17467165 ] 

Claus Ibsen edited comment on CAMEL-17389 at 12/31/21, 9:40 AM:
----------------------------------------------------------------

You can use toD(xxx).allowOptimisedComponents(false) and then if the path does not start with t (as in test) then it works for windows.

The problem is that the simple language regards \t as a tab, and 2 slashes as escape for a single slash.

If only windows would use slashes like everyone else :(


was (Author: davsclaus):
You can use toD(xxx).allowOptimisedComponents(false) and then if the path does not start with t (as in test) then it works for windows.

The problem is that the simple language regards \t as a tab, and \\ as escape for a single slash.

If only windows would use slashes like everyone else :(

> toD (Dynamic To URI) doesn't work with Windows paths with file component
> ------------------------------------------------------------------------
>
>                 Key: CAMEL-17389
>                 URL: https://issues.apache.org/jira/browse/CAMEL-17389
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-core
>    Affects Versions: 3.14.0
>         Environment: OS: Windows 8 / Windows 10
> Java: OpenJDK 11 (OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.10+9))
> Camel: 3.14.0 (Same behavior on 3.11.X)
>            Reporter: Raymond
>            Priority: Minor
>
> I had a Camel route like this:
> from(uri)
>     to("file:" + path);
> The path is set by an end-user like for example
> 1) path/to/dir (Linux)
> 2) C:\dir (Windows)
>  
> This works. Now I like to change the route so that the path can also set dynamically by the user (for example with a header). Thus I changed the route to a dynamic to uri "toD".
> from(uri)
>     toD("file:" + path);
> This works on Linux, but not on Windows paths. For example:
> 1) C:\test (does not work)
> 2) C:\\test (does not work)
> 3) C:/test (does work)
> In the first two cases I get the following error:
> org.apache.camel.ResolveEndpointFailedException: Failed to resolve endpoint: file://C:  est due to: Illegal character i
> n authority at index 7: file://C:       est
>         at org.apache.camel.impl.engine.AbstractCamelContext.doGetEndpoint(AbstractCamelContext.java:968)
>         at org.apache.camel.impl.engine.AbstractCamelContext.getEndpoint(AbstractCamelContext.java:859)
>         at org.apache.camel.support.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:73)
>         at org.apache.camel.support.ExchangeHelper.resolveEndpoint(ExchangeHelper.java:120)
>         at org.apache.camel.support.ExchangeHelper.resolveEndpoint(ExchangeHelper.java:99)
>         at org.apache.camel.processor.SendDynamicProcessor.resolveEndpoint(SendDynamicProcessor.java:296)
>         at org.apache.camel.processor.SendDynamicProcessor.process(SendDynamicProcessor.java:157)
>         at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.doRun(RedeliveryErrorHandler.ja
> va:810)
>         at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.run(RedeliveryErrorHandler.java
> :718)
>         at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:187)
>         at org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:64)
>         at org.apache.camel.processor.Pipeline.process(Pipeline.java:184)
>         at org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:398)
>         at org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:492)
>         at org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:245)
>         at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:206)
>         at org.apache.camel.support.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:202)
>         at org.apache.camel.support.ScheduledPollConsumer.run(ScheduledPollConsumer.java:116)
>         at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
>         at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
>         at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecuto
> r.java:305)
>         at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
>         at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
>         at java.base/java.lang.Thread.run(Thread.java:834)
> Caused by: java.net.URISyntaxException: Illegal character in authority at index 7: file://C:    est
>         at java.base/java.net.URI$Parser.fail(URI.java:2913)
>         at java.base/java.net.URI$Parser.parseAuthority(URI.java:3247)
>         at java.base/java.net.URI$Parser.parseHierarchical(URI.java:3158)
>         at java.base/java.net.URI$Parser.parse(URI.java:3114)
>         at java.base/java.net.URI.<init>(URI.java:600)
>         at org.apache.camel.support.DefaultComponent.createEndpoint(DefaultComponent.java:97)
>         at org.apache.camel.impl.engine.AbstractCamelContext.doGetEndpoint(AbstractCamelContext.java:934)
>         ... 23 common frames omitted
> This behavior is probably because with toD the uri is handled by a simple expression and this does some escaping. I could build in some input validation or change the backward slashes to forward slashed in my application, but I rather would like to change from "to" to "toD" without side-effects where it also works for Windows paths.
> Side note: As a user I would expect toD as replacement for to where it works exactly the same only it evaluates expressions. In the long run maybe there should be not difference between to and toD in Camel, so that toD can replace the currect "to" step and toD is not needed anymore.
>  



--
This message was sent by Atlassian Jira
(v8.20.1#820001)