2009-03-14 6 views
2

coldfusion.compiler.FactoredNodeAggregation cannot be cast to coldfusion.compiler.ASTfunctionDefinitionColdfusion Fehler: coldfusion.compiler.FactoredNodeAggregation kann nicht auf coldfusion.compiler.ASTfunctionDefinition gegossen wird

ich die obige Fehlermeldung erhalten, wenn einen wirklich zu ersetzen versucht, wirklich alten Vermächtnis benutzerdefinierten Tag mit einem neuen benutzerdefinierten Tags, das einige wesentlichen Workflow hat Verbesserungen. Ich habe nur eine Idee, wie das zu debuggen: kommentieren Sie verschiedene Teile des Codes (binärer Suchstil), bis es kompiliert wird, meine Suche einzuschränken, bis ich den Problemcode finde.

Hat jemand sonst diesen Fehler schon einmal gesehen? Irgendeine Idee, was es möglicherweise sein könnte? Im Kontext klingt es so, als würde ich ... etwas ... als eine Funktion verwenden, die nicht als Funktion definiert ist. Das klingelt nicht, also werde ich die binäre Suchidee ausprobieren.

Aktualisierung: Es läuft auf CF 8.0.1 und verwendet überhaupt keine <cfscript> Blöcke. Mit der binären Suche nach dem Auskommentieren habe ich es auf CFThread eingegrenzt, das einen Hintergrund-Thread startet, der nie wieder der Seite beitritt (per Design).

Wenn ich den gesamten Inhalt des Threads auskommentieren, verschwindet der Fehler (so scheint das cfthread-Tag selbst keine Probleme zu haben ...). Wenn ich den Inhalt des Threads in seine eigene Vorlage kopiere, wird diese Vorlage gut kompiliert (so scheint der Thread-Inhalt keine Probleme zu haben ...) ... also ... theoretisch sollte es funktionieren? Ich weiß es nicht. Das bin ich mit meinen Armen in der Luft. (WTF?)

Ich glaube, ich habe diese Idee bereits widerlegt, indem ich einen kleinen Abschnitt ohne den Fehler rückgängig gemacht habe, aber ein CFThread sollte Zugriff auf lokale benutzerdefinierte Tags haben, die die Vorlage zum Erstellen des Threads haben würde ? Also, wenn es foo.cfm gibt, könnte es von der Seite als <cf_foo> zugegriffen werden, und der Thread könnte das gleiche tun?

+0

Welche Version von CF? Verwendet das Tag eine Menge ? – kevink

Antwort

3

In der letzten Woche war ich mit dem ColdFusion Engineering-Team von Adobe über dieses Problem in Verbindung und sie bestätigten mir, dass dies ein Fehler in ColdFusion ist.

Insbesondere wenn die Anzahl der Codezeilen innerhalb des Tag-Textkörpers zu groß war, führte dies zu einem Kompilierungsfehler. Die Problemumgehung, die ich ein oder zwei Tage vor meiner Antwort entdeckt habe, ist die Verwendung eines <cfinclude />, um den Thread-Inhalt aus einer anderen Datei zu importieren. oder um den Code irgendwo in eine Methode zu schreiben und diese Methode innerhalb des Thread-Körpers aufzurufen. (Vermutlich würde auch ein benutzerdefiniertes Tag oder andere clevere Methoden der Kapselung funktionieren.) Das erklärt den Teil des Ganzen, der mich völlig verrückt machte: dass das Auskommentieren verschiedener Teile des Thread-Körpers es manchmal kompilieren würde ... und jetzt weiß ich es war, weil genug des Gewindekörpers auskommentiert wurde.

Sie berichten, dass sie den Fehler behoben haben, so dass ich davon ausgehen, es wird im nächsten kumulativen Hot-Fix fixiert werden (falls vorhanden), und in Coldfusion 9.

+0

Ich habe deine Antwort gewählt, aber könntest du deine eigene Antwort akzeptieren? – rip747

+0

Ich hatte den Eindruck, dass du deine eigene Antwort nicht akzeptieren kannst. Vielleicht war das eine Regel in der Beta aber Sie können jetzt? Nicht sicher ... Ich habe es jetzt akzeptiert. Danke für den Anstupser. –

+1

Sie können Ihre eigene Antwort nach 48 Stunden annehmen. – Tomalak

0

Oooh, das habe ich noch nie gesehen.

Je nachdem, was der benutzerdefinierte Tag tut, anstatt verschiedene Teile zu kommentieren heraus, könnten Sie versuchen, mit cfabort - gleicher Technik, aber nur eine Linie eher zu ändern, als uncommenting und wieder zu kommentieren (die knifflig und zeitraubend sein).

Auch können Sie den benutzerdefinierten Tag in Isolation testen, mit völlig vereinfachten Argumenten/etc?


Wenn Sie in der Lage sind, den Code zu posten, könnte es etwas Seltsames sein, das an einem frischen Augenpaar hervorspringt?

+0

Da der Problemcode in einem Hintergrundthread ausgeführt wird, und wie ich in meinem Update auf die ursprüngliche Frage notiert habe, wird das Kopieren des Inhalts des Threads in seine eigene Vorlage problemlos durchgeführt. Ich denke nicht, dass cfaborts helfen wird. :( –

0

Dieser Fehler tritt normalerweise auf, wenn Sie eine Funktion haben, die auf remote eingestellt ist. irgendwie lustig, dass Sie es mit einem benutzerdefinierten Tag obwohl bekommen. Sind Sie sicher, dass das benutzerdefinierte Tag keine Funktionen enthält? Kannst du den Code posten?

+0

Keine UDFs hier.: - \ –

0

Seltsam, dass es ein Kompilierungsfehler ist. Wenn die Codebasis nicht zu riesig ist, würde ich sicherstellen, dass alle Variablen im Thread und die sogenannten UDFs explizit im Bereich liegen.

nächste würde ich so viel extern referenzierten Daten in das Gewinde Argument Rahmen bewegen, um die Wechselwirkungen mit der Seite zu isolieren.

Schließlich, wenn das nicht klärt, würde ich versuchen, die Namen jeder Variablen, Funktion und udf den Thread greift ein bisschen mit einem Test-Präfix, nur um sicherzustellen, dass Sie einen Fehler, wo einer Ihrer vars oder funcs verursacht eine Namespace-Kollision in der jvm im Kontext der ursprünglichen Seite.

Schwieriges Problem.

0

Haben Sie die kompilierten Klassendateien gelöscht und die ursprüngliche Quelle in einer neuen Datei gespeichert, nur für den Fall, dass beim Speichern etwas Seltsames passiert ist?

0

Haben Sie versucht, CF8.01 neu zu installieren? Vielleicht wurden einige Dateien beschädigt?

1

Da kann ich noch nicht kommentieren , Adam, ist es wirklich ein Bug mit CF oder mit der JVM? Es gibt ein ähnliches Limit, wie viele Codezeilen innerhalb einer CFFUNCTION kompiliert werden können, aber das Limit liegt wirklich in der JVM, nicht im CF-Tag.

+0

Ich habe dich gewählt, hoffentlich hilft dir das früher, Kommentare zu schreiben.) Was Adobe mir sagte war, dass es ein Fehler war, und dass sie es behoben haben. Um zu sagen, "ein Fehler in der Code-Generierung" - so ist meine beste Vermutung, dass es ein Problem ist, die CFML zu JSP zu konvertieren. Das ist alles, was ich sicher sagen kann. –

Verwandte Themen