2014-06-06 5 views
7

Ich entwickle eine Java-Web-Anwendung, wo ich Maven wie Tool der Projektverwaltung verwenden und jetzt bin ich verrückt mit diesem Problem. Ich versuche, einen Jaspis-Bericht aus meiner Anwendung zu erstellen, dieser Bericht besteht aus vielen Unterberichten, die ich in den Quellen/main/resources habe. Ich versuche, diese subreports auf folgende Weise zu laden:java.io.StreamCorruptedException: ungültiger Stream-Header: 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)); 

das Problem ist, dass der Anruf bei dieser Methode JRLoader.loadObject (fileSubRep1) generiert die folgende Ausnahme:

 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 

Wo ist Ich mache falsch? Wie kann ich es beheben?

Antwort

23

Endlich nach 3 Tagen Kopfschmerzen habe ich meine Probleme gelöst. Ich verwende Maven wie Werkzeug der Projektleitung und ich arbeite an einem modularen Projekt mit dieser Struktur

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

Die porblem war, dass die Datei, die ich versuche, wie Eingangsstrom im src war zu laden/main/Ressourcen im Dienste-Modul, aber in der Web-App pom.xml Ich aktiviere die Ressourcen-Filterung, und da dieses Web-App-Modul vom Dienst abhängig ist, wurde die Filterung am Dienst-Modul erweitert.

Im Filterabschnitt der Maven-Website Filtering ich gefunden:

Warnung: filtern Sie keine Dateien mit binären Inhalten wie Bilder! Dies führt höchstwahrscheinlich zu einer fehlerhaften Ausgabe. Wenn Sie sowohl Textdateien als auch Binärdateien als Ressourcen haben, müssen Sie zwei sich gegenseitig ausschließende Ressourcensätze deklarieren. Die erste Ressourcensatz definiert die Dateien gefiltert werden, um die andere Ressourcengruppe definiert die Dateien unverändert zu kopieren, wie unten dargestellt:

Dann habe ich den folgenden Code aus meiner Web-App-Modul entfernt und alles funktioniert

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

Danke für diese Lösung @skizzo

Ein weniger drastischer Weg, wenn Sie noch einige andere Dateien filtern müssen, oder kopieren Sie alle Dateien ist einfach alle Dateien enthalten, die Sie filtern müssen (Java, XML, Eigenschaften ...)). Hier

ist die Lösung, die ich gerade umgesetzt dank Ihrer Hilfe:

 <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> 

Es hat nicht schien überhaupt im Zusammenhang, und ich suchte sie für mehrere Stunden schon. Es hat wirklich meinen Tag gerettet! ;-)

0

In meinem Fall habe ich vergessen, kompilierte Jaspis-Berichte vom Ende der Zeile Fixierung Ameisen Aufgabe auszuschließen. Für mich unter Ausschluß das Problem behoben:

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

ich das gleiche Problem genau hatte, ich gelöst wurde, die folgenden Plug-in in meinem 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> 
Verwandte Themen