export to pdf from a web application, error: org / apache / poi / ss / usermodel / Workbook

1

Good evening. I am trying to export to PDF from a Web application with JSF and am having the following error:

Stack Trace:

java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Workbook
    at org.primefaces.component.export.ExporterFactory.getExporterForType(ExporterFactory.java:30)
    at org.primefaces.component.export.DataExporter.processAction(DataExporter.java:88)
    at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
    at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:814)
    at javax.faces.component.UICommand.broadcast(UICommand.java:300)
    at javax.faces.component.UIData.broadcast(UIData.java:1108)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.apache.poi.ss.usermodel.Workbook
    at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1783)
    at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1633)
    ... 40 more

Code snippet:

                    <p:dataTable id="estoques" value="#{estoqueBean.estoques}" var="obj" paginator="true" rows="5">
                        <f:facet name="header">
                            <h:outputText value="#{msgs.titulotabelacadastrodeproduto}" />
                            <h:commandLink>
                                <p:graphicImage value="imagens/excel.png" width="24"/>
                                <p:dataExporter type="xls" target="estoques" fileName="estoque" />
                            </h:commandLink>

                            <h:commandLink>
                                <p:graphicImage value="imagens/pdf.png" width="24"/>
                                <p:dataExporter type="pdf" target="estoques" fileName="estoque" />
                            </h:commandLink>

                            <h:commandLink>
                                <p:graphicImage value="imagens/csv.png" width="24"/>
                                <p:dataExporter type="csv" target="estoques" fileName="estoque" />
                            </h:commandLink>
                        </f:facet>

Thank you for your attention.

    
asked by anonymous 15.11.2016 / 02:27

1 answer

1

Notice what we have in your stacktrace:

java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Workbook

That is, Java could not find the Workbook class that is used by your project.

This error usually indicates a classpath problem. Make sure the POI library is in your classpath. You can find the most recent version here: link

It is also worth checking if the other libraries that the POI uses are present. In the case of version 3.15 of the POI, they are Commons-Collections 4.1 and Commons-Codec 1.10.

Links from these libraries follow below:

  • Commons collections: link

  • Commons codec: link or link - I do not know which one is better (probably both), but do not use the two together, just use one.

15.11.2016 / 03:37