如何让 Apache POI 5.2.0 在 Jira 9.11.2 中工作

问题描述 投票:0回答:1

如何让 Apache POI 5.2.0 在 Jira 9.11.2 中工作?

pom.xml:

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.17.1</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.17.1</version> <!-- Replace with the actual version you are using -->
    </dependency>
    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>SparseBitSet</artifactId>
        <version>1.2</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>5.2.0</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
       <groupId>org.apache.poi</groupId>
       <artifactId>poi-ooxml</artifactId>
       <version>5.2.0</version>
       <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml-lite</artifactId>
        <version>5.2.0</version>
    </dependency>
    <dependency>
       <groupId>org.apache.xmlbeans</groupId>
       <artifactId>xmlbeans</artifactId>
       <version>5.0.3</version>
       <scope>compile</scope>
    </dependency>
    <dependency> 
       <groupId>xerces</groupId> 
       <artifactId>xercesImpl</artifactId> 
       <version>2.12.2</version> 
       <scope>compile</scope> 
    </dependency> 

以下是错误消息:

    2023-11-24 06:17:54,540+0000 http-nio-8080-exec-12 url: /internal-error ERROR      [c.a.j.web.servlet.InternalServerErrorServlet] {errorId=03676b16-0b98-4024-9c29-e3519eb3dff2, interpretedMsg=, cause=java.lang.ExceptionInInitializerError, stacktrace=java.lang.ExceptionInInitializerError
    at org.apache.poi.ooxml.util.DocumentHelper.newDocumentBuilder(DocumentHelper.java:47) [?:?]
    at org.apache.poi.ooxml.util.DocumentHelper.<clinit>(DocumentHelper.java:36) [?:?]
    at org.apache.poi.openxml4j.opc.internal.ContentTypeManager.save(ContentTypeManager.java:429) [?:?]
    at org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:563) [?:?]
    at org.apache.poi.openxml4j.opc.OPCPackage.save(OPCPackage.java:1490) [?:?]
    at org.apache.poi.ooxml.POIXMLDocument.write(POIXMLDocument.java:227) [?:?]
    at org.apache.poi.xssf.streaming.SXSSFWorkbook.write(SXSSFWorkbook.java:968) [?:?]
    at fi.i4ware.plugin.timesheet.ExportMySelectedIssueWithWorklogCommentsExcelServlet.doGet(ExportMySelectedIssueWithWorklogCommentsExcelServlet.java:494) [?:?]

Caused by: java.lang.ClassCastException: class org.apache.xerces.jaxp.DocumentBuilderFactoryImpl cannot be cast to class javax.xml.parsers.DocumentBuilderFactory (org.apache.xerces.jaxp.DocumentBuilderFactoryImpl is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @3faf2e7d; javax.xml.parsers.DocumentBuilderFactory is in unnamed module of loader org.apache.felix.framework.BundleWiringImpl$BundleClassLoader @40ca2838)
    at javax.xml.parsers.DocumentBuilderFactory.newInstance(Unknown Source) [?:?]
    at org.apache.poi.util.XMLHelper.getDocumentBuilderFactory(XMLHelper.java:107) [?:?]
    at org.apache.poi.util.XMLHelper.<clinit>(XMLHelper.java:85) [?:?]
    ... 282 more
, referer=https://jira.i4ware.fi/secure/TimesheetForJiraDashboardAction.jspa, servletErrorMessage=}

第 494 行如下:

wb.write(out);

pw.print( out );

出去就在这里

    PrintWriter pw = new PrintWriter( new OutputStreamWriter( resp.getOutputStream() ) );
    OutputStream out = resp.getOutputStream();

我从 ChatGPT 获得信息,这个问题必须像下面这样修复,但我不知道在 pom.xml 中写更多内容:

<dependency>
    <groupId>com.atlassian.jira</groupId>
    <artifactId>jira-api</artifactId>
    <version>${jira.version}</version>
</dependency>

以及如何在实现此功能后获得构建成功以及还需要什么:

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.4</version>
            <configuration>
                <relocations>
                    <relocation>
                        <pattern>org.apache.poi</pattern>
                        <shadedPattern>fi.i4ware.plugin.timesheet.tfj.org.apache.poi</shadedPattern>
                    </relocation>
                    <!-- Add relocations for other conflicting packages -->
                </relocations>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

不是

添加一行时

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

然后我收到错误:

 2023-11-24 15:00:14,914+0000 http-nio-8080-exec-6 url: /internal-error ERROR      [c.a.j.web.servlet.InternalServerErrorServlet] {errorId=ad959c71-6ae3-4c80-8929-13c11e7856d7, interpretedMsg=, cause=java.lang.ClassCastException: class org.apache.xerces.jaxp.DocumentBuilderFactoryImpl cannot be cast to class javax.xml.parsers.DocumentBuilderFactory (org.apache.xerces.jaxp.DocumentBuilderFactoryImpl is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @1643d68f; javax.xml.parsers.DocumentBuilderFactory is in unnamed module of loader org.apache.felix.framework.BundleWiringImpl$BundleClassLoader @70819ac9), stacktrace=java.lang.ClassCastException: class org.apache.xerces.jaxp.DocumentBuilderFactoryImpl cannot be cast to class javax.xml.parsers.DocumentBuilderFactory (org.apache.xerces.jaxp.DocumentBuilderFactoryImpl is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @1643d68f; javax.xml.parsers.DocumentBuilderFactory is in unnamed module of loader org.apache.felix.framework.BundleWiringImpl$BundleClassLoader @70819ac9)
    at javax.xml.parsers.DocumentBuilderFactory.newInstance(Unknown Source) [?:?]
    at fi.i4ware.plugin.timesheet.ExportMySelectedIssueWithWorklogCommentsExcelServlet.doGet(ExportMySelectedIssueWithWorklogCommentsExcelServlet.java:173) [?:?]
jira
1个回答
0
投票

这看起来像是库之间的依赖冲突。 修复步骤:

  1. 安装maven maven-dependency-plugin
  2. 运行命令 mvn dependency:tree -Dverbose
  3. 找到冲突。
  4. 排除冲突的库,这是示例
<dependency>
        <groupId>com.baeldung</groupId>
        <artifactId>project-a</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <exclusions>
            <exclusion>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

这篇文章也可以提供帮助。

处理 Java/Maven 中的“Xerces 地狱”?

© www.soinside.com 2019 - 2024. All rights reserved.