Porter
Failed to execute the [groovy] macro. Cause: [startup failed: Script43.groovy: 4: unable to resolve class org.xwiki.store.legacy.doc.internal.ListAttachmentArchive @ line 4, column 1. import org.xwiki.store.legacy.doc.internal.ListAttachmentArchive; ^ 1 error ]. Click on this message for details.
org.xwiki.rendering.macro.MacroExecutionException: Failed to evaluate Script Macro for content [import com.xpn.xwiki.doc.XWikiAttachment;
import com.xpn.xwiki.doc.XWikiDocument;
import com.xpn.xwiki.doc.DeletedAttachment;
import org.xwiki.store.legacy.doc.internal.ListAttachmentArchive;
import com.xpn.xwiki.store.XWikiAttachmentStoreInterface;
import org.xwiki.store.legacy.store.internal.FilesystemAttachmentStore;
import com.xpn.xwiki.store.AttachmentVersioningStore;
import org.xwiki.store.legacy.store.internal.XWikiHibernateTransaction;
import com.xpn.xwiki.store.AttachmentRecycleBinStore;
import com.xpn.xwiki.web.Utils;
import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.XWiki;
import com.xpn.xwiki.XWikiException;
import org.xwiki.store.filesystem.internal.FilesystemStoreTools;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.hibernate.ObjectNotFoundException;
public void printIntro(final XWiki wiki)
{
println("= Filesystem attachment storage porting script =");
println("== Step 1: Switch to Filesystem attachments. ==");
boolean ret = isFilesystemStore(wiki.getAttachmentStore()) \
&& isFilesystemStore(wiki.getAttachmentVersioningStore()) \
&& isFilesystemStore(wiki.getAttachmentRecycleBinStore());
println(getStoreLine(isFilesystemStore(wiki.getAttachmentStore()),
wiki.getAttachmentStore()));
println(getStoreLine(isFilesystemStore(wiki.getAttachmentVersioningStore()),
wiki.getAttachmentVersioningStore()));
println(getStoreLine(isFilesystemStore(wiki.getAttachmentRecycleBinStore()),
wiki.getAttachmentRecycleBinStore()));
if (!ret) {
println("Please edit your xwiki.cfg file by modifying "
+ "the attachment store lines to read as follows:");
println("xwiki.store.attachment.hint = file");
println("xwiki.store.attachment.versioning.hint = file");
println("xwiki.store.attachment.recyclebin.hint = file");
println("Also make sure they are not commented out.");
}
println("== Step 2: Add this directory to your backup routine. ==");
println("This is your storage directory, "
+ "when filesystem attachments are enabled you have to back this up "
+ "as part of your data backup routine.\n");
println(Utils.getComponent(FilesystemStoreTools.class).storageDir.getAbsolutePath());
println("== Step 3: Copy attachments from database to filesystem. ==");
println("Now you are ready to copy the data over from your database to the filesystem. "
+ "It is prudent to leave the attachments in the database since this is still experimental "
+ "and in most situations the attachment data is not bothersome just sitting in the "
+ "database. As such, this script contains no facility to delete entries from the database.");
println("If anything goes wrong in this function, it will fail with an error message, "
+ "you should get the stack trace (probably in the log file) and keep it to "
+ "confuse and humiliate the developers with. No harm should be done since this only loads "
+ "from the database and only saves to the filesystem.");
}
if (checkVersion()) {
mainEntryPoint();
}
public boolean checkVersion()
{
String version = xwiki.version
String[] versionElements = version.split('[\\.-]')
int major = versionElements[0].toInteger()
if (major < 9)
return true
if (major == 9) {
int minor = versionElements[1].toInteger()
if (minor < 10) {
return true
}
}
println """
{{error}}
This script work only for versions older than 9.10-rc-1 (current is $xwiki.version). Since 9.10-rc-1 XWiki support mixed storage for attachments so there is no need to moved them anymore.
{{/error}}"""
return false
}
public void mainEntryPoint()
{
final XWikiContext xc = xcontext.getContext();
final XWiki wiki = xc.getWiki();
int startAt = 0;
int seconds = 20;
boolean dryRun = true;
boolean verbose = false;
boolean go = request.getMethod().equals("POST") && request.getParameter("doIt") != null;
boolean ajax = "plain".equals(request.getParameter("xpage"));
int endedAt = 0;
if (!ajax) {
this.printIntro(wiki);
}
if (go) {
startAt = Integer.parseInt(request.getParameter("startAt"));
seconds = Integer.parseInt(request.getParameter("seconds"));
dryRun = "on".equals(request.getParameter("dryRun"));
verbose = "on".equals(request.getParameter("verbose"));
endedAt = this.doIt(startAt, seconds, dryRun, verbose, ajax);
if (ajax) {
if (endedAt == -1) {
this.printFooter();
} else {
println("\n{{html clean=false}}<meta name='endedAt' content='"
+ endedAt + "' />{{/html}}");
}
return;
}
}
this.printJs();
if (!go || endedAt > startAt) {
println("\n{{html clean=false}}");
println("<div id='javascriptSpace'></div>");
println("<form action='?time=" + System.nanoTime()
+ "#doItForm' id='doItForm' method='POST'>");
println("<input type='hidden' name='seconds' value='" + seconds + "' />");
println("<input type='hidden' id='startAt' name='startAt' value='" + endedAt + "' />");
println("<dl>");
println("<dt><label for='dryRun'>Dry Run, don't save any files.</label></dt>");
println("<dd><input type='checkbox' name='dryRun' checked='"
+ ((dryRun) ? "checked" : "") + "' /></dd>");
println("<dt><label for='verbose'>Verbose, show every attachment.</label></dt>");
println("<dd><input type='checkbox' name='verbose' checked='"
+ ((verbose) ? "checked" : "") + "' /></dd>");
println("</dl>");
println("<input type='hidden' name='doIt' value='yes' />")
println("<input type='submit' name='start' value='"
+ ((endedAt > startAt) ? "Continue" : "Start") + "' />");
println("</form>");
println("<style>#xwikidata { display:none }</style>")
println("{{/html}}\n");
return;
}
this.printFooter();
}
public void printFooter()
{
println("== Step 4: make sure everything is working. ==");
println("Check to make sure your attachments are still there, if an attachment is broken, "
+ "it will appear to be there but on opening it will tell you the attachment does not exist. "
+ "If something goes terribly wrong with filesystem attachments, you may have your old "
+ "attachment system back simply by changing the lines in the xwiki.cfg file and restarting "
+ "the container. HOWEVER: This will not preserve attachments which were uploaded **after** "
+ "switching to filesystem attachments so as users edit the system you will become "
+ "locked in to filesystem attachments unless a script is written to do the "
+ "inverse of this one.");
println("Despite being experimental, the filesystem attachment storage is quite stable and the "
+ "risk of actually losing something so that it is unrecoverable is very remote.");
println("NOTE: This must be run seperately in each subwiki.");
println("\n\nEnjoy and give feedback.");
}
public static boolean isFilesystemStore(final Object store)
{
return store.getClass().getName().contains("Filesystem");
}
public static String getStoreLine(final boolean isFilesystem, final Object store)
{
return "(%style='color:" + (isFilesystem ? "#080" : "#d00") + "'%)(((* " + store + ")))";
}
public void printJs()
{
println("""\n{{html}}<script>
var isAtBottom = function() {
var vp = document.viewport;
return vp.getScrollOffsets().top + vp.getHeight() + 30 > window.body.getHeight();
};
Event.observe(document, "dom:loaded", function() {
var doItForm = document.getElementById("doItForm");
var workspace = document.getElementById("javascriptSpace");
var params = {
xpage: "plain",
seconds: doItForm.seconds.value,
startAt: doItForm.startAt.value,
doIt: "yes"
};
var shouldContinue;
var doBlock = function(startAt) {
params.startAt = startAt;
new Ajax.Request(window.location.href, {
method: "POST",
parameters: params,
onSuccess: function(transport) {
var div = document.createElement("div");
div.innerHTML = transport.responseText;
var wasAtBottom = isAtBottom();
workspace.innerHTML += transport.responseText;
if (wasAtBottom || startAt == 0) {
doItForm.scrollTo();
}
var metas = div.getElementsByTagName("meta");
if (metas.length > 0 && shouldContinue) {
doBlock(metas[0].content);
return;
} else if (metas.length > 0) {
doItForm.startAt.value = metas[0].content;
doItForm.start.value = "Continue";
} else {
doItForm.parentNode.removeChild(doItForm);
}
reachedEnd();
}
});
};
var reachedEnd = function() {
Event.observe(doItForm, "submit", start);
Event.stopObserving(doItForm, "submit", stop);
};
var stop = function(ev) {
ev.stop();
shouldContinue = false;
reachedEnd();
};
var start = function(ev) {
ev.stop();
params.dryRun = (doItForm.dryRun.checked) ? "on" : undefined;
params.verbose = (doItForm.verbose.checked) ? "on" : undefined;
workspace.innerHTML = "";
shouldContinue = true;
doBlock(doItForm.startAt.value);
doItForm.start.value = "Abort";
Event.stopObserving(doItForm, "submit", start);
Event.observe(doItForm, "submit", stop);
};
Event.observe(doItForm, "submit", start);
});
</script>{{/html}}""");
}
/**
* Port all attachments from the original form to filesystem attachment store.
* Do one batch at a time so the user can see the progress and it won't time out.
*
* @param startAt the index of the first job to do, 0 to start at the beginning.
* @param seconds the number of seconds to run for before returning.
* @param dryRun don't save any files if this is true.
* @return the number of the first job which was not done. This can be startAt in the next call.
* -1 if the operation is complete.
*/
public int doIt(int startAt, int seconds, boolean dryRun, boolean verbose, boolean ajax)
{
final XWikiContext xc = this.xcontext.getContext();
final XWiki wiki = xc.getWiki();
final FilesystemAttachmentStore fileAttachStore =
Utils.getComponent(XWikiAttachmentStoreInterface.class, "file");
final XWikiAttachmentStoreInterface defAttachStore =
Utils.getComponent(XWikiAttachmentStoreInterface.class, "hibernate");
final AttachmentVersioningStore defAttachmentVersioningStore =
Utils.getComponent(AttachmentVersioningStore.class, "hibernate");
int count = 0;
long stopTime = System.currentTimeMillis() + (1000 * seconds);
println("(%style='color:#00d'%)(((");
if (verbose && startAt == 0) {
println("\n== Attachments ==\n");
}
for (String docName : xwiki.searchDocuments("where 1=1")) {
if (count < startAt) {
count++;
continue;
} else if (stopTime < System.currentTimeMillis()) {
println(")))");
return count;
} else {
count++;
}
final XWikiDocument doc = xwiki.getDocument(docName).getDocument();
try {
final XWikiHibernateTransaction transaction = new XWikiHibernateTransaction(xc);
if (verbose) {
println("* [[" + doc.getFullName() + "]]");
}
// This is the equivilant of doc.getAttachmentList() but there is an issue which
// causes some attachments to be lost.
// http://jira.xwiki.org/browse/XWIKI-7936
def hql = "select att from XWikiAttachment att WHERE att.docId=?";
for (XWikiAttachment attach : xwiki.search(hql, [doc.getId()])) {
attach.setDoc(doc);
if (verbose) {
println("** [[attach:" + doc.getFullName() + "@" + attach.getFilename() + "]]");
}
try {
fileAttachStore.loadAttachmentContent(attach, xc, false);
continue;
} catch (XWikiException noAttachmentInFilesystem) {
// no such attachment, let's save it.
}
try {
try {
defAttachStore.loadAttachmentContent(attach, xc, true);
} catch (XWikiException notInHibernate) {
final Throwable wrapped = notInHibernate.getException();
if (wrapped && wrapped instanceof ObjectNotFoundException) {
println("(%style='color:#c80'%)(((");
println("Unable to find this attachment [[attach:" + attach.getFilename()
+ "@" + doc.getFullName() + "]] in the database, "
+ "it may be the result of database corruption from a failed "
+ "upload prior to the fixing of "
+ "[[http://jira.xwiki.org/browse/XWIKI-5055]]");
println("xwikiattachment_content.XWA_ID = " + attach.getId());
println(")))");
}
}
defAttachmentVersioningStore.loadArchive(attach, xc, true);
// http://jira.xwiki.org/jira/browse/XWIKI-6199
attach.getAttachment_archive().getVersions();
// Setup the runnables to do the save but don't save just yet.
fileAttachStore.getAttachmentContentSaveRunnable(attach, false, xc)
.runIn(transaction);
} catch (Exception e) {
println("(%style='color:#d00'%)(((");
println("Error in [" + doc.getFullName() + ":" + attach.getFilename() + "]"
+ e.getMessage());
println(ExceptionUtils.getStackTrace(e));
println(")))");
}
}
if (!dryRun) {
transaction.start();
}
} catch (Exception e) {
println("(%style='color:#d00'%)(((");
println("Failed to port attachments for document [" + doc.getFullName() + "]");
println(e.getMessage());
println(ExceptionUtils.getStackTrace(e));
println(")))");
}
}
println(")))");
if (startAt < count) {
int attachCount =
xwiki.search("select count(at) from XWikiDocument as doc, "
+ "XWikiAttachment as at where at.docId = doc.id").get(0).intValue();
println("**[" + attachCount + "] attachments.**");
}
// And now for the deleted attachments.
final AttachmentRecycleBinStore fileBin =
Utils.getComponent(AttachmentRecycleBinStore.class, "file");
final AttachmentRecycleBinStore defaultBin =
Utils.getComponent(AttachmentRecycleBinStore.class, "hibernate");
if (verbose && startAt < count) {
println("\n== Deleted Attachments ==\n");
}
List<Object[]> entries =
xwiki.search("select da.id, da.docName, da.filename, da.date from DeletedAttachment as da");
if (verbose && entries.size() == 0) {
println("\nnone.");
}
int delAttachCount = 0;
for (Object[] o : entries) {
long delAttachId = o[0];
final String docName = o[1];
final String fileName = o[2];
final Date deleteDate = o[3];
delAttachCount++;
if (count < startAt) {
if (verbose && !ajax) {
println("* [[" + docName + "]] - " + fileName);
}
count++;
continue;
} else if (stopTime < System.currentTimeMillis()) {
return count;
}
count++;
try {
final DeletedAttachment delAttach =
defaultBin.getDeletedAttachment(delAttachId, xc, true);
// Can't use the transaction runnable here because (non-filesystem)
// deleted attachments hold all content in memory so they have to be
// handled one at a time.
final XWikiAttachment attach = delAttach.restoreAttachment(null, xc);
try {
// http://jira.xwiki.org/jira/browse/XWIKI-6199
attach.getAttachment_archive().getVersions();
} catch (NullPointerException e) {
attach.setAttachment_archive(new ListAttachmentArchive([attach]));
}
if (!dryRun) {
fileBin.saveToRecycleBin(attach,
delAttach.getDeleter(),
delAttach.getDate(),
xc,
false);
}
if (verbose) {
println("* [[" + docName + "]]");
println("** " + fileName + " - Deleted: " + deleteDate);
}
} catch (Exception e) {
println("(%style='color:#d00'%)(((");
println("* [[" + docName + "]] - " + fileName + " - Deleted: " + deleteDate);
println(e.getMessage());
println(")))");
println(ExceptionUtils.getStackTrace(e));
}
}
println("\n**[" + delAttachCount + "] deleted attachments.**");
return -1;
}]
at org.xwiki.rendering.macro.script.AbstractJSR223ScriptMacro.evaluateBlock(AbstractJSR223ScriptMacro.java:198)
at org.xwiki.rendering.macro.script.AbstractJSR223ScriptMacro.evaluateBlock(AbstractJSR223ScriptMacro.java:56)
at org.xwiki.rendering.macro.script.AbstractScriptMacro.execute(AbstractScriptMacro.java:182)
at org.xwiki.rendering.macro.script.AbstractScriptMacro.execute(AbstractScriptMacro.java:58)
at org.xwiki.rendering.internal.transformation.macro.MacroTransformation.transform(MacroTransformation.java:311)
at org.xwiki.rendering.internal.transformation.DefaultRenderingContext.transformInContext(DefaultRenderingContext.java:183)
at org.xwiki.rendering.internal.transformation.DefaultTransformationManager.performTransformations(DefaultTransformationManager.java:88)
at org.xwiki.display.internal.DocumentContentAsyncExecutor.executeInCurrentExecutionContext(DocumentContentAsyncExecutor.java:395)
at org.xwiki.display.internal.DocumentContentAsyncExecutor.execute(DocumentContentAsyncExecutor.java:268)
at org.xwiki.display.internal.DocumentContentAsyncRenderer.execute(DocumentContentAsyncRenderer.java:112)
at org.xwiki.rendering.async.internal.block.AbstractBlockAsyncRenderer.render(AbstractBlockAsyncRenderer.java:157)
at org.xwiki.rendering.async.internal.block.AbstractBlockAsyncRenderer.render(AbstractBlockAsyncRenderer.java:54)
at org.xwiki.rendering.async.internal.DefaultAsyncRendererExecutor.syncRender(DefaultAsyncRendererExecutor.java:290)
at org.xwiki.rendering.async.internal.DefaultAsyncRendererExecutor.render(DefaultAsyncRendererExecutor.java:267)
at org.xwiki.rendering.async.internal.block.DefaultBlockAsyncRendererExecutor.execute(DefaultBlockAsyncRendererExecutor.java:125)
at org.xwiki.display.internal.DocumentContentDisplayer.display(DocumentContentDisplayer.java:67)
at org.xwiki.display.internal.DocumentContentDisplayer.display(DocumentContentDisplayer.java:43)
at org.xwiki.display.internal.DefaultDocumentDisplayer.display(DefaultDocumentDisplayer.java:96)
at org.xwiki.display.internal.DefaultDocumentDisplayer.display(DefaultDocumentDisplayer.java:39)
at org.xwiki.sheet.internal.SheetDocumentDisplayer.display(SheetDocumentDisplayer.java:123)
at org.xwiki.sheet.internal.SheetDocumentDisplayer.display(SheetDocumentDisplayer.java:52)
at org.xwiki.display.internal.ConfiguredDocumentDisplayer.display(ConfiguredDocumentDisplayer.java:68)
at org.xwiki.display.internal.ConfiguredDocumentDisplayer.display(ConfiguredDocumentDisplayer.java:42)
at com.xpn.xwiki.doc.XWikiDocument.display(XWikiDocument.java:1369)
at com.xpn.xwiki.doc.XWikiDocument.getRenderedContent(XWikiDocument.java:1505)
at com.xpn.xwiki.doc.XWikiDocument.displayDocument(XWikiDocument.java:1455)
at com.xpn.xwiki.doc.XWikiDocument.displayDocument(XWikiDocument.java:1424)
at com.xpn.xwiki.api.Document.displayDocument(Document.java:788)
at jdk.internal.reflect.GeneratedMethodAccessor672.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:571)
at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:554)
at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:221)
at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:368)
at org.apache.velocity.runtime.parser.node.ASTReference.value(ASTReference.java:704)
at org.apache.velocity.runtime.parser.node.ASTExpression.value(ASTExpression.java:75)
at org.apache.velocity.runtime.parser.node.ASTSetDirective.render(ASTSetDirective.java:242)
at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:147)
at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:439)
at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:190)
at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:147)
at org.xwiki.velocity.internal.directive.TryCatchDirective.render(TryCatchDirective.java:86)
at org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:304)
at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:439)
at org.apache.velocity.Template.merge(Template.java:358)
at org.apache.velocity.Template.merge(Template.java:262)
at org.xwiki.velocity.internal.InternalVelocityEngine.evaluate(InternalVelocityEngine.java:225)
at com.xpn.xwiki.internal.template.VelocityTemplateEvaluator.evaluateContent(VelocityTemplateEvaluator.java:105)
at com.xpn.xwiki.internal.template.TemplateAsyncRenderer.evaluateContent(TemplateAsyncRenderer.java:219)
at com.xpn.xwiki.internal.template.TemplateAsyncRenderer.renderVelocity(TemplateAsyncRenderer.java:174)
at com.xpn.xwiki.internal.template.TemplateAsyncRenderer.render(TemplateAsyncRenderer.java:135)
at com.xpn.xwiki.internal.template.TemplateAsyncRenderer.render(TemplateAsyncRenderer.java:54)
at org.xwiki.rendering.async.internal.DefaultAsyncRendererExecutor.lambda$syncRender$0(DefaultAsyncRendererExecutor.java:284)
at com.xpn.xwiki.internal.security.authorization.DefaultAuthorExecutor.call(DefaultAuthorExecutor.java:98)
at org.xwiki.rendering.async.internal.DefaultAsyncRendererExecutor.syncRender(DefaultAsyncRendererExecutor.java:284)
at org.xwiki.rendering.async.internal.DefaultAsyncRendererExecutor.render(DefaultAsyncRendererExecutor.java:267)
at org.xwiki.rendering.async.internal.block.DefaultBlockAsyncRendererExecutor.render(DefaultBlockAsyncRendererExecutor.java:154)
at com.xpn.xwiki.internal.template.InternalTemplateManager.render(InternalTemplateManager.java:904)
at com.xpn.xwiki.internal.template.InternalTemplateManager.renderFromSkin(InternalTemplateManager.java:866)
at com.xpn.xwiki.internal.template.InternalTemplateManager.render(InternalTemplateManager.java:853)
at com.xpn.xwiki.internal.template.InternalTemplateManager.renderNoException(InternalTemplateManager.java:808)
at com.xpn.xwiki.internal.template.InternalTemplateManager.renderNoException(InternalTemplateManager.java:800)
at com.xpn.xwiki.internal.template.DefaultTemplateManager.renderNoException(DefaultTemplateManager.java:79)
at com.xpn.xwiki.internal.template.DefaultTemplateManager.renderNoException(DefaultTemplateManager.java:73)
at org.xwiki.template.script.TemplateScriptService.render(TemplateScriptService.java:54)
at jdk.internal.reflect.GeneratedMethodAccessor267.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:571)
at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:554)
at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:221)
at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:368)
at org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:492)
at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:147)
at org.apache.velocity.runtime.directive.VelocimacroProxy.render(VelocimacroProxy.java:218)
at org.apache.velocity.runtime.directive.RuntimeMacro.render(RuntimeMacro.java:331)
at org.apache.velocity.runtime.directive.RuntimeMacro.render(RuntimeMacro.java:261)
at org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:304)
at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:439)
at org.apache.velocity.Template.merge(Template.java:358)
at org.apache.velocity.Template.merge(Template.java:262)
at org.xwiki.velocity.internal.InternalVelocityEngine.evaluate(InternalVelocityEngine.java:225)
at com.xpn.xwiki.internal.template.VelocityTemplateEvaluator.evaluateContent(VelocityTemplateEvaluator.java:105)
at com.xpn.xwiki.internal.template.TemplateAsyncRenderer.evaluateContent(TemplateAsyncRenderer.java:219)
at com.xpn.xwiki.internal.template.TemplateAsyncRenderer.renderVelocity(TemplateAsyncRenderer.java:174)
at com.xpn.xwiki.internal.template.TemplateAsyncRenderer.render(TemplateAsyncRenderer.java:135)
at com.xpn.xwiki.internal.template.TemplateAsyncRenderer.render(TemplateAsyncRenderer.java:54)
at org.xwiki.rendering.async.internal.DefaultAsyncRendererExecutor.lambda$syncRender$0(DefaultAsyncRendererExecutor.java:284)
at com.xpn.xwiki.internal.security.authorization.DefaultAuthorExecutor.call(DefaultAuthorExecutor.java:98)
at org.xwiki.rendering.async.internal.DefaultAsyncRendererExecutor.syncRender(DefaultAsyncRendererExecutor.java:284)
at org.xwiki.rendering.async.internal.DefaultAsyncRendererExecutor.render(DefaultAsyncRendererExecutor.java:267)
at org.xwiki.rendering.async.internal.block.DefaultBlockAsyncRendererExecutor.render(DefaultBlockAsyncRendererExecutor.java:154)
at com.xpn.xwiki.internal.template.InternalTemplateManager.render(InternalTemplateManager.java:904)
at com.xpn.xwiki.internal.template.InternalTemplateManager.renderFromSkin(InternalTemplateManager.java:866)
at com.xpn.xwiki.internal.template.InternalTemplateManager.render(InternalTemplateManager.java:853)
at com.xpn.xwiki.internal.template.InternalTemplateManager.renderNoException(InternalTemplateManager.java:808)
at com.xpn.xwiki.internal.template.InternalTemplateManager.renderNoException(InternalTemplateManager.java:800)
at com.xpn.xwiki.internal.template.DefaultTemplateManager.renderNoException(DefaultTemplateManager.java:79)
at com.xpn.xwiki.internal.template.DefaultTemplateManager.renderNoException(DefaultTemplateManager.java:73)
at org.xwiki.template.script.TemplateScriptService.render(TemplateScriptService.java:54)
at jdk.internal.reflect.GeneratedMethodAccessor267.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:571)
at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:554)
at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:221)
at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:368)
at org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:492)
at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:147)
at org.apache.velocity.runtime.directive.VelocimacroProxy.render(VelocimacroProxy.java:218)
at org.apache.velocity.runtime.directive.RuntimeMacro.render(RuntimeMacro.java:331)
at org.apache.velocity.runtime.directive.RuntimeMacro.render(RuntimeMacro.java:261)
at org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:304)
at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:147)
at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:171)
at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:147)
at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:439)
at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:190)
at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:439)
at org.apache.velocity.Template.merge(Template.java:358)
at org.apache.velocity.Template.merge(Template.java:262)
at org.xwiki.velocity.internal.InternalVelocityEngine.evaluate(InternalVelocityEngine.java:225)
at com.xpn.xwiki.internal.template.VelocityTemplateEvaluator.evaluateContent(VelocityTemplateEvaluator.java:105)
at com.xpn.xwiki.internal.template.TemplateAsyncRenderer.evaluateContent(TemplateAsyncRenderer.java:219)
at com.xpn.xwiki.internal.template.TemplateAsyncRenderer.renderVelocity(TemplateAsyncRenderer.java:174)
at com.xpn.xwiki.internal.template.TemplateAsyncRenderer.render(TemplateAsyncRenderer.java:135)
at com.xpn.xwiki.internal.template.TemplateAsyncRenderer.render(TemplateAsyncRenderer.java:54)
at org.xwiki.rendering.async.internal.DefaultAsyncRendererExecutor.lambda$syncRender$0(DefaultAsyncRendererExecutor.java:284)
at com.xpn.xwiki.internal.security.authorization.DefaultAuthorExecutor.call(DefaultAuthorExecutor.java:98)
at org.xwiki.rendering.async.internal.DefaultAsyncRendererExecutor.syncRender(DefaultAsyncRendererExecutor.java:284)
at org.xwiki.rendering.async.internal.DefaultAsyncRendererExecutor.render(DefaultAsyncRendererExecutor.java:267)
at org.xwiki.rendering.async.internal.block.DefaultBlockAsyncRendererExecutor.render(DefaultBlockAsyncRendererExecutor.java:154)
at com.xpn.xwiki.internal.template.InternalTemplateManager.render(InternalTemplateManager.java:904)
at com.xpn.xwiki.internal.template.InternalTemplateManager.renderFromSkin(InternalTemplateManager.java:866)
at com.xpn.xwiki.internal.template.InternalTemplateManager.renderFromSkin(InternalTemplateManager.java:846)
at com.xpn.xwiki.internal.template.InternalTemplateManager.render(InternalTemplateManager.java:832)
at com.xpn.xwiki.internal.template.DefaultTemplateManager.render(DefaultTemplateManager.java:91)
at com.xpn.xwiki.internal.template.DefaultTemplateManager.render(DefaultTemplateManager.java:85)
at com.xpn.xwiki.XWiki.evaluateTemplate(XWiki.java:2564)
at com.xpn.xwiki.web.Utils.parseTemplate(Utils.java:180)
at com.xpn.xwiki.web.XWikiAction.execute(XWikiAction.java:651)
at com.xpn.xwiki.web.XWikiAction.execute(XWikiAction.java:339)
at com.xpn.xwiki.web.LegacyActionServlet.service(LegacyActionServlet.java:108)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at com.xpn.xwiki.web.ActionFilter.doFilter(ActionFilter.java:122)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.xwiki.wysiwyg.filter.ConversionFilter.doFilter(ConversionFilter.java:61)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.xwiki.container.servlet.filters.internal.SetHTTPHeaderFilter.doFilter(SetHTTPHeaderFilter.java:63)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.xwiki.resource.servlet.RoutingFilter.doFilter(RoutingFilter.java:132)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.xwiki.container.servlet.filters.internal.SavedRequestRestorerFilter.doFilter(SavedRequestRestorerFilter.java:208)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.xwiki.container.servlet.filters.internal.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1684)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: javax.script.ScriptException: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script43.groovy: 4: unable to resolve class org.xwiki.store.legacy.doc.internal.ListAttachmentArchive
@ line 4, column 1.
import org.xwiki.store.legacy.doc.internal.ListAttachmentArchive;
^
1 error
at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:164)
at org.xwiki.rendering.macro.script.AbstractJSR223ScriptMacro.eval(AbstractJSR223ScriptMacro.java:338)
at org.xwiki.rendering.macro.script.AbstractJSR223ScriptMacro.evaluateBlock(AbstractJSR223ScriptMacro.java:238)
at org.xwiki.rendering.macro.script.AbstractJSR223ScriptMacro.evaluateBlock(AbstractJSR223ScriptMacro.java:193)
... 184 more
Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script43.groovy: 4: unable to resolve class org.xwiki.store.legacy.doc.internal.ListAttachmentArchive
@ line 4, column 1.
import org.xwiki.store.legacy.doc.internal.ListAttachmentArchive;
^
1 error
at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:292)
at org.codehaus.groovy.control.CompilationUnit$ISourceUnitOperation.doPhaseOperation(CompilationUnit.java:910)
at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:692)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:666)
at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:373)
at groovy.lang.GroovyClassLoader.lambda$parseClass$2(GroovyClassLoader.java:316)
at org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(StampedCommonCache.java:163)
at org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:154)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:314)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:298)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:258)
at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.getScriptClass(GroovyScriptEngineImpl.java:350)
at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:159)
... 187 more