使用线程上下文类加载器从 class 路径读取 WSDL
Reading a WSDL from class path using Thread Context ClassLoader
我正在使用 Web 服务,我已将我的 WSDL 放在 WEB-INF/classes
目录内的 class 路径中。我正在 运行 在 tomcat 服务器中使用以下代码。
第一种方法
static {
URL WSDL_LOC=WSClient.class.getClass().getClassLoader().getResource("Data.wsdl");
System.out.println("Location here is : " + WSDL_LOC);
}
第二种方法
static {
URL WSDL_LOC = Thread.currentThread().getContextClassLoader().getResource("Data.wsdl");
System.out.println("Location here is : " + WSDL_LOC);
}
当我 运行 我的 war 在 tomcat 里面时,第一种方法在控制台上打印 null
,而第二个控制台实际上打印正确。我只是想知道为什么会这样以及这样做的正确方法是什么。
好吧,我的期望是,使用 WSClient 静态引用的第一个引用使用系统类加载器,而使用当前线程的第二个引用命中 tomcat 的 Web 应用程序类加载器。
读这个linkDifference between thread's context class loader and normal classloader
我正在使用 Web 服务,我已将我的 WSDL 放在 WEB-INF/classes
目录内的 class 路径中。我正在 运行 在 tomcat 服务器中使用以下代码。
第一种方法
static {
URL WSDL_LOC=WSClient.class.getClass().getClassLoader().getResource("Data.wsdl");
System.out.println("Location here is : " + WSDL_LOC);
}
第二种方法
static {
URL WSDL_LOC = Thread.currentThread().getContextClassLoader().getResource("Data.wsdl");
System.out.println("Location here is : " + WSDL_LOC);
}
当我 运行 我的 war 在 tomcat 里面时,第一种方法在控制台上打印 null
,而第二个控制台实际上打印正确。我只是想知道为什么会这样以及这样做的正确方法是什么。
好吧,我的期望是,使用 WSClient 静态引用的第一个引用使用系统类加载器,而使用当前线程的第二个引用命中 tomcat 的 Web 应用程序类加载器。
读这个linkDifference between thread's context class loader and normal classloader