从一个包含在/META-INF中的JAX-WS SPI文本文件和指向它的类的JAR文件开始。将其放入类路径中。将当前线程的contextClassLoader设置为null。
从JDK 1.6中的JAX-WS API调用Service类,并开始逐步执行它。在没有上下文类加载器的情况下,此代码将调用Class的静态方法来查找内容。
它将成功找到SPI文件。但是它不会找到它所命名的.class文件。
如果您真的想自己尝试,请获取Apache CXF 2.2.10,将其放入类路径中,并将上下文类加载器设置为null。
这不是毫无意义的折磨练习:事实证明,当Open Office调用Java扩展('UNO')时,它会将上下文类加载器设置为null。需要进行一些重要的考古工作才能弄清楚这一点。这让我想知道,是否有JDK bug可以解释不一致的结果,或者我没有理解的某些指定行为?
从JDK 1.6中的JAX-WS API调用Service类,并开始逐步执行它。在没有上下文类加载器的情况下,此代码将调用Class的静态方法来查找内容。
它将成功找到SPI文件。但是它不会找到它所命名的.class文件。
如果您真的想自己尝试,请获取Apache CXF 2.2.10,将其放入类路径中,并将上下文类加载器设置为null。
这不是毫无意义的折磨练习:事实证明,当Open Office调用Java扩展('UNO')时,它会将上下文类加载器设置为null。需要进行一些重要的考古工作才能弄清楚这一点。这让我想知道,是否有JDK bug可以解释不一致的结果,或者我没有理解的某些指定行为?
grep -R Class.forName . | grep FactoryFinder
大致上平均分配了选择哪个(你难道不喜欢克隆和拥有代码吗?)。当然,如果相同的代码不是从系统、扩展或引导加载器中加载,则甚至无法找到自己。 - Tom Hawtin - tackline