E4X ist dem Namespace bekannt. Um auf das Element zuzugreifen, das sich in einem Nicht-Standard-Namespace befindet, müssen Sie entweder den Namespace/Präfix deklarieren oder einen Platzhalter * verwenden.
Edit: Einige Debugging in der ESB selbst zeigte mir, dass wir das Wort "Return" nicht verwenden können. Dies ist ein reserviertes Wort und nicht erlaubt, nicht einmal als Teil der Abfragezeichenfolge, um das "return" -Element von Ihrem XML-Code abzurufen.
Lets für einen Moment annehmen, dass das Element "Wert" statt genannt wurde, dann würde der Code kompilieren und zu arbeiten wie folgt:
var ns = new Namespace('http://main.wsmediator');
var xmlValue = mc.getPayloadXML()..ns::value.toString();
Eine weitere Option ist die Wildcard zu verwenden:
var return = mc.getPayloadXML()..*::value.toString();
Das Ändern der XML-Payload, um JavaScript-Standards zu entsprechen, ist jedoch keine sehr schöne und möglicherweise keine praktikable Lösung. Stattdessen können wir versuchen, das Element auf andere Weise zu erreichen.
<inSequence>
<script language="js">
var ns = new Namespace('http://main.wsmediator');
var value = mc.getPayloadXML().*.toString();
mc.setProperty("Asterisk", value);
</script>
<log>
<property name="Asterisk" expression="get-
property('Asterisk')"/>
</log>
<respond/>
</inSequence>
Das getTestMethodResponse Element ist das Wurzelelement, wenn Sie tun mc.getPayloadXML(), das Sternchen Sie die Kinder dieses Element gibt. Dies funktioniert, ist aber nicht sehr schön, weil es auf einigen Annahmen über die Nachrichtenstruktur basiert.
Eine andere Option könnte sein, komplett auf den Script-Mediator zu verzichten und stattdessen eine PayloadFactory zu verwenden. Zum Beispiel:
<payloadFactory media-type="json">
<format>
{"return":"$1"}
</format>
<args>
<arg xmlns:ns="http://main.wsmediator"
evaluator="xml"
expression="//ns:return"/>
</args>
</payloadFactory>
Für mehr auf E4X, überprüfen here Für mehr auf PayloadFactoryMediator Check here
Danke für die Anregung @ophychius aber dieser Ansatz entweder nicht funktioniert hat. WSO2 Developer Studio ließ mich die Mediationslogik nicht speichern. Es hat etwas mit dieser Zeile zu tun 'var zurück = mc.getPayloadXML() ..: :(ns: zurück) .toString();' – StO
Danke, ich habe es auch so versucht. Wissen Sie, ob es im Developer Studio Protokolle gibt, die ich überprüfen könnte? – StO
Haben Sie versucht, das Namespacepräfix durch einen Platzhalter zu ersetzen? Wenn es immer noch Probleme verursacht, können Sie den vollständigen Fehler/Warnung teilen, die Developer Studio Ihnen gibt? – ophychius