У меня есть агент Java, который просматривает представление и получает вложение из каждого документа. Вложение - это ничего, кроме файла .dxl, содержащего данные XML-документа. Я извлекаю файл в какой-то временной каталог и пытаюсь импортировать извлеченный .dxl, как только он будет извлечен.DxlImporter внутри цикла выдает ошибку «Операция импортера 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();
}
код выполняет до тех пор, пока он не распечатает «точку останова» и выдает ошибку, но вложение будет импортировано в первый раз
В другом случае, если я жестко кодирую файлPath для специфический файл dxl из файловой системы, он импортирует dxl как документ в базу данных без ошибок
Мне интересно, не проблема ли в переданном потоке не завершается, а следующий цикл выполняется.
Любое предложение будет полезно.
Короткий ответ: переместите отдельную операцию по своему методу и ограничьте цикл вызвать метод, переработать и перейти к следующему документу. И переработать !!!! – stwissel