- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Zugriff auf BaseContext aus dem Ausgabekanal
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
- Labels:
-
Developers
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
Ronny Rรถรler schrieb:
der nicht BaseContext ist, sondern etwas anderes.
was ist denn dieses "etwas anderes"?
Gruร
Stefan
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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:
- Die aufgerufene Methode ist in der Java-Klasse รผberladen. es gibt sie einmal mit PageRef und einmal mit TargetReference als Parameter. Letztere ruft erstere mit dem Parameter targetRef.getPageRef() auf. Ist das problematisch?
- Auf jede der o. g. Fehlermeldungen folgt eine "Replacing null value with empty default!"-Warnung.
Viele Grรผรe
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.

