2016-07-11 55 views
0

In meinem Code (AEM 6.1 SP 1) ich programmiere Pakete. Alles funktioniert gut, außer, dass ich will die Paketgröße anmelden - und was auch immer ich versuchte, war es immer 0. Hier ein aktueller Code-Schnipsel:JcrPackage getSize() ist immer 0

OutputStream out = new FileOutputStream(backupPath + "/" + fileName); 
JcrPackageManager packageManager = packaging.getPackageManager(resolver.adaptTo(Session.class)); 
packageManager.assemble(jcrPackage.getDefinition(), listener, out); 
logger.trace("Package size is {}.", jcrPackage.getSize()); 

Ich habe versucht, das Paket zu schließen und es später wieder öffnen, ich hat den Ressourcen-Resolver festgeschrieben, die Sitzung aktualisiert, aber das Ergebnis war das gleiche.

Irgendwelche Ideen?

+0

Haben Sie die "infinity.json" Ihres Paketknotens überprüft, nachdem sie erstellt wurde? – Abhishek

+0

Ich kann sogar das Paket mit dem gesamten Inhalt herunterladen - ein paar tausend Knoten ... Also ich denke, das Paket ist da. Könnte es eine Verzögerung geben? –

+0

Worauf ich hinaus wollte war (wie Ameesh sagte), die 'infinity.json' oder sogar' 1.json' Ihres Paketknotens würde Ihnen die jcr Eigenschaft ': jcr: data' geben, die im Wesentlichen von packmgr UI verwendet wird Paketgröße anzeigen – Abhishek

Antwort

0

Nach viel Versuch und Irrtum und die Hinweise von Ameesh und Abhishek fand ich heraus, was das Problem war:

assemble(JcrPackageDefinition definition, 
     ProgressTrackerListener listener, OutputStream out) 

ist in der Tat nicht mehr nur der zusammengesetzten Paket im Repository. Aus diesem Grund ist die Größe 0. Das Paket wird stattdessen an den OutputStream übergeben - was in meinem Fall das Paket auf der Festplatte gespeichert hat.

0

Die Funktionsweise von getSize für JcrPackageImpl besteht darin, dass der Knoten "jcr: content" auf dem Pfad des Pakets gesucht wird und versucht wird, die Eigenschaft "jcr: data" abzurufen, und die Länge dieses Eigenschaftswerts zurückgegeben wird Größe.

Können Sie bestätigen, ob der Pfad/Knoten, den Sie versuchen, das Paket zu speichern, "jcr: content" -Knoten ist, meine Annahme ist, dass es nicht ist, deshalb erhalten Sie 0 in der Paketgröße.

+0

Siehe meinen Kommentar zu Abisheks Frage. –

+0

Ich leugne nicht, dass das Paket nicht erstellt wird, worüber ich spreche ist die Logik, um die Größe in JcrPackageImpl zu erhalten. Wenn Sie Ihre IDE verwenden, wenn Sie auf getSize-Methode klicken, werden Sie Logik sehen, um den Knoten "jcr: content" zu erhalten, und Sie werden die Implementierung nur sehen, wenn Sie unverdunkelte Uber-Jar für aem haben. –