Domanda

Stiamo cercando di utilizzare Apache Commons VFS per accedere qualcosa di più di SFTP. Si afferma di sostenere SFTP , ma stiamo ottenendo un MalformedURLException quando viene avviato. Scavando in giro vedo che apache VFS sta usando java.net.URL . Tuttavia la documentazione mi dice che in realtà non supporta gli URL sftp://.

  

i gestori di protocollo per i seguenti protocolli sono garantiti di esistere con il percorso di ricerca: -

    http, https, ftp, file, and jar
     

i gestori di protocollo per protocolli addizionali possono anche essere disponibili.

Sto usando Java 1.6.0 su Linux. Come posso evitare java.net.URL da gettare un traballante quando vede un URL sftp://? Ho bisogno di continuare a utilizzare la libreria Apache Commons VFS, che utilizza java.net.URL.

È stato utile?

Soluzione

Vedere l'elenco dei che commons-VFS richiede per SFTP al lavoro. Una volta JSch è nel classpath, il tuo eccezione accada più. Dai un'occhiata alla di Apache Wiki per gli esempi di collegamento via SFTP.

Altri suggerimenti

Non ho mai usato VFS prima, ma sembra che avresti bisogno di (almeno) register un SFTP FileProvider sembra che richiede qualcosa di simile a:

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

Non è probabilmente un modo per fare la stessa cosa attraverso sintassi del file di configurazione.

Date un'occhiata a questa descrizione su come implementare un nuovo gestore di protocollo URL (il documento descrive un LDAP tipo-di-URL, ma si dovrebbe essere in grado di generalizzare da quello a vostro schema sftp).

Dal documento:

  

Come si può vedere, l'unica differenza   tra i due esempi è che noi   hanno utilizzato un URL LDAP nella seconda   Astuccio. Tuttavia, per l'esecuzione del protocollo LDAP   campione di per la prima volta sarà necessario registrarsi   il gestore di protocollo LDAP di IAIK-JCE   a dire il quadro java.net URL   dove cercare il LDAP di supporto   classi di IAIK-JCE:

     

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

     

Dopo aver   registrato il protocollo LDAP IAIK   handler, un LdapURLConnection IAIK-JCE   oggetto viene restituito al momento della chiamata   url.openConnection per un URL LDAP.

(sottolineatura mia)

jsch per gestire SFTP e SSH. Non vi aiuterà a prevenire un'eccezione java.net.URL, ma vi aiuterà a fare cose SFTP.

A seconda di come il codice è strutturato, è possibile rimuovere la s prima di dare la stringa per il metodo URL analisi, impostare un flag, e se è valida, controllare che la bandiera e rimetterlo se è impostato. E 'brutto, ma sarà fornire una soluzione alternativa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top