尝试压缩文件时出现异常
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) 非常简单地解决了它。
我在 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) 非常简单地解决了它。