2014-09-04 5 views
1

J'utilise le vfs2 (pas vfs) pour accéder à ftp. Maintenant, j'utilise aussi le protocole smb mais ça ne marche pas. Je reçois toujours l'exception:ClassNotFoundException: org.apache.commons.vfs.provider.FileProvider

ClassNotFoundException: org.apache.commons.vfs.provider.FileProvider 

Mais comme j'utilise vfs2 il est étrange qu'il recherche pour les classes avec commons.vfs.provider et non commons.vfs2.provider - parce que dans la classe existe vfs2.

Est-ce qu'une bibliothèque (pot) me manque?

J'ai en ce moment: commons-vfs2-2.0.jar, commons-vfs2-sandbox-2.0.jar (a dû être ajouté pour trouver le protocole smb), jcifs-1.3.17.jar, commons-net-3.3.jar, commons-collections-3.2.1.jar, commons-logging-1.1.1.jar et peut plus ..

Voici mon StackTrace complet:

org.apache.commons.vfs2.FileSystemException: Could not create a file system manager of class "org.apache.commons.vfs2.impl.StandardFileSystemManager". 
    at org.apache.commons.vfs2.VFS.createManager(VFS.java:99) 
    at org.apache.commons.vfs2.VFS.getManager(VFS.java:50) 
    at com.avintis.framework.service.DbAccessImpl.saveArchiveData(DbAccessImpl.java:1188) 
    at com.avintis.framework.service.DbAccessImpl.saveMessageData(DbAccessImpl.java:905) 
    at com.avintis.framework.service.DbAccessImpl.saveMessage(DbAccessImpl.java:417) 
    at com.avintis.framework.service.ImportTrackingMsgServiceImpl.importFile(ImportTrackingMsgServiceImpl.java:77) 
    at com.avintis.framework.service.ImportTrackingMsgServiceImpl.importFile(ImportTrackingMsgServiceImpl.java:30) 
    at com.avintis.framework.watcher.service.WatcherServiceImpl.addTrackingMessages(WatcherServiceImpl.java:87) 
    at com.avintis.framework.watcher.service.WatcherServiceImpl.watchForFiles(WatcherServiceImpl.java:34) 
    at com.avintis.framework.schedule.WatcherJob.executeInternal(WatcherJob.java:30) 
    at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86) 
    at org.quartz.core.JobRunShell.run(JobRunShell.java:202) 
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:534) 
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/vfs/provider/FileProvider 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2854) 
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1159) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1647) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526) 
    at org.apache.commons.vfs2.impl.StandardFileSystemManager.createInstance(StandardFileSystemManager.java:485) 
    at org.apache.commons.vfs2.impl.StandardFileSystemManager.addProvider(StandardFileSystemManager.java:371) 
    at org.apache.commons.vfs2.impl.StandardFileSystemManager.configure(StandardFileSystemManager.java:270) 
    at org.apache.commons.vfs2.impl.StandardFileSystemManager.configure(StandardFileSystemManager.java:195) 
    at org.apache.commons.vfs2.impl.StandardFileSystemManager.configurePlugins(StandardFileSystemManager.java:154) 
    at org.apache.commons.vfs2.impl.StandardFileSystemManager.init(StandardFileSystemManager.java:126) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.commons.vfs2.VFS.createManager(VFS.java:88) 
    ... 12 more 
Caused by: java.lang.ClassNotFoundException: org.apache.commons.vfs.provider.FileProvider 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526) 
    ... 30 more 

Répondre

2

Dans la première vue, il semble que vous ayez besoin du commons-vfs.jar et non du commons-vfs2-2.0.jar car le nom de pack de commons-vfs2-2.0.jar est org.apache.commons.vfs2.provider.jar. Mais cela peut causer des problèmes avec le mélange des classes vfs et vfs2 et ne pas fonctionner.

Donc, assurez-vous que vous avez ci-dessous des bocaux (uniquement vfs2) chargé:

  • commons-vfs2-2.0.jar
  • commons-vfs2-sandbox 2.0.jar
  • jcifs-1.3.17 .jar
  • Et d'autres depending commons (net, exploitation forestière, ...)

Puis ajoutez également vfs-providers.xml dans votre META-INF pointant vers la bonne classe pour la SmbFileProvider:

<provider class-name="org.apache.commons.vfs2.provider.smb.SmbFileProvider"> 
    <scheme name="smb"/> 
    <if-available class-name="jcifs.smb.SmbFile"/> 
</provider> 
+1

Cela donne à l'exception suivante: 'org.apache.commons.vfs.provider.smb.SmbFileProvider ne peut pas être jeté à org.apache.commons.vfs2.provider. FileProvider'. Quelque part la bibliothèque vfs2 se mélange avec l'ancienne bibliothèque vfs – FiveO

+0

Ensuite, vous avez un mélange de versions, qui ne peuvent pas fonctionner ensemble. – Jens

+0

Mais où? Je n'ai que des bibliothèques vfs2. Comme vous pouvez le voir dans le StackTrace ci-dessus - c'est le chargeur vfs2 qui essaye automatiquement de charger une classe vfs ... – FiveO

Questions connexes