【发布时间】:2016-11-23 12:01:06
【问题描述】:
我有一个 java 代理,它遍历视图并从每个文档中获取附件,附件只是包含文档 xml 数据的 .dxl 文件。我在某个临时目录中提取文件,并在提取后尝试导入提取的 .dxl。
但这里的问题是,它只在循环中导入或处理第一个文档的附件,并在 java 调试控制台中抛出错误
NotesException: DXL importer operation failed
at lotus.domino.local.DxlImporter.importDxl(Unknown Source)
at JavaAgent.NotesMain(Unknown Source)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(Unknown Source)
我的java代理代码是
public class JavaAgent extends AgentBase {
static DxlImporter importer = null;
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
// (Your code goes here)
// Get current database
Database db = agentContext.getCurrentDatabase();
View v = db.getView("DXLProcessing_mails");
DocumentCollection dxl_tranfered_mail = v.getAllDocumentsByKey("dxl_tranfered_mail");
Document dxlDoc = dxl_tranfered_mail.getFirstDocument();
while(dxlDoc!=null){
RichTextItem rt = (RichTextItem) dxlDoc.getFirstItem("body");
Vector allObjects= rt.getEmbeddedObjects();
System.out.println("File name is "+ allObjects.get(0));
EmbeddedObject eo = dxlDoc.getAttachment(allObjects.get(0).toString());
if(eo.getFileSize()>0){
eo.extractFile(System.getProperty("java.io.tmpdir") + eo.getName());
System.out.println("Extracted File to "+System.getProperty("java.io.tmpdir") + eo.getName());
String filePath = System.getProperty("java.io.tmpdir") + eo.getName();
Stream stream = session.createStream();
if (stream.open(filePath) & (stream.getBytes() >0)) {
System.out.println("In If"+System.getProperty("java.io.tmpdir"));
importer = session.createDxlImporter();
importer.setDocumentImportOption(DxlImporter.DXLIMPORTOPTION_CREATE);
System.out.println("Break Point");
importer.importDxl(stream,db);
System.out.println("Imported Sucessfully");
}else{
System.out.println("In else"+stream.getBytes());
}
}
dxlDoc = dxl_tranfered_mail.getNextDocument();
}
} catch(Exception e) {
e.printStackTrace();
}
代码执行直到它打印“断点”并抛出错误,但附件是第一次导入
在其他情况下,如果我从文件系统硬编码特定 dxl 文件的 filePath,它会将 dxl 作为文档导入数据库中而没有错误
我想知道是否是传递的流没有完成并执行下一个循环的问题。
任何形式的建议都会有所帮助。
【问题讨论】:
-
简短回答:将单个操作移动到其自己的方法中,并将循环限制为调用该方法,回收并前进到下一个文档。并回收利用!!!!
标签: import xpages document javaagents ibm-doors