You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Willem Jiang (JIRA)" <ji...@apache.org> on 2012/08/10 05:26:39 UTC

[jira] [Assigned] (CAMEL-5495) file endpoints on windows without volume name in the path url not working in some cases

     [ https://issues.apache.org/jira/browse/CAMEL-5495?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Willem Jiang reassigned CAMEL-5495:
-----------------------------------

    Assignee: Willem Jiang
    
> file endpoints on windows without volume name in the path url not working in some cases
> ---------------------------------------------------------------------------------------
>
>                 Key: CAMEL-5495
>                 URL: https://issues.apache.org/jira/browse/CAMEL-5495
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 2.9.2
>         Environment: windows
>            Reporter: Aki Yoshida
>            Assignee: Willem Jiang
>            Priority: Minor
>         Attachments: trunk-camel-5495.diff
>
>
> I am using file endpoints on Windows without the volume name just like the normal unix based paths look.
> That means, I have something like  file:///tmp/file-in and file:///tmp/file-out
> The funny thing that I noticed is that each endpoint itself works fine, but when a route is set up from one to the other, it fails because there seems to be an inconsistency in the way the windows path is handled in the camel-core's file component.
> As mentioned, each file endpoint itself is working fine. For example, the consumer file endpoint configured in a route
> from("file:///tmp/file-in").to("mock:test")
> works fine.
> Similarly, the produce file endpoint configured in a route
> from("direct:test").to("file:///tmp/file-out")
> works fine.
> But when a route is setup to connect these two file endpoints, the producer endpoint fails to create the output file.
> Concretely, there is the following code in GenericFileEndpoint.configureMessage that determines the file name.
>              String name = file.isAbsolute() ? file.getAbsoluteFilePath() : file.getRelativeFilePath();
>             // skip leading endpoint configured directory
>             String endpointPath = getConfiguration().getDirectory() + getFileSeparator();
> In this particular case, the name variable is set to "C:\tmp\file-in\sample.xml" while the endpointPath variable is set to "\tmp\file-in".
> So, the subsequent code to extract the file name part, shown below, fails to match the path.
>             if (ObjectHelper.isNotEmpty(endpointPath) && name.startsWith(endpointPath)) {
>                 name = ObjectHelper.after(name, endpointPath);
>             }
> As a result, the file name is not extracted as "sample.xml" but remain unchanged as "C:\tmp\file-in\sample.xml".
> Consequently, when the file producer endpoint tries to write this file in the file system, it tries to write a file as "/tmp/file-out/C:\tmp\file-in\sample.xml", resulting in an error.
> I modified FileComponent and FileEndpoint so that the endpoint path is stored correctly in this case to make the above extraction code find the file name part correctly.
> Attached is this proposed patch and a test case which runs on windows and on non-windows but this issue can only be demonstrated under windows.
> testRouteToFileOnly and testRouteFromFileOnly work without this patch while testRouteFileToFile fails without this patch on windows.
> Thanks for looking into this issue.
> Regards, Aki

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira