Commons VFS 和 Java.net.URL - 添加对“sftp://”的支持协议

发布于 2024-08-05 05:29:36 字数 817 浏览 9 评论 0原文

我们正在尝试使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

淡写薰衣草的香 2024-08-12 05:29:36

请参阅 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.

耳钉梦 2024-08-12 05:29:36

我以前从未使用过 VFS,但看起来你需要(至少)注册 SFTP FileProvider 看起来像这样需要类似的东西:

DefaultFileSystemManager fsm = ... /* Create and configure your FSM. */
fsm.addProvider("sftp", new SftpFileProvider());

可能有一种方法可以通过配置文件语法来执行相同的操作。< /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:

DefaultFileSystemManager fsm = ... /* Create and configure your FSM. */
fsm.addProvider("sftp", new SftpFileProvider());

There is probably a way to do the same thing through configuration file syntax.

红焚 2024-08-12 05:29:36

查看此描述关于如何实现新的 URL 协议处理程序(该文档描述了一种 LDAP 类型的 URL,但是您应该能够将其推广到您的 sftp 方案)。

来自文档:

正如你所看到的,唯一的区别
这两个例子之间是我们
在第二个中使用了 LDAP URL
案件。但是,对于运行 LDAP
示例您首先必须注册
IAIK-JCE 的 LDAP 协议处理程序
告诉 java.net URL 框架
在哪里寻找 LDAP 支持
IAIK-JCE 类别:

System.getProperties().put("java.protocol.handler.pkgs",
“iaik.x509.net”);

有了之后
注册IAIK LDAP协议
处理程序,一个 IAIK-JCE LdapURLConnection
调用时返回对象
LDAP URL 的 url.openConnection。

(强调我的)

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:

As you can see, the only difference
between the two examples is that we
have used an LDAP URL in the second
case. However, for running the LDAP
sample you first will have to register
the LDAP protocol handler of IAIK-JCE
to tell the java.net URL framework
where to look for the LDAP supporting
classes
of IAIK-JCE:

System.getProperties().put("java.protocol.handler.pkgs",
"iaik.x509.net");

After having
registered the IAIK LDAP protocol
handler, an IAIK-JCE LdapURLConnection
object is returned when calling
url.openConnection for an LDAP URL.

(emphasis mine)

我的黑色迷你裙 2024-08-12 05:29:36

我使用 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.

浮光之海 2024-08-12 05:29:36

根据代码的结构,您可以在将字符串提供给 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文