尝试压缩文件时出现异常

Exception while trying to zip files

我在 Webmethod Flow 中调用的 Java 服务有点问题。 我用 2 个参数文件路径和文件名调用它并检索存档的文件路径。 当我将文件添加到特定目录(使用文件轮询)时,应该调用此服务。 每次我尝试传递文件夹中的多个文件时,第一个要处理的文件都会出现此异常:

com.wm.app.b2b.server.ServiceException: 2.null
    at ma.sap.aladin.catalog.in.priv.utils.zip(utils.java:86)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    ......

这是我的邮政服务代码:

    import com.wm.data.*;
    import com.wm.util.Values;
    import com.wm.app.b2b.server.Service;
    import com.wm.app.b2b.server.ServiceException;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    import com.wm.data.IData;
    import com.wm.data.IDataCursor;
    import com.wm.data.IDataUtil;
    
    public final class zip_SVC

{

    /** 
     * The primary method for the Java service
     *
     * @param pipeline
     *            The IData pipeline
     * @throws ServiceException
     */
    public static final void zip(IData pipeline) throws ServiceException {
        IDataCursor pipelineCursor = pipeline.getCursor();
        String  targetFolder = IDataUtil.getString( pipelineCursor, "targetFolder" );
        String  fileName = IDataUtil.getString( pipelineCursor, "fileName" );
        pipelineCursor.destroy();
        // pipeline
        
        if (targetFolder.charAt(targetFolder.length()-1)!='\') targetFolder+="\";
        
        ZipOutputStream zipOut = null;
        FileOutputStream fos = null;        
        FileInputStream fis = null;
        
        String pathPieces[]=fileName.split("\\");
        String nameWoPath=pathPieces[pathPieces.length-1].substring(12);
        
        String zipName=targetFolder+nameWoPath+"_zip.zip";
        
        try {
        
            fos = new FileOutputStream(zipName);
            zipOut = new ZipOutputStream(fos);
            File fileToZip = new File(fileName);
            fis = new FileInputStream(fileToZip);
            ZipEntry zipEntry = new ZipEntry(fileToZip.getName());
            zipOut.putNextEntry(zipEntry);
            byte[] bytes = new byte[1024];
            int length;
        while((length = fis.read(bytes)) >= 0) zipOut.write(bytes,0,length);
        
        } catch (Exception e) {
            e.printStackTrace();
        throw new ServiceException("1."+e.getMessage());
        } finally {
            try {
                zipOut.finish();
                zipOut.flush();
                
                fis.close();
                fos.close();    
                zipOut.close();
            } catch (Exception e) {
                e.printStackTrace();
                throw new ServiceException("2."+e.getMessage());
            }
        }
        
        // pipeline
        IDataCursor pipelineCursor_1 = pipeline.getCursor();
        IDataUtil.put( pipelineCursor_1, "zipName", zipName);
        pipelineCursor.destroy();
            
    }

有人知道这里发生了什么吗? 提前致谢:)

终于知道问题出在哪里了,好像是我的java服务有时在上一个进程结束前就被调用了,这意味着我的文件名等于null,导致其他所有问题,我通过在初始化所有流之前调用 Thread.sleep(500) 非常简单地解决了它。