4 Stimmen

Coldfusion onCFCRequest Ändern des Rückgabetyps von XML in WDDX

Meine Kundenbasis ist endlich von Coldfusion 8 weg, so dass ich jetzt die onCFCRequest-Ereignis von Coldfusion 9 nutzen kann. Ich habe ein Test-Szenario eingerichtet und mein Ergebnis entspricht nicht meinen Erwartungen. Ich habe eine Methode, die ich aufrufe, die eine gültige XML-Antwort produziert, wie folgt...

Response Header: Content-Type:application/xml;charset=UTF-8
Response:

 ...

Nun, nachdem ich das onCFCRequest-Ereignis eingeführt habe, bekomme ich dies zurück (was meine Rasterspalten zerbricht)...

Response Header: Content-Type:application/xml;charset=UTF-8
Response:

Hier ist das Ereignis...

        // OnCFCRequest Sicherheitslückenbehebung wie hier detailliert beschrieben: http://blog.adamcameron.me/2013/04/its-easy-to-create-security-hole-in.html
        var o = createObject(ARGUMENTS.cfc);
        var metadata = getMetadata(o[ARGUMENTS.method]);

        if (structKeyExists(metadata, "access") && metadata.access == "remote"){
            return invoke(o, ARGUMENTS.method, ARGUMENTS.args);
        }else{
            throw(type="InvalidMethodException", message="Ungültige Methode aufgerufen", detail="Die Methode #method# existiert nicht oder ist remotely nicht zugänglich");
        }

Wie kann ich erreichen, dass onCFCRequest die Antwort im gleichen Format durchlässt, in dem die entfernte Funktion zurückgibt?

Ich kenne diesen Artikel: http://www.bennadel.com/blog/1647-Learning-ColdFusion-9-Application-cfc-OnCFCRequest-Event-Handler-For-CFC-Requests.htm

Ich werde wahrscheinlich versuchen, das zuerst zu tun, aber zuerst möchte ich herausfinden, warum ich die Antwort nicht einfach im gleichen Format durchreichen kann.

1voto

Henry Punkte 32409

Ich habe onCfcRequest noch nie benutzt, aber du hast recht, es ist irgendwie dumm.

Scheint so, als würde onCfcRequest auch das returnFormat "schlucken", daher müssen Sie Ihre eigene returnFormat-Erkennung implementieren und in das richtige Format serialisieren.

Der Rückgabetyp der OnCFCRequest()-Methode sollte VOID sein, genau wie bei seinem OnRequest()-Gegenstück. Das Zurückgeben eines Werts aus dieser Methode scheint keine Rolle zu spielen bei dem, was tatsächlich in der Seitenantwort zurückgegeben wird. Um einen Wert zurückzugeben, müssen Sie ihn entweder im Methodenkörper ausgeben oder über CFContent zurückstreamen.

Zitiert von: http://www.bennadel.com/blog/1647-Learning-ColdFusion-9-Application-cfc-OnCFCRequest-Event-Handler-For-CFC-Requests.htm

Zum Beispiel.

...
var result = invoke(o, ARGUMENTS.method, ARGUMENTS.args);
...

#result#

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X