@ doc_180 hatte das richtige Konzept, außer dass er sich auf Zahlen konzentriert, während das Originalplakat Probleme mit Zeichenfolgen hatte.
Die Lösung besteht darin, die mx.rpc.xml.XMLEncoder
Datei zu ändern . Dies ist Zeile 121:
if (content != null)
result += content;
(Ich habe mir das Flex 4.5.1 SDK angesehen. Die Zeilennummern können in anderen Versionen abweichen.)
Grundsätzlich schlägt die Validierung fehl, da "Inhalt null" ist und Ihr Argument daher nicht zum ausgehenden SOAP-Paket hinzugefügt wird. Dadurch wird der fehlende Parameterfehler verursacht.
Sie müssen diese Klasse erweitern, um die Validierung zu entfernen. Dann gibt es einen großen Schneeball in der Kette, der SOAPEncoder ändert, um Ihren modifizierten XMLEncoder zu verwenden, und dann Operation ändert, um Ihren modifizierten SOAPEncoder zu verwenden, und dann WebService, um Ihre alternative Operationsklasse zu verwenden.
Ich habe ein paar Stunden damit verbracht, aber ich muss weitermachen. Es wird wahrscheinlich ein oder zwei Tage dauern.
Möglicherweise können Sie einfach die XMLEncoder-Zeile reparieren und Affen-Patches durchführen , um Ihre eigene Klasse zu verwenden.
Ich werde auch hinzufügen, dass, wenn Sie mit ColdFusion auf RemoteObject / AMF umsteigen, die Null ohne Probleme übergeben wird.
16.11.2013 Update :
Ich habe einen weiteren Neuzugang zu meinem letzten Kommentar zu RemoteObject / AMF. Wenn Sie ColdFusion 10 verwenden; Dann werden Eigenschaften mit einem Nullwert für ein Objekt aus dem serverseitigen Objekt entfernt. Sie müssen also vor dem Zugriff prüfen, ob Eigenschaften vorhanden sind, da sonst ein Laufzeitfehler angezeigt wird.
Überprüfen Sie wie folgt:
<cfif (structKeyExists(arguments.myObject,'propertyName')>
<!--- no property code --->
<cfelse>
<!--- handle property normally --->
</cfif>
Dies ist eine Verhaltensänderung gegenüber ColdFusion 9. Dabei würden die Null-Eigenschaften zu leeren Zeichenfolgen.
Bearbeiten 06.12.2013
Da es eine Frage zur Behandlung von Nullen gab, finden Sie hier eine kurze Beispielanwendung, um zu demonstrieren, wie sich eine Zeichenfolge "null" auf das reservierte Wort null bezieht.
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" initialize="application1_initializeHandler(event)">
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
protected function application1_initializeHandler(event:FlexEvent):void
{
var s :String = "null";
if(s != null){
trace('null string is not equal to null reserved word using the != condition');
} else {
trace('null string is equal to null reserved word using the != condition');
}
if(s == null){
trace('null string is equal to null reserved word using the == condition');
} else {
trace('null string is not equal to null reserved word using the == condition');
}
if(s === null){
trace('null string is equal to null reserved word using the === condition');
} else {
trace('null string is not equal to null reserved word using the === condition');
}
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
</s:Application>
Die Trace-Ausgabe lautet:
null string ist nicht gleich null reserviertem Wort unter Verwendung der Bedingung! =
null string ist nicht gleich null reserviertem Wort unter Verwendung der == Bedingung
null string ist nicht gleich null reserviertem Wort unter Verwendung der Bedingung ===