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 отбрасывания шаткого, когда он видит URL sftp://? Мне нужно продолжать использовать библиотеку VFS для головоломок Apache, которая использует java.net.URL.

Ответы

Ответ 2

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

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

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

Ответ 3

Посмотрите это описание о том, как реализовать новый обработчик протокола 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");

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

(акцент мой)

Ответ 4

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

Ответ 5

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