解析方法“javax/imageio/metadata/IIOMetadata.getAsTree(Ljava/lang/String;)Lorg/w3c/dom/Node时加载约束冲突

iq0todco  于 2024-01-05  发布在  Java
关注(0)|答案(2)|浏览(207)

我正在Websphere ND 9.0.5.13上使用ApahcePdfbox 2.0.30,该应用程序在Java 8上运行类加载器设置为Parent Last
我的POM文件如下:

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter</artifactId>
  5. <exclusions>
  6. <exclusion>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-logging</artifactId>
  9. </exclusion>
  10. <exclusion>
  11. <artifactId>logback-classic</artifactId>
  12. <groupId>ch.qos.logback</groupId>
  13. </exclusion>
  14. <exclusion>
  15. <artifactId>log4j-to-slf4j</artifactId>
  16. <groupId>org.slf4j</groupId>
  17. </exclusion>
  18. </exclusions>
  19. </dependency>
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-starter-log4j2</artifactId>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-starter-security</artifactId>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.springframework.boot</groupId>
  30. <artifactId>spring-boot-starter-web</artifactId>
  31. </dependency>
  32. <dependency>
  33. <groupId>org.springframework.boot</groupId>
  34. <artifactId>spring-boot-starter-data-jpa</artifactId>
  35. </dependency>
  36. <dependency>
  37. <groupId>org.springframework.boot</groupId>
  38. <artifactId>spring-boot-starter-cache</artifactId>
  39. </dependency>
  40. <dependency>
  41. <groupId>org.springframework.boot</groupId>
  42. <artifactId>spring-boot-starter-validation</artifactId>
  43. </dependency>
  44. <dependency>
  45. <groupId>xerces</groupId>
  46. <artifactId>xercesImpl</artifactId>
  47. <version>2.11.0</version>
  48. </dependency>
  49. <dependency>
  50. <groupId>org.springframework.boot</groupId>
  51. <artifactId>spring-boot-starter-data-jdbc</artifactId>
  52. </dependency>
  53. <dependency>
  54. <groupId>org.springdoc</groupId>
  55. <artifactId>springdoc-openapi-ui</artifactId>
  56. <version>${springdoc.version}</version>
  57. </dependency>
  58. <dependency>
  59. <groupId>com.microsoft.sqlserver</groupId>
  60. <artifactId>mssql-jdbc</artifactId>
  61. <scope>runtime</scope>
  62. </dependency>
  63. <dependency>
  64. <groupId>org.springframework.boot</groupId>
  65. <artifactId>spring-boot-devtools</artifactId>
  66. </dependency>
  67. <dependency>
  68. <groupId>com.oracle.jdbc</groupId>
  69. <artifactId>ojdbc14</artifactId>
  70. <version>1.4</version>
  71. </dependency>
  72. <dependency>
  73. <groupId>com.google.code.gson</groupId>
  74. <artifactId>gson</artifactId>
  75. </dependency>
  76. <dependency>
  77. <groupId>org.apache.httpcomponents</groupId>
  78. <artifactId>httpclient</artifactId>
  79. </dependency>
  80. <dependency>
  81. <groupId>net.sf.flexjson</groupId>
  82. <artifactId>flexjson</artifactId>
  83. <version>3.3</version>
  84. </dependency>
  85. <dependency>
  86. <groupId>javax.jws</groupId>
  87. <artifactId>javax.jws-api</artifactId>
  88. <version>1.1</version>
  89. </dependency>
  90. <dependency>
  91. <groupId>org.springframework.boot</groupId>
  92. <artifactId>spring-boot-starter-tomcat</artifactId>
  93. <scope>provided</scope>
  94. </dependency>
  95. <dependency>
  96. <groupId>org.springframework.boot</groupId>
  97. <artifactId>spring-boot-starter-test</artifactId>
  98. <scope>test</scope>
  99. </dependency>
  100. <dependency>
  101. <groupId>javax.activation</groupId>
  102. <artifactId>javax.activation-api</artifactId>
  103. </dependency>
  104. <dependency>
  105. <groupId>com.sun.mail</groupId>
  106. <artifactId>javax.mail</artifactId>
  107. <version>1.6.2</version>
  108. </dependency>
  109. <dependency>
  110. <groupId>org.bouncycastle</groupId>
  111. <artifactId>bcprov-jdk15</artifactId>
  112. <version>1.46</version>
  113. </dependency>
  114. <dependency>
  115. <groupId>commons-io</groupId>
  116. <artifactId>commons-io</artifactId>
  117. <version>2.11.0</version>
  118. </dependency>
  119. <dependency>
  120. <groupId>com.github.mlaccetti</groupId>
  121. <artifactId>javapns</artifactId>
  122. <version>2.3.2</version>
  123. </dependency>
  124. <dependency>
  125. <groupId>com.itextpdf</groupId>
  126. <artifactId>itextpdf</artifactId>
  127. <version>5.5.6</version>
  128. </dependency>
  129. <dependency>
  130. <groupId>org.apache.xmlgraphics</groupId>
  131. <artifactId>xmlgraphics-commons</artifactId>
  132. <version>1.5</version>
  133. </dependency>
  134. <dependency>
  135. <groupId>org.apache.xmlbeans</groupId>
  136. <artifactId>xmlbeans</artifactId>
  137. <version>3.0.1</version>
  138. </dependency>
  139. <dependency>
  140. <groupId>org.apache.poi</groupId>
  141. <artifactId>poi</artifactId>
  142. <version>4.0.0</version>
  143. </dependency>
  144. <dependency>
  145. <groupId>org.apache.poi</groupId>
  146. <artifactId>poi-ooxml-schemas</artifactId>
  147. <version>4.0.0</version>
  148. </dependency>
  149. <dependency>
  150. <groupId>net.sf.jasperreports</groupId>
  151. <artifactId>jasperreports</artifactId>
  152. <version>6.11.0</version>
  153. </dependency>
  154. <!--
  155. <dependency>
  156. <groupId>net.sf.jasperreports</groupId>
  157. <artifactId>jasperreports-fonts</artifactId>
  158. <version>6.11.0</version>
  159. </dependency>
  160. -->
  161. <dependency>
  162. <groupId>jasperreports-fonts</groupId>
  163. <artifactId>jasperreports-fonts</artifactId>
  164. <version>0.6.11.0</version>
  165. </dependency>
  166. <dependency>
  167. <groupId>com.lowagie</groupId>
  168. <artifactId>itext</artifactId>
  169. <version>2.1.7</version>
  170. </dependency>
  171. <dependency>
  172. <groupId>net.sf.barcode4j</groupId>
  173. <artifactId>barcode4j</artifactId>
  174. <version>2.1</version>
  175. </dependency>
  176. <dependency>
  177. <groupId>org.apache.xmlgraphics</groupId>
  178. <artifactId>batik-all</artifactId>
  179. <version>1.11</version>
  180. <type>pom</type>
  181. </dependency>
  182. <dependency>
  183. <groupId>com.google.zxing</groupId>
  184. <artifactId>core</artifactId>
  185. <version>2.2</version>
  186. </dependency>
  187. <dependency>
  188. <groupId>com.google.zxing</groupId>
  189. <artifactId>javase</artifactId>
  190. <version>2.2</version>
  191. </dependency>
  192. <dependency>
  193. <groupId>javax.xml</groupId>
  194. <artifactId>jaxrpc-api</artifactId>
  195. <version>1.1</version>
  196. </dependency>
  197. <dependency>
  198. <groupId>axis</groupId>
  199. <artifactId>axis</artifactId>
  200. <version>1.3</version>
  201. </dependency>
  202. <dependency>
  203. <groupId>com.ibm.websphere.appserver.api</groupId>
  204. <artifactId>com.ibm.websphere.appserver.api.json</artifactId>
  205. <version>1.0.22</version>
  206. </dependency>
  207. <dependency>
  208. <groupId>org.codehaus.jackson</groupId>
  209. <artifactId>jackson-core-asl</artifactId>
  210. <version>1.9.13</version>
  211. </dependency>
  212. <dependency>
  213. <groupId>org.codehaus.jackson</groupId>
  214. <artifactId>jackson-mapper-asl</artifactId>
  215. <version>1.9.13</version>
  216. </dependency>
  217. <dependency>
  218. <groupId>org.apache.poi</groupId>
  219. <artifactId>poi-ooxml</artifactId>
  220. <version>4.0.0</version>
  221. </dependency>
  222. <dependency>
  223. <groupId>com.itextpdf.tool</groupId>
  224. <artifactId>xmlworker</artifactId>
  225. <version>5.5.7</version>
  226. </dependency>
  227. <dependency>
  228. <groupId>commons-lang</groupId>
  229. <artifactId>commons-lang</artifactId>
  230. <version>2.6</version>
  231. </dependency>
  232. <dependency>
  233. <groupId>org.apache.pdfbox</groupId>
  234. <artifactId>pdfbox</artifactId>
  235. <!-- <version>2.0.25</version> -->
  236. <version>2.0.30</version>
  237. </dependency>
  238. <dependency>
  239. <groupId>com.google.gcm</groupId>
  240. <artifactId>gcm-server</artifactId>
  241. <version>1.0.0</version>
  242. </dependency>
  243. <dependency>
  244. <groupId>org.quartz-scheduler</groupId>
  245. <artifactId>quartz</artifactId>
  246. </dependency>
  247. <dependency>
  248. <groupId>org.projectlombok</groupId>
  249. <artifactId>lombok</artifactId>
  250. <version>1.18.30</version>
  251. <scope>provided</scope>
  252. </dependency>
  253. <dependency>
  254. <groupId>com.ibm.filenet</groupId>
  255. <artifactId>filenet-jace</artifactId>
  256. <version>1.0</version>
  257. </dependency>
  258. <dependency>
  259. <groupId>com.ibm.filenet</groupId>
  260. <artifactId>filenet-pe</artifactId>
  261. <version>1.0</version>
  262. </dependency>
  263. <dependency>
  264. <groupId>com.ibm.filenet</groupId>
  265. <artifactId>filenet-pe-resources</artifactId>
  266. <version>1.0</version>
  267. </dependency>
  268. <dependency>
  269. <groupId>com.ibm.filenet</groupId>
  270. <artifactId>filenet-java-api</artifactId>
  271. <version>1.0</version>
  272. </dependency>
  273. <dependency>
  274. <groupId>com.ibm.applicationservices</groupId>
  275. <artifactId>application.services</artifactId>
  276. <version>1.0</version>
  277. </dependency>
  278. <dependency>
  279. <groupId>org.slf4j</groupId>
  280. <artifactId>log4j-over-slf4j</artifactId>
  281. </dependency>
  282. </dependencies>

字符串
当尝试获取缓冲图像时,如下所示:

  1. public BufferedImage generateJasperReportPDF(JasperPrint jasperPrint, String fontName, String fontPath)
  2. throws IOException {
  3. JRPdfExporter exporter = new JRPdfExporter();
  4. BufferedImage bimage = null;
  5. ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  6. PDDocument document = null;
  7. try {
  8. exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
  9. exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream);
  10. exporter.exportReport();
  11. document = PDDocument.load(outputStream.toByteArray());
  12. PDFRenderer renderer = new PDFRenderer(document);
  13. bimage = renderer.renderImageWithDPI(0, 300, ImageType.RGB);
  14. } catch (Exception e) {
  15. log.error("Exception in generateJasperReportPDF: ", e);
  16. } finally {
  17. if (outputStream != null)
  18. outputStream.close();
  19. if (document != null)
  20. document.close();
  21. }
  22. return bimage;
  23. }


当下面的行被执行时,我得到了以下异常:

  1. bimage = renderer.renderImageWithDPI(0, 300, ImageType.RGB);


例外情况是:

  1. Caused by: java.lang.LinkageError: loading constraint violation when resolving method "javax/imageio/metadata/IIOMetadata.getAsTree(Ljava/lang/String;)Lorg/w3c/dom/Node;" : loader "com/ibm/ws/classloader/CompoundClassLoader@a24fe2b5" of class "org/apache/pdfbox/filter/DCTFilter" and loader "com/ibm/oti/vm/BootstrapClassLoader@9e7c1335" of class "javax/imageio/metadata/IIOMetadata" have different types for the method signature
  2. at org.apache.pdfbox.filter.DCTFilter.getNumChannels(DCTFilter.java:387) ~[pdfbox-2.0.30.jar:2.0.30]
  3. at org.apache.pdfbox.filter.DCTFilter.decode(DCTFilter.java:95) ~[pdfbox-2.0.30.jar:2.0.30]
  4. at org.apache.pdfbox.cos.COSInputStream.create(COSInputStream.java:87) ~[pdfbox-2.0.30.jar:2.0.30]
  5. at org.apache.pdfbox.cos.COSStream.createInputStream(COSStream.java:175) ~[pdfbox-2.0.30.jar:2.0.30]
  6. at org.apache.pdfbox.pdmodel.common.PDStream.createInputStream(PDStream.java:243) ~[pdfbox-2.0.30.jar:2.0.30]
  7. at org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject.createInputStream(PDImageXObject.java:901) ~[pdfbox-2.0.30.jar:2.0.30]
  8. at org.apache.pdfbox.pdmodel.graphics.image.SampledImageReader.from8bit(SampledImageReader.java:507) ~[pdfbox-2.0.30.jar:2.0.30]
  9. at org.apache.pdfbox.pdmodel.graphics.image.SampledImageReader.getRGBImage(SampledImageReader.java:226) ~[pdfbox-2.0.30.jar:2.0.30]
  10. at org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject.getImage(PDImageXObject.java:514) ~[pdfbox-2.0.30.jar:2.0.30]
  11. at org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject.getImage(PDImageXObject.java:477) ~[pdfbox-2.0.30.jar:2.0.30]
  12. at org.apache.pdfbox.rendering.PageDrawer.drawImage(PageDrawer.java:1116) ~[pdfbox-2.0.30.jar:2.0.30]
  13. at org.apache.pdfbox.contentstream.operator.graphics.DrawObject.process(DrawObject.java:67) ~[pdfbox-2.0.30.jar:2.0.30]
  14. at org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:958) ~[pdfbox-2.0.30.jar:2.0.30]
  15. at org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:531) ~[pdfbox-2.0.30.jar:2.0.30]
  16. at org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:506) ~[pdfbox-2.0.30.jar:2.0.30]
  17. at org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:150) ~[pdfbox-2.0.30.jar:2.0.30]
  18. at org.apache.pdfbox.rendering.PageDrawer.drawPage(PageDrawer.java:288) ~[pdfbox-2.0.30.jar:2.0.30]
  19. at org.apache.pdfbox.rendering.PDFRenderer.renderImage(PDFRenderer.java:355) ~[pdfbox-2.0.30.jar:2.0.30]
  20. at org.apache.pdfbox.rendering.PDFRenderer.renderImage(PDFRenderer.java:272) ~[pdfbox-2.0.30.jar:2.0.30]
  21. at org.apache.pdfbox.rendering.PDFRenderer.renderImageWithDPI(PDFRenderer.java:258) ~[pdfbox-2.0.30.jar:2.0.30]

**UPDATE:**在检查Websphere Class loader viewer时,我发现类IIOMetadata只存在一次

  1. <class>
  2. <name>javax.imageio.metadata.IIOMetadata</name>
  3. <interface>false</interface>
  4. </class>

  • 类加载器顺序如下:


的数据

owfi6suc

owfi6suc1#

这个问题几乎可以肯定是在方法签名org/w3c/dom/Node中提到的DOM类的重复可见性。考虑到问题的描述和异常文本中的细节,我相信发生了以下模式:

  1. DCTFilter类是从最后一个父类的应用程序类加载器加载的。它引用IIOMetadata,并可能调用该类的getAsTree()方法,这意味着它还必须引用Node。
    1.加载依赖项时,使用DCTFilter的类加载器加载它们。ImageIO库没有打包在应用程序中(假设您确认它们只加载一次),并且由系统类加载器找到。DOM类可能打包在应用程序中,因此Node可以在应用程序中找到。
    1.当IIOMetadata类被链接并加载其依赖项时,XML类在JDK中本地找到,因此在那里找到Node的第二个示例。
  2. DCTFilter现在可以看到org/w3c/dom/Node的两个不同版本-直接看到应用程序中的副本,间接通过IIOMetadata看到JDK中的副本。这是非法的,并且会抛出LinkageError。
    最简单的解决方案是从应用程序中删除XML库- JAXP长期以来一直包含在JDK中,并且基本上没有理由应用程序需要使用此API的自己版本。删除包含DOM类的jar应该可以解决该特定错误。
    一个更大的问题可能是为什么你首先要使用parent-last class loader委托。虽然它支持某些应用程序打包设置,但它基本上是导致这样的错误的唯一方法,通常应用程序最好使用服务器的Java EE副本。除非您有特定的技术原因,否则最好的解决方案可能是将类加载器委托切换回默认值。
crcmnpdw

crcmnpdw2#

我按照Jarid的建议解决了这个问题,删除了以下所有冲突的库:

  • xml apis
  • xercesImpl
  • axis-jaxrpc

相关问题