2014-06-06 12 views
7

Sto sviluppando un'applicazione web java, dove sto usando lo strumento di gestione dei progetti Maven e ora sto diventando pazzo con questo problema. Provo a creare un rapporto jasper dalla mia applicazione, questo rapporto è composto da molti sotto-report che ho in src/main/resources. provo a caricare questi sottoreport nel seguente modo:java.io.StreamCorruptedException: intestazione del flusso non valida: EFBFBDEF

//Sub Report 1 
InputStream fileSubRep1=(BufferedInputStream) getClass().getResourceAsStream("/fileSubReport1.jasper"); 
map.put("fileSubRep1",(JasperReport) JRLoader.loadObject(fileSubRep1)); 

//Sub Report 2 
InputStream fileSubRep2=(BufferedInputStream) getClass().getResourceAsStream("/fileSubReport2.jasper"); 
map.put("fileSubRep1",(JasperReport) JRLoader.loadObject(fileSubRep2)); 

il problema è che la chiamata a questo metodo JRLoader.loadObject (fileSubRep1) genera la seguente eccezione:

 net.sf.jasperreports.engine.JRException: Error loading object from InputStream 
    at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:248) 
    at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:228) 
    at it.aiemonline.report.jasper.GeneraFattureServiceImpl.createMapFileJasper(GeneraFattureServiceImpl.java:292) 
    at it.aiemonline.report.jasper.GeneraFattureServiceImpl.executeStreamByteFatturaPdf(GeneraFattureServiceImpl.java:890) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:319) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
    at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80) 
    at it.aiemonline.utility.logger.SystemLogger.aroundExecuteLog(SystemLogger.java:187) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621) 
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610) 
    at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) 
    at com.sun.proxy.$Proxy78.executeStreamByteFatturaPdf(Unknown Source) 
    at it.aiemonline.vaadin.application.gui.fatturazione.visualizza.VisualizzaFatturaPanel.visualizzaPdf(VisualizzaFatturaPanel.java:236) 
    at it.aiemonline.vaadin.application.gui.fatturazione.visualizza.VisualizzaFatturaPanel$1.itemClick(VisualizzaFatturaPanel.java:109) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:508) 
    at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:198) 
    at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:161) 
    at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:969) 
    at com.vaadin.ui.Table.handleClickEvent(Table.java:3057) 
    at com.vaadin.ui.Table.changeVariables(Table.java:2853) 
    at com.vaadin.server.communication.ServerRpcHandler.changeVariables(ServerRpcHandler.java:396) 
    at com.vaadin.server.communication.ServerRpcHandler.handleBurst(ServerRpcHandler.java:221) 
    at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:111) 
    at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:91) 
    at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:37) 
    at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1382) 
    at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:238) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:538) 
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:478) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) 
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:517) 
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:225) 
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:937) 
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:406) 
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183) 
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:871) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) 
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:247) 
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110) 
    at org.eclipse.jetty.server.Server.handle(Server.java:346) 
    at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:589) 
    at org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:1065) 
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:823) 
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:220) 
    at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:411) 
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:535) 
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:40) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:529) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.io.StreamCorruptedException: invalid stream header: EFBFBDEF 
    at java.io.ObjectInputStream.readStreamHeader(Unknown Source) 
    at java.io.ObjectInputStream.<init>(Unknown Source) 
    at net.sf.jasperreports.engine.util.ContextClassLoaderObjectInputStream.<init>(ContextClassLoaderObjectInputStream.java:58) 
    at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:243) 
    ... 69 more 

Dove am Sto sbagliando? Come posso risolverlo?

risposta

23

Finalmente dopo 3 giorni di mal di testa ho risolto il mio problema. Sto utilizzando Maven come strumento di progetto di managment e sto lavorando su un progetto modulare con questa struttura

|-- parent 
    |-- model 
    --pom.xml 
    |-- services 
    --pom.xml 
    |-- web-app 
    --pom.xml 

Il porblem era che il file che provo a caricare come flusso di ingresso era in src/main/risorse nel modulo servizi, ma nel pom.xml della web-app abilito il filtraggio delle risorse, e dal momento che il modulo web-app dipende dal servizio, il filtro è stato esteso al modulo dei servizi.

Nella sezione di filtrazione del sito Maven Filtering ho trovato:

Attenzione: Non filtrare i file con contenuto binario come le immagini! Questo molto probabilmente causerà un output corrotto. Se si hanno sia file di testo che file binari come risorse, è necessario dichiarare due set di risorse che si escludono a vicenda. La prima serie di risorse definisce i file da filtrare e l'altro set risorsa definisce i file da copiare inalterato come illustrato di seguito:

Poi ho rimosso il seguente codice dal mio modulo web-app e tutto funziona

<resources> 
    <resource> 
     <directory>src/main/resources</directory> 
     <filtering>true</filtering> 
    </resource> 
</resources> 
2

Grazie per questa soluzione @skizzo

Un modo meno drastico, se è ancora necessario filtrare altri file o copiare tutti i file è semplicemente quello di includere tutti i file necessari per filtrare (java, xml, proprietà ...).

Ecco la soluzione che ho appena implementato grazie al vostro aiuto:

 <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
      <includes> 
       <include>**/*.java</include> 
       <include>**/*.xml</include> 
       <include>**/*.properties</include> 
      </includes> 
     </resource> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>false</filtering> 
      <excludes> 
       <exclude>**/*.java</exclude> 
       <exclude>**/*.xml</exclude> 
       <exclude>**/*.properties</exclude> 
      </excludes> 
     </resource> 
    </resources> 

Non ha sembrava legato a tutti, e che stavo cercando per diverse ore già. Ha davvero salvato la mia giornata! ;-)

0

Nel mio caso, ho dimenticato di escludere i report jasper compilati dal task ant della fissazione di fine linea. Per me sotto l'esclusione risolto il problema:

<fixcrlf srcdir="${basedir}/target/etc" 
    includes="**/*.*" 
    excludes="**/*.jasper" 
    eol="lf" eof="remove"/> 
1

Ho avuto esattamente lo stesso problema, mi è stato risolto aggiungendo il seguente plug-in nel mio pom.xml

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-resources-plugin</artifactId> 
      <version>3.0.2</version> 
      <configuration> 
       <nonFilteredFileExtensions> 
       <nonFilteredFileExtension>pdf</nonFilteredFileExtension> 
       <nonFilteredFileExtension>jasper</nonFilteredFileExtension> 
       </nonFilteredFileExtensions> 
      </configuration> 
      </plugin> 
Problemi correlati