J'ai un agent java qui boucle dans la vue et obtient la pièce jointe de chaque document. La pièce jointe n'est rien d'autre que le fichier .dxl contenant les données XML du document. J'extrais le fichier dans un répertoire temporaire et essaye d'importer le fichier .dxl extrait dès qu'il est extrait.DxlImporter dans une boucle provoque une erreur "DXL importeur failed"
Mais le problème est ici, il ne importe ou travaille sur l'attachement du premier document dans la boucle et jette l'erreur dans la console de débogage 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)
Mon code d'agent java est
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();
}
Le le code s'exécute jusqu'à ce qu'il imprime "Break Point" et lève l'erreur mais la pièce jointe est importée pour la première fois
Dans les autres cas, si je code dur le chemin de fichier pour le fichier dxl spécifique à partir du système de fichiers, il importe le dxl comme document dans la base de données sans erreurs
Je me demande si c'est le problème du flux transmis ne se termine pas et la boucle suivante s'exécute.
Toutes sortes de suggestions seront utiles.
Réponse courte: déplacer l'opération individuelle dans sa propre méthode et limiter la boucle appeler la méthode, recycler et passer au document suivant. Et recycler !!!! – stwissel