Commons VFS и Java.net.URL - добавлена ​​поддержка протокола "sftp://"

Мы пытаемся использовать Apache Commons VFS для доступа к чему-либо через SFTP. Он утверждает, что поддерживает SFTP, однако при его запуске мы получаем исключение MalformedURLException. Копаясь вокруг, я вижу, что Apache VFS использует java.net.URL, Однако документация говорит мне, что это на самом деле не поддерживает sftp:// URL-адрес.

Обработчики протоколов для следующих протоколов гарантированно существуют в пути поиска:

    http, https, ftp, file, and jar

Обработчики протоколов для дополнительных протоколов также могут быть доступны.

Я использую Java 1.6.0 на Linux. Как я могу предотвратить java.net.URL бросать шаткое, когда он видит sftp:// URL? Мне нужно продолжать использовать библиотеку Apache commons VFS, которая использует java.net.URL,

5 ответов

Решение

Смотрите список зависимостей, которые требуются для работы sftp в commons-vfs. Как только JSch находится в пути к классам, ваше исключение больше не происходит. Посмотрите вики Apache для примеров подключения через sftp.

Я никогда не использовал VFS раньше, но похоже, что вам нужно (по крайней мере) зарегистрировать SFTP FileProvider , Похоже, это требует что-то вроде:

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

Вероятно, есть способ сделать то же самое с помощью синтаксиса файла конфигурации.

Посмотрите это описание о том, как реализовать новый обработчик протокола URL (в документе описывается тип URL-адреса LDAP, но вы должны быть в состоянии обобщить это на свой sftp схема).

Из документа:

Как видите, единственное различие между этими двумя примерами состоит в том, что мы использовали URL-адрес LDAP во втором случае. Однако для запуска образца LDAP сначала необходимо зарегистрировать обработчик протокола LDAP IAIK-JCE, чтобы сообщить структуре URL java.net, где искать классы, поддерживающие LDAP IAIK-JCE:

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

После регистрации обработчика протокола LDAP IAIK объект IAIK-JCE LdapURLConnection возвращается при вызове url.openConnection для URL-адреса LDAP.

(акцент мой)

Я использую jsch для обработки sftp и ssh. Это не поможет вам предотвратить исключение из java.net.URL, но поможет вам делать sftp.

В зависимости от того, как структурирован ваш код, вы можете удалить s перед тем, как передать строку в метод анализа URL, установить флаг и, если он проверяется, проверить этот флаг и вернуть его, если он установлен. Это некрасиво, но это обеспечит обходной путь.

Другие вопросы по тегам