开发大量基于XML的Java应用程序,最近我在Ubuntu Linux上遇到了一个有趣的问题。 我的应用程序使用Java插件框架 ,似乎无法将dom4j创build的XML文档转换为Batik的 SVG规范实现。 在控制台上,我知道发生了一个错误: 线程“AWT-EventQueue-0”中的exceptionjava.lang.LinkageError:接口中的加载器约束违规itable初始化:何时parsing方法org.apache.batik.dom.svg.SVGOMDocument.createAttribute(Ljava / lang / String;)Lorg / W3C / DOM /的Attr;” org / apache / batik / dom / svg / SVGOMDocument的类加载器(org / java / plugin / standard / StandardPluginClassLoader的实例),org / w3c / dom / Document在org.apache.batik.dom.svg.SVGDOMImplementation.createDocument(SVGDOMImplementation.java:149)org.dom4j.io.DOMWriter签名中使用的typesorg / w3c / dom / Attr具有不同的Class对象.createDomDocument(DOMWriter.java:361)at org.dom4j.io.DOMWriter.write(DOMWriter.java:138) 我认为这个问题是由JVM的原始类加载器和插件框架部署的类加载器之间的冲突引起的。 据我所知,不可能为框架指定一个类加载器来使用。 有可能破解它,但是我宁愿采取一些不积极的方法来解决这个问题,因为(无论出于何种原因)它只发生在Linux系统上。 你们有没有遇到过这样的问题,并且有什么想法如何解决这个问题,或者至less能够解决问题的核心问题?
我有这样的代码片段: @RunWith(PowerMockRunner.class) @PrepareForTest({Thread.class}) public class AllMeasuresDataTest { @Before public void setUp() throws Exception { } @Test public void testGetMeasures() { AllMeasuresData measure = new AllMeasuresData(); assertEquals(measure.getMeasures(), null); HashMap<String, Measure> map = new HashMap<String, Measure>(); measure.setMeasures(map); assertEquals(measure.getMeasures(), map); measure.setMeasures(null); assertEquals(measure.getMeasures(), null); } @Test public void testAllMeasuresData() throws IOException { ClassLoader loader = PowerMockito.mock(ClassLoader.class); Thread threadMock = […]