我正在Websphere ND 9.0.5.13上使用ApahcePdfbox 2.0.30,该应用程序在Java 8上运行类加载器设置为Parent Last
我的POM文件如下:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
<exclusion>
<artifactId>logback-classic</artifactId>
<groupId>ch.qos.logback</groupId>
</exclusion>
<exclusion>
<artifactId>log4j-to-slf4j</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>${springdoc.version}</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>com.oracle.jdbc</groupId>
<artifactId>ojdbc14</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>net.sf.flexjson</groupId>
<artifactId>flexjson</artifactId>
<version>3.3</version>
</dependency>
<dependency>
<groupId>javax.jws</groupId>
<artifactId>javax.jws-api</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>javax.activation-api</artifactId>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15</artifactId>
<version>1.46</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>com.github.mlaccetti</groupId>
<artifactId>javapns</artifactId>
<version>2.3.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.6</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>xmlgraphics-commons</artifactId>
<version>1.5</version>
</dependency>
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.11.0</version>
</dependency>
<!--
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports-fonts</artifactId>
<version>6.11.0</version>
</dependency>
-->
<dependency>
<groupId>jasperreports-fonts</groupId>
<artifactId>jasperreports-fonts</artifactId>
<version>0.6.11.0</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
<dependency>
<groupId>net.sf.barcode4j</groupId>
<artifactId>barcode4j</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-all</artifactId>
<version>1.11</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>javax.xml</groupId>
<artifactId>jaxrpc-api</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>axis</groupId>
<artifactId>axis</artifactId>
<version>1.3</version>
</dependency>
<dependency>
<groupId>com.ibm.websphere.appserver.api</groupId>
<artifactId>com.ibm.websphere.appserver.api.json</artifactId>
<version>1.0.22</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.7</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<!-- <version>2.0.25</version> -->
<version>2.0.30</version>
</dependency>
<dependency>
<groupId>com.google.gcm</groupId>
<artifactId>gcm-server</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.ibm.filenet</groupId>
<artifactId>filenet-jace</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>com.ibm.filenet</groupId>
<artifactId>filenet-pe</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>com.ibm.filenet</groupId>
<artifactId>filenet-pe-resources</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>com.ibm.filenet</groupId>
<artifactId>filenet-java-api</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>com.ibm.applicationservices</groupId>
<artifactId>application.services</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
</dependency>
</dependencies>
字符串
当尝试获取缓冲图像时,如下所示:
public BufferedImage generateJasperReportPDF(JasperPrint jasperPrint, String fontName, String fontPath)
throws IOException {
JRPdfExporter exporter = new JRPdfExporter();
BufferedImage bimage = null;
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
PDDocument document = null;
try {
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream);
exporter.exportReport();
document = PDDocument.load(outputStream.toByteArray());
PDFRenderer renderer = new PDFRenderer(document);
bimage = renderer.renderImageWithDPI(0, 300, ImageType.RGB);
} catch (Exception e) {
log.error("Exception in generateJasperReportPDF: ", e);
} finally {
if (outputStream != null)
outputStream.close();
if (document != null)
document.close();
}
return bimage;
}
型
当下面的行被执行时,我得到了以下异常:
bimage = renderer.renderImageWithDPI(0, 300, ImageType.RGB);
型
例外情况是:
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
at org.apache.pdfbox.filter.DCTFilter.getNumChannels(DCTFilter.java:387) ~[pdfbox-2.0.30.jar:2.0.30]
at org.apache.pdfbox.filter.DCTFilter.decode(DCTFilter.java:95) ~[pdfbox-2.0.30.jar:2.0.30]
at org.apache.pdfbox.cos.COSInputStream.create(COSInputStream.java:87) ~[pdfbox-2.0.30.jar:2.0.30]
at org.apache.pdfbox.cos.COSStream.createInputStream(COSStream.java:175) ~[pdfbox-2.0.30.jar:2.0.30]
at org.apache.pdfbox.pdmodel.common.PDStream.createInputStream(PDStream.java:243) ~[pdfbox-2.0.30.jar:2.0.30]
at org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject.createInputStream(PDImageXObject.java:901) ~[pdfbox-2.0.30.jar:2.0.30]
at org.apache.pdfbox.pdmodel.graphics.image.SampledImageReader.from8bit(SampledImageReader.java:507) ~[pdfbox-2.0.30.jar:2.0.30]
at org.apache.pdfbox.pdmodel.graphics.image.SampledImageReader.getRGBImage(SampledImageReader.java:226) ~[pdfbox-2.0.30.jar:2.0.30]
at org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject.getImage(PDImageXObject.java:514) ~[pdfbox-2.0.30.jar:2.0.30]
at org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject.getImage(PDImageXObject.java:477) ~[pdfbox-2.0.30.jar:2.0.30]
at org.apache.pdfbox.rendering.PageDrawer.drawImage(PageDrawer.java:1116) ~[pdfbox-2.0.30.jar:2.0.30]
at org.apache.pdfbox.contentstream.operator.graphics.DrawObject.process(DrawObject.java:67) ~[pdfbox-2.0.30.jar:2.0.30]
at org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:958) ~[pdfbox-2.0.30.jar:2.0.30]
at org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:531) ~[pdfbox-2.0.30.jar:2.0.30]
at org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:506) ~[pdfbox-2.0.30.jar:2.0.30]
at org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:150) ~[pdfbox-2.0.30.jar:2.0.30]
at org.apache.pdfbox.rendering.PageDrawer.drawPage(PageDrawer.java:288) ~[pdfbox-2.0.30.jar:2.0.30]
at org.apache.pdfbox.rendering.PDFRenderer.renderImage(PDFRenderer.java:355) ~[pdfbox-2.0.30.jar:2.0.30]
at org.apache.pdfbox.rendering.PDFRenderer.renderImage(PDFRenderer.java:272) ~[pdfbox-2.0.30.jar:2.0.30]
at org.apache.pdfbox.rendering.PDFRenderer.renderImageWithDPI(PDFRenderer.java:258) ~[pdfbox-2.0.30.jar:2.0.30]
型
**UPDATE:**在检查Websphere Class loader viewer时,我发现类IIOMetadata只存在一次
<class>
<name>javax.imageio.metadata.IIOMetadata</name>
<interface>false</interface>
</class>
型
- 类加载器顺序如下:
的数据
2条答案
按热度按时间owfi6suc1#
这个问题几乎可以肯定是在方法签名org/w3c/dom/Node中提到的DOM类的重复可见性。考虑到问题的描述和异常文本中的细节,我相信发生了以下模式:
1.加载依赖项时,使用DCTFilter的类加载器加载它们。ImageIO库没有打包在应用程序中(假设您确认它们只加载一次),并且由系统类加载器找到。DOM类可能打包在应用程序中,因此Node可以在应用程序中找到。
1.当IIOMetadata类被链接并加载其依赖项时,XML类在JDK中本地找到,因此在那里找到Node的第二个示例。
最简单的解决方案是从应用程序中删除XML库- JAXP长期以来一直包含在JDK中,并且基本上没有理由应用程序需要使用此API的自己版本。删除包含DOM类的jar应该可以解决该特定错误。
一个更大的问题可能是为什么你首先要使用parent-last class loader委托。虽然它支持某些应用程序打包设置,但它基本上是导致这样的错误的唯一方法,通常应用程序最好使用服务器的Java EE副本。除非您有特定的技术原因,否则最好的解决方案可能是将类加载器委托切换回默认值。
crcmnpdw2#
我按照Jarid的建议解决了这个问题,删除了以下所有冲突的库: