Search the FirstSpirit Knowledge Base
Hallo zusammen,
ich stoße gerade an ein Problem, bei dem ich nicht mehr weiter komme.
Folgende Situation:
Ich führe in einem Workflow eine Executable aus, welche wiederum einen Generierungsauftrag startet - soweit so gut. Nachdem dieser durch ist, benötige ich den URL Creator um URLs von gewisse Elemente (z.B. von Bilder) der deployten Seite (anhand der PageRef) zu erhalten.
Den UrlCreator hole ich mir wie folgt:
UrlCreatorSpecification urlSpecification = generateTask.getUrlCreatorSpecification();
urlCreator = urlSpecification.createUrlCreator();
Sobald ich jedoch meinen Workflow laufen lasse erhalte ich eine NPE mit folgendem StackTrace:
at de.espirit.firstspirit.generate.PluggableUrlCreator.getAbsolutePath(PluggableUrlCreator.java:280)
at de.espirit.firstspirit.generate.PluggableUrlCreator.getFilename(PluggableUrlCreator.java:259)
at de.materna.firstspirit.XXX.analysePageRef(XXX.java:231)
at de.materna.firstspirit.XXX.<init>(XXX.java:73)
at de.materna.firstspirit.XXX.XXX(XXX.java:39)
at de.materna.firstspirit.XXX.execute(XXX.java:19)
at de.espirit.firstspirit.client.gui.applications.ApplicationTabRegistry$IdentifiableExecutable.execute(ApplicationTabRegistry.java:104)
at sun.reflect.GeneratedMethodAccessor72.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at bsh.Reflect.invokeMethod(Reflect.java:166)
at bsh.Reflect.invokeObjectMethod(Reflect.java:99)
at bsh.Name.invokeMethod(Name.java:858)
at bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java:75)
at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:102)
at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47)
at bsh.BSHBlock.evalBlock(BSHBlock.java:130)
at bsh.BSHBlock.eval(BSHBlock.java:80)
at bsh.BshMethod.invokeImpl(BshMethod.java:371)
at bsh.BshMethod.invoke(BshMethod.java:267)
at bsh.BshMethod.invoke(BshMethod.java:170)
at bsh.PreparsedScript.invoke(PreparsedScript.java:66)
at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.execute(BeanshellScriptEngine.java:100)
at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.execute(BeanshellScriptEngine.java:84)
at de.espirit.firstspirit.client.gui.applications.ApplicationTabRegistry$IdentifiableExecutable.execute(ApplicationTabRegistry.java:104)
at de.espirit.firstspirit.server.taskmanagement.TaskImpl.doTransition(TaskImpl.java:1147)
at de.espirit.firstspirit.server.taskmanagement.TaskImpl.doTransition(TaskImpl.java:1084)
at de.espirit.firstspirit.workflow.WorkflowAgentImpl$TransitionRunnable.run(WorkflowAgentImpl.java:688)
at de.espirit.firstspirit.client.gui.util.GuiUtil$RunnableWrapper.run(GuiUtil.java:1959)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Ich hoffe ich konnte mein Problem verständlich klar darstellen.
FS-Version: 5.2.212
Viele Grüße aus Dresden
Marcel
Problem gefunden - lag an einem internen Konfikt.
Hallo Marcel,
ich vermute es liegt daran, dass der URLCreator kein TemplateSet und keine Sprache hat (es sei denn es fehlt ein bischen Code in deinem Beispiel).
Den URLCreator würde ich aus dem GenerateTask über den ScheduleContext holen:
urlCreator = context.getProperty("#urlCreator");
Gruß,
Sebastian
Hi Sebastian,
hierbei komm ich ja genau nicht weiter. Da die Executable in einem Workflow getriggert wird, habe ich ja "nur" den WorkflowScriptContext.
Anhand des GenerateTask habe ich keine Möglichkeit bis jetzt gefunden, den UrlCreator daraus zu extrahieren.
Viele Grüße
Marcel
Hallo Marcel,
Ich hatte das mit dem Workflow nicht gelesen, sorry. Mein Test im Workflow verlief aber positiv mit folgendem Code.
// Assume your GenerateTask comes from a ScheduleEntry
generateTask = context.getUserService().getConnection().getAdminService().getScheduleStorage().getScheduleEntries(context.getProject()).get(0).getTasks().get(0);
// Get URLCreator
urlSpecification = generateTask.getUrlCreatorSpecification();
urlCreator = urlSpecification.createUrlCreator();
// Obtain necessary values
ss=context.getUserService().getStore(Type.SITESTORE, true); // true should be necessary at this point
page=ss.getChildren(PageRef.class, true).getFirst(); // Any Ref
p=context.getProject();
l=p.getMasterLanguage();
ts=p.getTemplateSets().get(0);// 0 is HTML in my case
// Get URL
url = urlCreator.getUrl(page,l, ts, PageParams.SINGLE_PAGE_PARAMS,de.espirit.firstspirit.generate.UrlCreator.ABSOLUTE_URL);
context.logError(url);
Hallo Sebastian,
führst du dies als FS-Skript aus? Wenn ja,dann funktioniert dies. Lagere dies, wie oben beschrieben, mal in ein Modul aus - dann sollte die NPE kommen.
VG Marcel
Hallo Marcel,
ich habs in der Tat als Beanshell Script getestet, aber es funktioniert auch im Modul (grade nochmal probiert) .
Evtl. ist deine Modul config falsch. Hier mal die aus meinem Test:
<?xml version="1.0" encoding="UTF-8"?>
<module>
<name>XYZ</name>
<displayname>XYZ</displayname>
<version>0.9.1</version>
<description>A Test</description>
<vendor>Fancy Name</vendor>
<scope>public</scope>
<components>
<library>
<name>Utility Core</name>
<description>Module Core Classes</description>
<resources>
<resource>lib/test-jar-with-dependencies.jar</resource>
</resources>
</library>
</components>
</module>
Problem gefunden - lag an einem internen Konfikt.