Я получаю сообщение об ошибке :: org.apache.poi.openxml4j.exceptions.InvalidFormatException не может быть решена - PullRequest
0 голосов
/ 22 февраля 2012

Я получаю сообщение об ошибке :: org.apache.poi.openxml4j.exceptions.InvalidFormatException не может быть разрешено.

Вот код моих классов Java ... Что я хочу, чтобы сгенерировать отчет в Excel ... Скажите, пожалуйста, как указать путь в методе transformer.transformXLS (templateFileName, beans, destFileName). Должен ли я скопировать файлы Excel где-то внутри моего веб-проекта?

Я принимаю входные данные как идентификатор от пользователя :: using takeinput.jsp, затем значение идентификатора будет отправлено в ReportServlet, а затем в ReportGen ... Где я пишу код jdbc для получения значений из базы данных. и создание листа Excel. пожалуйста помоги ??

takeinput.jsp

<body>

<form id="reportformid" name="reportform" action="ReportServlet" method="get">
Enter the ID of the person :: <input id="idid" type="text" name="id"/><br><br><br>

<button id="button" name="reportbutton" type="submit"></button>
</form>

</body>

web.xml ::

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <servlet>
    <servlet-name>Name</servlet-name>
    <servlet-class>  
            classes.web.ReportServlet  
        </servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Name</servlet-name>
    <url-pattern>/ReportServlet</url-pattern>
  </servlet-mapping>
</web-app>

ReportServlet.java (только метод get)

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String id = request.getParameter("id");
        ReportGen obj = new ReportGen();
        obj.getReport(id);
    }

ReportGen.java

package classes.web;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.beanutils.RowSetDynaClass;

import net.sf.jxls.report.ResultSetCollection;
import net.sf.jxls.transformer.XLSTransformer;

public class ReportGen {

    HandleConnections obj = new HandleConnections();
    Connection con=null;
    ResultSet rs = null;
    Statement st = null;
    public void getReport(String id){
        String templateFileName = "/GenerateReport/WebContent/WEB-INF/lib/Source.xls";
        String destFileName = "/GenerateReport/WebContent/WEB-INF/lib/Dest.xls";
        try{
            con = obj.getConnection();
            st = con.createStatement();
            String query = "SELECT F_Name, L_Name, P_Address FROM Employee_Table";
            rs = st.executeQuery(query);
            RowSetDynaClass rsdc = new RowSetDynaClass(rs, false);
            Map beans = new HashMap();
            beans.put( "employee", rsdc.getRows() );
            XLSTransformer transformer = new XLSTransformer();
            transformer.transformXLS( templateFileName, beans, destFileName);

        } throws ParsePropertyException
        catch(Exception e){System.out.println(e);}
}
}

Stacktrace ::

Feb 22, 2012 3:09:17 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Name] in context with path [/GenerateReport] threw exception [Servlet execution threw an exception] with root cause
java.lang.Error: Unresolved compilation problems: 
    The type org.apache.poi.openxml4j.exceptions.InvalidFormatException cannot be resolved. It is indirectly referenced from required .class files
    The type org.apache.poi.ss.usermodel.Workbook cannot be resolved. It is indirectly referenced from required .class files
    The method transformXLS(String, Map, String) from the type XLSTransformer refers to the missing type InvalidFormatException
    Syntax error on tokens, delete these tokens

    at classes.web.ReportGen.<init>(ReportGen.java:32)
    at classes.web.ReportServlet.doGet(ReportServlet.java:30)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

Ответы [ 3 ]

2 голосов
/ 22 февраля 2012

Возможно, вы пропустили Apache POI jar в вашем пути к классам.

0 голосов
/ 09 сентября 2013

jxls-core.jar имеет следующее дерево зависимостей:

[INFO] \- net.sf.jxls:jxls-core:jar:1.0.3:compile
[INFO]    +- org.apache.commons:commons-jexl:jar:2.0.1:compile
[INFO]    \- org.apache.poi:poi-ooxml:jar:3.9:compile
[INFO]       \- org.apache.poi:poi-ooxml-schemas:jar:3.9:compile
[INFO]          \- org.apache.xmlbeans:xmlbeans:jar:2.3.0:compile
[INFO]             \- stax:stax-api:jar:1.0.1:compile

Вы должны поместить их всех в ваш путь к классу.

В частности, класс 'org.apache.poi.openxml4j.exceptions.InvalidFormatException' находится в 'poi-ooxml-schemas.jar'.

Вот почему я люблю использовать Maven. Maven решает все эти проблемы автоматически.

0 голосов
/ 22 февраля 2012

Если вы внимательно посмотрите, это проблема отсутствия необходимых файлов JAR. Ваш код ссылается на библиотеку (файл jar), которая зависит от класса (InvalidFormatException), который не является частью этого jar и должен находиться в каком-либо другом файле JAR. Из того, что я могу сделать, немного погуглив, это в пакете apache poi, чей JAR-файл отсутствует в вашем classpath.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...