dp2.exe does not accept UNC paths
- Dominant language
- Java
- Stars
- 26
- Forks
- 22
- PR merge metrics
- No merged PRs in 30d
Description
### Expected Behavior
I'm trying to run the Daisy Pipeline CLI with an [UNC path](https://learn.microsoft.com/en-us/dotnet/standard/io/file-path-formats#unc-paths) and I expect that the DTBook is processed.
### Actual Behavior
The job is not processed with error `Job request is not valid`.
### Steps to Reproduce
1. Construct a share such that you have read and write permission. For instance, if the machine name is `DEV`, create a share `Temp` so that new files can be created in `\\DEV\Temp` and so that they can be read too.
2. Put an arbitrary DTBook file in that share, for instance `\\DEV\Temp\dtbook.xml`
3. Execute in a CMD, `dp2.exe dtbook-to-pef --source \\DEV\Temp\dtbook.xml --output \\DEV\Temp\output-folder`
### Details
Changing the backward slashes to forward slashes gives the same issue.
### Environment
* Windows 11 64-bit
* DAISY Pipeline 2 version: 1.14.14
* Interface: Command Line
### Logs
```
2023-08-14 15:41:03,958 [ERROR] o.d.p.webservice.impl.JobsResource - bad request:
java.io.FileNotFoundException: Input not found: not a valid file URI: file://dev-10/Tekstproductie/pip-job-handler/in/soft-hyphen-test-1.xml
at org.daisy.pipeline.script.ScriptInput$Builder.checkInputURI(ScriptInput.java:200) ~[org.daisy.pipeline.framework-core-7.0.1.jar:na]
at org.daisy.pipeline.script.ScriptInput$Builder.withInput(ScriptInput.java:103) ~[org.daisy.pipeline.framework-core-7.0.1.jar:na]
at org.daisy.pipeline.script.BoundScript$Builder.withInput(BoundScript.java:44) ~[org.daisy.pipeline.framework-core-7.0.1.jar:na]
at org.daisy.pipeline.webservice.impl.JobsResource.addInputsToJob(JobsResource.java:458) ~[org.daisy.pipeline.webservice-3.1.0.jar:na]
at org.daisy.pipeline.webservice.impl.JobsResource.createJob(JobsResource.java:387) ~[org.daisy.pipeline.webservice-3.1.0.jar:na]
at org.daisy.pipeline.webservice.impl.JobsResource.createResource(JobsResource.java:178) ~[org.daisy.pipeline.webservice-3.1.0.jar:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
at org.restlet.resource.ServerResource.doHandle(ServerResource.java:503) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.resource.ServerResource.post(ServerResource.java:1215) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.resource.ServerResource.doHandle(ServerResource.java:592) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.resource.ServerResource.doNegotiatedHandle(ServerResource.java:649) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.resource.ServerResource.doConditionalHandle(ServerResource.java:348) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.resource.ServerResource.handle(ServerResource.java:951) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.resource.Finder.handle(Finder.java:246) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.routing.Filter.doHandle(Filter.java:159) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.routing.Filter.handle(Filter.java:206) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.routing.Router.doHandle(Router.java:431) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.routing.Router.handle(Router.java:648) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.routing.Filter.doHandle(Filter.java:159) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.routing.Filter.handle(Filter.java:206) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.routing.Filter.doHandle(Filter.java:159) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.routing.Filter.handle(Filter.java:206) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.routing.Filter.doHandle(Filter.java:159) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:155) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.routing.Filter.handle(Filter.java:206) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.routing.Filter.doHandle(Filter.java:159) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.routing.Filter.handle(Filter.java:206) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:211) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.engine.application.ApplicationHelper.handle(ApplicationHelper.java:84) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.Application.handle(Application.java:381) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.routing.Filter.doHandle(Filter.java:159) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.routing.Filter.handle(Filter.java:206) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.routing.Router.doHandle(Router.java:431) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.routing.Router.handle(Router.java:648) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.routing.Filter.doHandle(Filter.java:159) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.routing.Filter.handle(Filter.java:206) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.routing.Router.doHandle(Router.java:431) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.routing.Router.handle(Router.java:648) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.routing.Filter.doHandle(Filter.java:159) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:155) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.routing.Filter.handle(Filter.java:206) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.routing.Filter.doHandle(Filter.java:159) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.routing.Filter.handle(Filter.java:206) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:211) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.Component.handle(Component.java:392) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.Server.handle(Server.java:516) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.engine.ServerHelper.handle(ServerHelper.java:72) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.engine.adapter.HttpServerHelper.handle(HttpServerHelper.java:152) ~[org.restlet.osgi.org.restlet-2.1-RC6.jar:na]
at org.restlet.ext.jetty.JettyServerHelper$WrappedServer.handle(JettyServerHelper.java:170) ~[org.restlet.osgi.org.restlet.ext.jetty-2.1-RC6.jar:na]
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:452) ~[org.eclipse.jetty.jetty-server-7.6.5.v20120716.jar:7.6.5.v20120716]
at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:894) ~[org.eclipse.jetty.jetty-server-7.6.5.v20120716.jar:7.6.5.v20120716]
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:948) ~[org.eclipse.jetty.jetty-server-7.6.5.v20120716.jar:7.6.5.v20120716]
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:851) ~[org.eclipse.jetty.jetty-http-7.6.5.v20120716.jar:7.6.5.v20120716]
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) ~[org.eclipse.jetty.jetty-http-7.6.5.v20120716.jar:7.6.5.v20120716]
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:77) ~[org.eclipse.jetty.jetty-server-7.6.5.v20120716.jar:7.6.5.v20120716]
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:622) ~[org.eclipse.jetty.jetty-io-7.6.5.v20120716.jar:7.6.5.v20120716]
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:46) ~[org.eclipse.jetty.jetty-io-7.6.5.v20120716.jar:7.6.5.v20120716]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:603) ~[org.eclipse.jetty.jetty-util-7.6.5.v20120716.jar:7.6.5.v20120716]
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:538) ~[org.eclipse.jetty.jetty-util-7.6.5.v20120716.jar:7.6.5.v20120716]
at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
2023-08-14 15:41:03,958 [DEBUG] o.d.p.w.impl.GenericResource - Bad Request (400) - The request could not be understood by the server due to malformed syntax
2023-08-14 15:41:03,958 [DEBUG] o.d.p.w.impl.GenericResource - Input not found: not a valid file URI: file://dev-10/Tekstproductie/pip-job-handler/in/soft-hyphen-test-1.xml
2023-08-14 15:41:03,960 [DEBUG] o.d.p.w.impl.GenericResource - Input not found: not a valid file URI: file://dev-10/Tekstproductie/pip-job-handler/in/soft-hyphen-test-1.xmljava.lang.Throwable: Input not found: not a valid file URI: file://dev-10/Tekstproductie/pip-job-handler/in/soft-hyphen-test-1.xml
at org.daisy.pipeline.webservice.impl.GenericResource.getErrorRepresentation(GenericResource.java:40)
at org.daisy.pipeline.webservice.impl.JobsResource.badRequest(JobsResource.java:220)
at org.daisy.pipeline.webservice.impl.JobsResource.createResource(JobsResource.java:182)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.restlet.resource.ServerResource.doHandle(ServerResource.java:503)
at org.restlet.resource.ServerResource.post(ServerResource.java:1215)
at org.restlet.resource.ServerResource.doHandle(ServerResource.java:592)
at org.restlet.resource.ServerResource.doNegotiatedHandle(ServerResource.java:649)
at org.restlet.resource.ServerResource.doConditionalHandle(ServerResource.java:348)
at org.restlet.resource.ServerResource.handle(ServerResource.java:951)
at org.restlet.resource.Finder.handle(Finder.java:246)
at org.restlet.routing.Filter.doHandle(Filter.java:159)
at org.restlet.routing.Filter.handle(Filter.java:206)
at org.restlet.routing.Router.doHandle(Router.java:431)
at org.restlet.routing.Router.handle(Router.java:648)
at org.restlet.routing.Filter.doHandle(Filter.java:159)
at org.restlet.routing.Filter.handle(Filter.java:206)
at org.restlet.routing.Filter.doHandle(Filter.java:159)
at org.restlet.routing.Filter.handle(Filter.java:206)
at org.restlet.routing.Filter.doHandle(Filter.java:159)
at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:155)
at org.restlet.routing.Filter.handle(Filter.java:206)
at org.restlet.routing.Filter.doHandle(Filter.java:159)
at org.restlet.routing.Filter.handle(Filter.java:206)
at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:211)
at org.restlet.engine.application.ApplicationHelper.handle(ApplicationHelper.java:84)
at org.restlet.Application.handle(Application.java:381)
at org.restlet.routing.Filter.doHandle(Filter.java:159)
at org.restlet.routing.Filter.handle(Filter.java:206)
at org.restlet.routing.Router.doHandle(Router.java:431)
at org.restlet.routing.Router.handle(Router.java:648)
at org.restlet.routing.Filter.doHandle(Filter.java:159)
at org.restlet.routing.Filter.handle(Filter.java:206)
at org.restlet.routing.Router.doHandle(Router.java:431)
at org.restlet.routing.Router.handle(Router.java:648)
at org.restlet.routing.Filter.doHandle(Filter.java:159)
at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:155)
at org.restlet.routing.Filter.handle(Filter.java:206)
at org.restlet.routing.Filter.doHandle(Filter.java:159)
at org.restlet.routing.Filter.handle(Filter.java:206)
at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:211)
at org.restlet.Component.handle(Component.java:392)
at org.restlet.Server.handle(Server.java:516)
at org.restlet.engine.ServerHelper.handle(ServerHelper.java:72)
at org.restlet.engine.adapter.HttpServerHelper.handle(HttpServerHelper.java:152)
at org.restlet.ext.jetty.JettyServerHelper$WrappedServer.handle(JettyServerHelper.java:170)
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:452)
at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:894)
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:948)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:851)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:77)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:622)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:46)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:603)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:538)
at java.base/java.lang.Thread.run(Thread.java:833)
```
Contributor guide
No contributing guide indexed for this repository
Research direction
Reproduce the failure with the documented dp2.exe command and an accessible UNC share. Start with ScriptInput.java, especially Builder.checkInputURI, and trace the call from JobsResource.addInputsToJob; done means the DTBook is accepted and processed with UNC source and output paths.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- cli
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100