2014-10-20 3 views
1

Я пытаюсь загрузить класс динамически, используя метод loadClass для java ClassLoader в среде IDE NetBeans. Когда я запускаю следующую автономную программу она будет выполнена правильно и печатает вывод, как ожидалось:ClassNotFoundException - при динамическом загрузке класса в веб-приложении с использованием ClassLoader

public class StandaloneClass { 

    public static void main(String[] args) { 
     try { 

      String directory = "C:\\Workspace\\ProjectMeteor\\src\\java\\com\\meteor\\loader"; 

      File file = new File(directory); 
      URL url = file.toURI().toURL(); 
      URL[] urls = new URL[]{url}; 

      ClassLoader cl = new URLClassLoader(urls); 

      Class cls = cl.loadClass("com.meteor.loader.ClassToBeLoaded"); 
      Object o = cls.newInstance(); 

      System.out.println("Class Loaded: " + o.getClass().toString()); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

} 

Выход: - Класс Loaded: класс com.meteor.loader.ClassToBeLoaded

Но когда я запустите тот же кусок кода (в веб-приложении) его бросание ClassNotFoundException.

@Path("/test") 
public class DynamicWebClass { 

    @GET 
    @Path("/getFileExplorerNodes") 
    @Produces(MediaType.TEXT_PLAIN) 
    public String getFileExplorerNodes() { 
     try { 

      String directory = "C:\\Workspace\\ProjectMeteor\\src\\java\\com\\meteor\\loader"; 

      File file = new File(directory); 
      URL url = file.toURI().toURL(); 
      URL[] urls = new URL[]{url}; 

      ClassLoader cl = new URLClassLoader(urls); 

      Class cls = cl.loadClass("com.meteor.loader.ClassToBeLoaded"); 
      Object o = cls.newInstance(); 

      return o.getClass().toString(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
      return "error"; 
     } 
    } 

} 

Выход: -
java.lang.ClassNotFoundException: com.meteor.loader.ClassToBeLoaded

Почему это бросает исключение в веб-приложения, когда он работает нормально в отдельную программу? Как устранить эту проблему и запустить ее правильно в веб-приложении?

+1

Не могли бы вы проверить, что класс упакован в войну – dasrohith

+0

Да. Класс есть на войне. И война присутствует в папке dist проекта. –

+2

Но вы указываете на другой каталог в C: /. Укажите относительный URL-адрес – dasrohith

ответ

1

Похож на проблему с URL-адресом, предоставленным загрузчику класса. Просьба указать родственника URL

+0

Большое спасибо за информацию. Особенно для указания моего URL на войну. Кроме того, мы можем заменить URLClassLoader на стандартный. ** ClassLoader cl = DynamicWebClass.class.getClassLoader(); ** –

+0

Добро пожаловать ... Приятно знать, что он решил вашу проблему – dasrohith