Java 使用线程上下文类加载器从类路径读取WSDL
我使用web服务,我将WSDL放在Java 使用线程上下文类加载器从类路径读取WSDL,java,multithreading,web-services,soap,wsdl,Java,Multithreading,Web Services,Soap,Wsdl,我使用web服务,我将WSDL放在web-INF/classes目录中的类路径中。我正在tomcat服务器中运行以下代码 第一种方法 static { URL WSDL_LOC=WSClient.class.getClass().getClassLoader().getResource("Data.wsdl"); System.out.println("Location here is : " + WSDL_LOC); } 第二种方法 static { URL WS
web-INF/classes
目录中的类路径中。我正在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);
}
当我在TomcatTy内部运行war时,第一种方法在控制台上打印一个
null
,而第二种控制台实际上是正确打印的。我只是想知道为什么会这样,以及正确的方法是什么。我的期望是,使用WSClient静态引用的第一个引用使用系统类加载器,而使用当前线程的第二个引用使用tomcat的Web应用程序类加载器
阅读此链接我明白了,我唯一不确定的是它为什么会回来null@station因为SystemClassLoader比Webapplication classloader高一级,对WAR文件内容没有可见性。@station有一个classloader树的图表,而不是公认的答案。非常好。