Search the FirstSpirit Knowledge Base
Ich würde gerne Inhalte direkt oder über eine Vorlage in einem BeanShell Skript generieren, damit ich diese z.B. für einen Export weitervenden kann. Ich weiß, dass dich die Generierung von Templatecode über die Invoker-Klasse durchführen kann. Die Klasse benötigt Evualator, für welchen ich die PreviewProduction-Klasse verwende. Wenn ich dies innerhalb meiner IDE mit angefügter fs-server.jar durchführe, funktioniert es ohne Probleme. Versuche ich aber das Ganze innerhalb eines BeanShell Skriptes laufen zu lassen, so kommt es zu folgenden Fehler:
ERROR 09.12.2010 15:21:34.837 (de.espirit.firstspirit.client.AWTDispatchingEventQueue): Error during dispatching of java.awt.event.MouseEvent[MOUSE_RELEASED,(36,43),absolute(568,401),button=1,modifiers=Button1,clickCount=1] on panel1
FSVersion=4.2.219.38784#2114;JDK=1.6.0_18 32bit Sun Microsystems Inc.;OS=Windows 7 6.1 x86;Date=09.12.2010 15:21:34
java.lang.IllegalAccessError: class de.espirit.firstspirit.generate.PreviewProduction$1 cannot access its superclass de.espirit.firstspirit.generate.PreviewUrlCreator
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at de.espirit.firstspirit.client.io.RemoteClassLoader.findClass(RemoteClassLoader.java:68)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
at java.lang.Class.getConstructors(Unknown Source)
...
Ich vermute, dass es hier am ClassLoader liegt. Gibt es hier eine Möglichkeit das Problem zu umgehen oder gibt es eine andere Möglichkeit zum manuellen generieren des Inhalts bzw. einer Vorlage innerhalb eines BeanShell Skriptes?
Hier noch mein Test BeanShell Skript:
//!BeanShell
import java.io.StringWriter;
import de.espirit.firstspirit.parser.eval.Invoker;
import de.espirit.firstspirit.generate.PreviewProduction;
import de.espirit.firstspirit.access.UserService;
UserService userService = context.getUserService();
String text = "<DOM>Beispieltext</DOM>";
boolean release = true; // Vorschau oder Live?
// Evaluator erzeugen. Diesen auch nutzen, wenn das Liveergebnis generiert werden soll
PreviewProduction evaluator = new PreviewProduction(null, userService, release, userService.getProject()
.getMasterLanguage(), userService.getProject().getTemplateSets().get(0), null);
evaluator.setOut(new StringWriter());
// Der Invoker ruft den entsprechenden Renderer für das Objekt auf
Invoker.evalMethod("print", text, Collections.emptyList(), evaluator );
print(eval.getOut().toString());
Zum einen gibt es dafür keine API. Ausserdem sind die meisten Klassen für die Generierung im fs-client.jar nicht enthalten.
Ich habe mal ein kurzes Bespiel gemacht, wie man Template-Code im Client ausführen kann, weiß aber nicht, ob das für ihren Anwendungsfall hilft - Seiten generieren kann man darüber nicht...
Erstmal Vielen Dank für das Beispiel! Leider löst es nicht mein Problem, da Elemente wie DOM Editoren nicht evaluiert, sondern einfach nur in Strings (sieht nach einem einfachen toString() Aufruf aus) umgewandelt werden.
Das liegt daran, das die meisten Klassen für die Generierung im fs-client.jar nicht enthalten sind.
Ich wollte nur mein Problem verdeutlichen, dass die Dateien nur auf dem Server liegen ist mir bewusst 🙂
Gibt es denn eine Möglichkeit die URL einer Seite in der Vorschau innerhalb eines Scriptes aufzurufen? Wobei weniger die URL das Problem wäre, sonder eher die Session ID.
Die Vorschau-URL bekommen Sie über Methoden aus dem Interface Previewable, ein Ticket über Connection.createTicket().
Die URL Generierung funktioniert und löst somit mein Problem. Vielen Dank!