Commons VFS 和 Java.net.URL - 添加对“sftp://”的支持协议
我们正在尝试使用 Apache Commons VFS 通过 SFTP 访问某些内容。 它声称支持 SFTP,但是我们得到了 MalformedURLException 启动时。深入挖掘后,我发现 apache vfs 正在使用 java .net.URL
。然而文档告诉我它实际上并不支持 sftp://
URL。
以下协议的协议处理程序保证存在于搜索路径中:-
http、https、ftp、文件和 jar
其他协议的协议处理程序也可能可用。
我在 Linux 上使用 java 1.6.0。如何防止 java.net.URL
在看到 sftp://
URL 时抛出摆动?我需要继续使用 Apache commons VFS 库,它使用 java.net.URL。
We're trying to use Apache Commons VFS to access something over SFTP. It claims to support SFTP, however we're getting a MalformedURLException when it starts. Digging around I see that apache vfs is using java.net.URL
. However the documentation tells me that it doesn't actually support sftp://
URLs.
Protocol handlers for the following protocols are guaranteed to exist on the search path :-
http, https, ftp, file, and jar
Protocol handlers for additional protocols may also be available.
I'm using java 1.6.0 on Linux. How can I prevent java.net.URL
from throwing a wobbly when it sees a sftp://
URL? I need to keep using the Apache commons VFS library, which uses java.net.URL
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
请参阅 commons-vfs 使 sftp 正常工作所需的依赖项列表。一旦 JSch 位于类路径中,您的异常就不再发生。查看 Apache Wiki 了解通过 sftp 连接的示例。
See the list of dependencies that commons-vfs requires for sftp to work. Once JSch is in the classpath, your exception no longer happen. Have a look at Apache's Wiki for examples of connecting via sftp.
我以前从未使用过 VFS,但看起来你需要(至少)注册 SFTP
FileProvider
。 看起来像这样需要类似的东西:可能有一种方法可以通过配置文件语法来执行相同的操作。< /a>
I've never used VFS before, but it looks like you'd need to (at least) register an SFTP
FileProvider
. It looks like it requires something like:There is probably a way to do the same thing through configuration file syntax.
查看此描述关于如何实现新的 URL 协议处理程序(该文档描述了一种 LDAP 类型的 URL,但是您应该能够将其推广到您的
sftp
方案)。来自文档:
(强调我的)
Have a look at this description about how to implement a new URL protocol handler (the document describes an LDAP kind-of-URL, but you should be able to generalize from that to your
sftp
scheme).From the document:
(emphasis mine)
我使用 jsch 来处理 sftp 和 ssh。它不会帮助您防止 java.net.URL 出现异常,但会帮助您执行 sftp 操作。
I use jsch to handle sftp and ssh. It won't help you preventing an exception from java.net.URL, but it will help you doing sftp stuff.
根据代码的结构,您可以在将字符串提供给 URL 解析方法之前删除 s,设置一个标志,如果它有效,则检查该标志,如果设置了则将其放回原处。它很丑陋,但它会提供一个解决方法。
Depending on how your code is structured, you could remove the s before you give the string to the URL parsing method, set a flag, and if it validates, check that flag and put it back if it's set. It's ugly, but it'll provide a workaround.