i JDK bin mit 1,8, 7,0 tomcat, ZK 8.0.2.2 und JSF-2.2.8 und ich habe in meinem Web-inf/lib den fowlling Für die ZK Rahmen Gläser:download zip mit Zk Rahmen
zcommon-8.0.2.2.jar
zel-8.0.2.2.jar
zk-8.0.2.2.jar
zul-8.0.2.2.jar
zweb-8.0. 2.2.jar
bsh-2.0b6.jar
commons-codec-1.8.jar
commons-Fileupload-1.2.2.jar
Javassist-3.18.2-GA.jar
slf4j-api-1.7.5.jar
slf4j-jdk14-1.7.5.jar
Ich erstelle eine Zip-Datei, die 4 Dateien mit Erfolg enthält.
Dies ist die Funktion, die eine Zip-Datei public class FileDownloadServer schafft {
public static void getZipFile(List<String> fileList, String fileZip, String sourcePath){
byte[] buffer = new byte[2014];
try {
FileOutputStream fos = new FileOutputStream(fileZip);
ZipOutputStream zos = new ZipOutputStream(fos);
for(String file : fileList){
ZipEntry ze= new ZipEntry(file);
zos.putNextEntry(ze);
System.out.println("avant");
FileInputStream in = new FileInputStream(sourcePath + File.separator + file);
System.out.println("aprés");
int len;
while ((len = in.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
in.close();
}
zos.closeEntry();
zos.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
Und hier die Funktion für Benutzer:
@ManagedBean
public class testBean {
private final static List<String> fileList=Arrays.asList("x.csv","z.csv","y.csv","t.csv");
private final static String sourcePath="C:/output/";
private final static String fileZip="C:/zip/batch.zip";
private final static String contentType="application/zip";
public void download() throws IOException{
FileDownloadServer.getZipFile(fileList, fileZip, sourcePath);
File f = new File(fileZip);
InputStream is = new FileInputStream(f);
if(is.equals(null)){
System.out.println("is is null");
}else{
System.out.println(" is not null");
}
if(contentType.equals(null)){
System.out.println("contentType is null");
}else{
System.out.println("contentType not null");
}
if(f.getName()!=null){
System.out.println("name " + f.getName());
}else{
System.out.println("flnm is null");
}
//For downloading zip file
Filedownload.save(is, contentType, f.getName());
}
}
und ich erhalte diese Ausnahme java.lang.NullPointerException
und die Parameter der Funktion sind nicht null Ich versuchte, sie vor dem Aufruf der Funktion alle ist gut angezeigt:
mai 10, 2017 6:04:33 PM com.sun.faces.context.AjaxExceptionHandlerImpl handlePartialResponseError
GRAVE: java.lang.NullPointerException
at org.zkoss.zul.Filedownload.save(Filedownload.java:54)
at org.zkoss.zul.Filedownload.save(Filedownload.java:94)
at ma.controle.gestion.bean.batch.BatchExcelBean.uploadFile(BatchExcelBean.java:112)
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.apache.el.parser.AstValue.invoke(AstValue.java:279)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at org.primefaces.component.fileupload.FileUpload.broadcast(FileUpload.java:319)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:755)
at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:931)
at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
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:646)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.primefaces.barcelona.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:32)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:958)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1087)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Ich schätze Ihre Hilfe.
Danke.
Ist 'Filedownload' eine Klasse, die Sie geschrieben haben? – VGR
@VGR Nein, es ist eine zk-Framework-Klasse, um den Browser zum Herunterladen der Datei auszulösen: https://www.zkoss.org/wiki/ZK_Component_Reference/Essential_Components/Filedownload –
@Rodik, ich habe den 'Filedownload'-Code (Version 8.0), und in Zeile 54 versucht es, die aktuelle Ausführung zu erhalten, die nur innerhalb eines Ereignis-Listener-Threads funktioniert. Ich bin auch auf dieses Problem gestoßen. Rufen Sie 'Filedownload.save()' in einem Worker-Thread auf? –