@ doc_180 avait le bon concept, sauf qu'il se concentre sur les nombres, alors que l'affiche originale avait des problèmes avec les chaînes.
La solution est de changer le mx.rpc.xml.XMLEncoder
fichier. Il s'agit de la ligne 121:
if (content != null)
result += content;
(J'ai regardé Flex 4.5.1 SDK; les numéros de ligne peuvent différer dans d'autres versions.)
Fondamentalement, la validation échoue car «le contenu est nul» et votre argument n'est donc pas ajouté au paquet SOAP sortant; provoquant ainsi l'erreur de paramètre manquante.
Vous devez étendre cette classe pour supprimer la validation. Ensuite, il y a une grosse boule de neige dans la chaîne, modifiant SOAPEncoder pour utiliser votre XMLEncoder modifié, puis modifiant Operation pour utiliser votre SOAPEncoder modifié, puis moidfying WebService pour utiliser votre autre classe Operation.
J'y ai passé quelques heures, mais je dois continuer. Cela prendra probablement un jour ou deux.
Vous pourrez peut-être simplement corriger la ligne XMLEncoder et faire quelques patches de singe pour utiliser votre propre classe.
J'ajouterai également que si vous passez à l'utilisation de RemoteObject / AMF avec ColdFusion, la valeur null est transmise sans problème.
Mise à jour du 16/11/2013 :
J'ai un ajout récent à mon dernier commentaire sur RemoteObject / AMF. Si vous utilisez ColdFusion 10; puis les propriétés avec une valeur nulle sur un objet sont supprimées de l'objet côté serveur. Donc, vous devez vérifier l'existence des propriétés avant d'y accéder ou vous obtiendrez une erreur d'exécution.
Vérifiez comme ceci:
<cfif (structKeyExists(arguments.myObject,'propertyName')>
<!--- no property code --->
<cfelse>
<!--- handle property normally --->
</cfif>
Il s'agit d'un changement de comportement par rapport à ColdFusion 9; où les propriétés nulles se transformeraient en chaînes vides.
Modifier le 06/12/2013
Puisqu'il y avait une question sur la façon dont les null sont traités, voici un exemple rapide d'application pour montrer comment une chaîne "null" se rapportera au mot réservé null.
<?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>
La sortie de trace est:
la chaîne nulle n'est pas égale au mot réservé nul en utilisant la condition! =
la chaîne nulle n'est pas égale au mot réservé nul en utilisant la condition ==
la chaîne nulle n'est pas égale au mot réservé nul en utilisant la condition ===