Search the FirstSpirit Knowledge Base
Hallo,
wir wollen mittels "class" aus dem Ausgabekanal heraus die Methode einer Java-Klasse aufrufen. Die Methode benötigt den BaseContext, um auf die Masterlanguage und die Projekteinstellungen zugreifen zu können. Zu diesem Zweck haben wir den Kontext mittels #global.context übergeben. Die Signatur der aufgerufenen Methode sieht etwa so aus:
public static String someMethod(BaseContext context, PageRef pageRef)
Der entspreche Aufruf im Ausgabekanal sieht in etwa so aus:
$CMS_TRIM(level:4)$
$CMS_VALUE(class("some.package.SomeClass").someMethod(#global.context, ref))$
$CMS_END_TRIM$
Bei Generieren der Seiten wird beim Aufruf der Methode eine Fehlermeldung ausgegeben, die allerdings wenig aussagekräftig ist (es wird nur der Name der Klasse ausgegeben). Wir vermuten, dass es am Typ des durch #global.context zurückgegebenen Objekts liegt, der nicht BaseContext ist, sondern etwas anderes.
Wir können zwar über die pageRef an UserService kommen und so an die Projekteinstellungen und die Masterlanguage, aber dies ist nicht der empfohlene Weg und auch etwas "eklig". Unsere Frage: Gibt es einen Weg, vom Ausgabekanal aus ein BaseContext-Objekt an eine Java-Klasse zu übergeben oder einen eleganteren (empfohlenen) Weg, um von der Java-Klasse aus direkt auf die Projekteinstellungen bzw. die Masterlanguage zuzugreifen?
Viele Grüße
wir wollen mittels "class" aus dem Ausgabekanal heraus die Methode einer Java-Klasse aufrufen. Die Methode benötigt den BaseContext, um auf die Masterlanguage und die Projekteinstellungen zugreifen zu können. Zu diesem Zweck haben wir den Kontext mittels #global.context übergeben
#global.context ist der aktuelle Variablenkontext der Generierung, das ist nicht vom Typ BaseContext.
#global wäre in eurem Fall der korrekte Übergabewert für den Parameter.
[EDIT]
Kann es sein das die "Fehlermeldung" aus eurem Code kommt?
Hi,
Ronny Rößler schrieb:
der nicht BaseContext ist, sondern etwas anderes.
was ist denn dieses "etwas anderes"?
Gruß
Stefan
Hallo,
das wissen wir leider nicht, da die Fehlermeldung, wie gesagt, keine weiteren Informationen liefert. Mittlerweile haben wir aber herausgefunden, dass es offensichtlich nicht an der #global.context Variable liegt. Als wir den oben beschriebenen (nicht empfohlenen) Weg ausprobiert haben, gab es dieselben Fehlermeldungen. Deswegen hier noch zwei weitere Infos:
Viele Grüße
Hi,
meine Rückfrage war wohl nicht klar formuliert. Ich hätte gerne den Klassennamen gewusst, eine komplette Angabe der Fehlermeldung wäre natürlich noch besser.
zu 1.) Ich kann hier kein Problem erkennen. PageRef und TargetReference stehen in keinerlei Vererbungsbeziehung.
zu 2.) Diese Meldung sagt aus, das ein im Ausdruck referenziertes Objekt (bzw. der Rückgabewert eines Methodenaufruf's) null lieferte.
Gruß
Stefan
Die Fehlermeldung sieht in etwa so aus:
ERROR 23.09.2013 18:40:36.444{g-sec=110056,g-node=110051} (de.espirit.firstspirit.generate.SiteProduction): some.package.SomeClass
WARN 23.09.2013 18:40:36.444{g-sec=110056,g-node=110051} (de.espirit.firstspirit.generate.SiteProduction): Replacing null value with empty default!
Viele Grüße
wir wollen mittels "class" aus dem Ausgabekanal heraus die Methode einer Java-Klasse aufrufen. Die Methode benötigt den BaseContext, um auf die Masterlanguage und die Projekteinstellungen zugreifen zu können. Zu diesem Zweck haben wir den Kontext mittels #global.context übergeben
#global.context ist der aktuelle Variablenkontext der Generierung, das ist nicht vom Typ BaseContext.
#global wäre in eurem Fall der korrekte Übergabewert für den Parameter.
[EDIT]
Kann es sein das die "Fehlermeldung" aus eurem Code kommt?
Hallo,
das Thema hat sich erledigt, wir hatten währned der Entwicklung auf einen anderen Branch gewechslet und die kompilierten Module des alten Branches installiert. Die Fehlermeldung besagte also wohl, dass die Klasse nicht vorhanden ist. Wir würden uns da trotzdem eine aussagekräftigere Fehlermeldung wünschen, so dass der Fehler leichter zu erkennen ist.
Der Tipp, #global statt #global.context zu nehmen war trotzdem sehr hilfreich, da wir hier vermutlich auf Schwireigkeiten gestoßen wären. Vielen Dank!
Viele Grüße
Die Fehlermeldung besagte also wohl, dass die Klasse nicht vorhanden ist. Wir würden uns da trotzdem eine aussagekräftigere Fehlermeldung wünschen, so dass der Fehler leichter zu erkennen ist.
Hier wäre ein Einschalten des erweiterten Loggins hilfreich gewesen:
$CMS_SET(#global.debugMode, true)$
Damit wäre die "java.lang.ClassNotFoundException" angezeigt worden.