对于我在Webmethod流中调用的Java服务,我有一个小问题。我用两个args文件名和文件名来调用它,并检索存档的文件路径。当我将文件添加到特定目录(使用文件轮询)时,应该调用此服务。每次我试图在文件夹中传递几个文件时,我都会得到第一个文件要处理的异常:
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();
}有人知道这里发生了什么吗?(预先谢谢:)
发布于 2022-04-27 15:53:50
最后,我发现了问题所在,似乎我的java服务在前一个进程结束之前就被调用了,这意味着我的文件名等于null,并导致了所有其他问题,我很简单地在初始化所有流之前调用了Thread.sleep(500)。
https://stackoverflow.com/questions/72011004
复制相似问题