2015-01-05 4 views
-1

У меня была та же проблема: How do I use JCIFS with apache VFS to access an SMB URL?Как использовать JCIFS с Apache VFS для доступа к URL-адресу SMB - часть 2?

... после включения Викисклада VFS-песочница-2,1-SNAPSHOT.jar в пути к классам теперь я получаю это исключение:

Exception in thread "main" org.apache.commons.vfs2.FileSystemException: Could not determine the type of file "smb://10.10.18.210/CIFS/123/asd". 
    at org.apache.commons.vfs2.provider.AbstractFileObject.attach(AbstractFileObject.java:1522) 
    at org.apache.commons.vfs2.provider.AbstractFileObject.getType(AbstractFileObject.java:489) 
    at org.apache.commons.vfs2.provider.AbstractFileObject.exists(AbstractFileObject.java:477) 
    at VFSTest.main(VFSTest.java:19) 
Caused by: jcifs.smb.SmbAuthException: Logon failure: account currently disabled. 
    at jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:549) 
    at jcifs.smb.SmbTransport.send(SmbTransport.java:667) 
    at jcifs.smb.SmbSession.sessionSetup(SmbSession.java:390) 
    at jcifs.smb.SmbSession.send(SmbSession.java:218) 
    at jcifs.smb.SmbTree.treeConnect(SmbTree.java:176) 
    at jcifs.smb.SmbFile.doConnect(SmbFile.java:911) 
    at jcifs.smb.SmbFile.connect(SmbFile.java:954) 
    at jcifs.smb.SmbFile.connect0(SmbFile.java:880) 
    at jcifs.smb.SmbFile.queryPath(SmbFile.java:1335) 
    at jcifs.smb.SmbFile.exists(SmbFile.java:1417) 
    at jcifs.smb.SmbFile.isDirectory(SmbFile.java:1490) 
    at org.apache.commons.vfs2.provider.smb.SmbFileObject.createSmbFile(SmbFileObject.java:118) 
    at org.apache.commons.vfs2.provider.smb.SmbFileObject.doAttach(SmbFileObject.java:70) 
    at org.apache.commons.vfs2.provider.AbstractFileObject.attach(AbstractFileObject.java:1505) 
    ... 3 more 

Пожалуйста совет.

+0

Ошибка кажется довольно самообучающейся. Какой у Вас вопрос? – mthmulders

+0

Я успешно записываю файлы, используя чистый JCIFS API. Просто я не могу делать это по-обыкновенным. Проблема в том, что vfs api "не смог определить тип файла smb: // ...". Зачем? – mdzh

+0

Почему? Эта ошибка (цитата): «Caused by: jcifs.smb.SmbAuthException: сбой входа в систему: отключена учетная запись.». – mthmulders

ответ

4

Я думаю, что я знаю, в чем ваша проблема, поставщики песочницы не зарегистрированы автоматически в версии 2.0. А также вам нужно использовать настроенные свойства проверки подлинности в вызове разрешения (см. Измененный источник ниже).

Обычно я не использую диспетчер файловой системы по умолчанию, но динамически регистрирую мои провайдеры, но если вы хотите использовать автоматическое обнаружение, вам нужно добавить vfs-providers.xml в JBL для песочницы.

Это, как вы построить полный рабочий JAR с 2,0:

> git clone https://github.com/apache/commons-vfs.git -b commons-vfs2-project-2.0 vfs2.0 
> cd vfs2.0 
> notepad sandbox\pom.xml 
> notepad sandbox\src\test\java\org\apache\commons\vfs2\provider\smb\test\StandaloneMain.java 
> mvn -Pinclude-sandbox -DskipTests=true clean package dependency:tree 

При редактировании песочнице/pom.xml, вы должны убедиться, чтобы удалить -SANDBOX из < версии> и < родителей> < версия> теги. Тогда вам нужно добавить:

<resource> 
    <directory>src/main/resources</directory> 
    </resource> 

к уже существующим < ресурсам> тег (сразу после первой ЛИЦЕНЗИИ + УВЕДОМЛЕНИЯ включает линию 88)

Это тестовый код используется:

package org.apache.commons.vfs2.provider.smb.test; 

import org.apache.commons.vfs2.FileObject; 
import org.apache.commons.vfs2.FileSystemException; 
import org.apache.commons.vfs2.FileSystemManager; 
import org.apache.commons.vfs2.FileSystemOptions; 
import org.apache.commons.vfs2.VFS; 
import org.apache.commons.vfs2.auth.StaticUserAuthenticator; 
import org.apache.commons.vfs2.impl.DefaultFileSystemConfigBuilder; 


public class StandaloneMain 
{ 
    public static void main(String[] args) throws FileSystemException { 
     //jcifs.Config.registerSmbURLHandler(); 
     StaticUserAuthenticator auth = new StaticUserAuthenticator("DOMAIN", "eckenfel", "SECRET"); 
     FileSystemOptions opts = new FileSystemOptions(); 
     DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth); 
     FileSystemManager fs = VFS.getManager(); 
     if (!fs.hasProvider("smb")) throw new RuntimeException("Provide missing"); 
     System.out.println("Connecting " + args[0] + " with " + opts); 
     FileObject smbFile = fs.resolveFile(args[0], opts); // added opts! 
     System.out.println(smbFile.exists() + " " + smbFile.getContent().getLastModifiedTime()); 
    } 
} 

И это является исполнением:

> set REP=C:\Users\USERNAME\.m2\repository 
> java -cp sandbox\target\commons-vfs2-sandbox-2.0.jar;^ 
      core\target\commons-vfs2-2.0.jar;^ 
      %REP%\commons-logging\commons-logging\1.1.1\commons-logging-1.1.1.jar;^ 
      %REP%\jcifs\jcifs\0.8.3\jcifs-0.8.3.jar;^ 
      sandbox\target\test-classes 
     org.apache.commons.vfs2.provider.smb.test.StandaloneMain smb://HOST/Users 
Jan 05, 2015 2:40:19 PM org.apache.commons.vfs2.VfsLog info 
INFORMATION: Using "C:\Users\USERNAME\AppData\Local\Temp\vfs_cache" as temporary files store. 
Connecting smb://eckenfels02/Users with [email protected] 
true 0 
+0

Отлично! Большое спасибо за подробный ответ. Он работает по книге! На самом деле, оказывается, что проблема была в моем исходном коде - я пропустил добавить опционы: FileObject smbFile = fs.resolveFile (args [0], opts); // добавлена ​​опция! – mdzh

+0

Я только что решил исправить недостающий vfs-провайдер.xml (VFS-552) в магистраль, он будет в 2.1 – eckes

 Смежные вопросы

  • Нет связанных вопросов^_^