我在eclipse插件中使用xalan时遇到问题。
当我尝试通过以下方式创建工厂实例时:

TransformerFactory tFactory = TransformerFactory.newInstance("org.apache.xalan.processor.TransformerFactoryImpl", null);


我得到错误:

javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found
...


我在插件类路径中有以下库:xml-apis.jar,xercesImpl.jar,serializer.jar,xalan.jar

我什至无法通过以下方式创建类实例:

c = Class.forName("org.apache.xalan.processor.TransformerFactoryImpl");
Object o = c.newInstance();


它返回ClassNotFoundException

但是我可以从同一个jar中创建其他类的实例,并且可以在eclipse之外运行相同的代码而不会出现问题。

任何的想法?

编辑:TransformerFactory实例化类(例如“ class1”)是在插件类路径中添加的外部库的一部分,而xalan.jar也在插件类路径中。如果我将此“ class1”移动到插件中,它将找到提供程序并正常工作。

最佳答案

虽然我曾经见过这个问题,但是我不太确定如何解决。

如果您使用的是JDK 1.5或更高版本,请尝试删除xml-apis.jar。 Java 1.4需要它来支持XML。

更新1

好。从您的问题中我推断出您正在编写eclipse插件。如果是,那么您是否使用plugin.xml->Runtime->classpath添加了上述罐子?如果没有尝试这样做。 Eclipse插件仅考虑其runtime-> classpath条目

更新2

在我看来,它仍然是类路径解析问题。虽然,很难说为什么会发生。您也可以尝试通过更改plugin.xml->Runtime->classpath中包含的jar的顺序进行检查。

希望这会有所帮助。

PS:由于您正在从事eclipse插件开发,因此建议您阅读本文Eclipse - a tale of two VMs and many classloaders

09-30 15:42
查看更多