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, установить флаг и, если он проверяется, проверить этот флаг и вернуть его, если он установлен. Это некрасиво, но это обеспечит обходной путь.