@ doc_180 aveva il concetto giusto, tranne per il fatto che era focalizzato sui numeri, mentre il poster originale aveva problemi con le stringhe.
La soluzione è cambiare il mx.rpc.xml.XMLEncoder
file. Questa è la linea 121:
if (content != null)
result += content;
(Ho esaminato l'SDK di Flex 4.5.1; i numeri di riga potrebbero differire in altre versioni.)
Fondamentalmente, la validazione fallisce perché 'content is null' e quindi il tuo argomento non viene aggiunto al pacchetto SOAP in uscita; causando così l'errore del parametro mancante.
Devi estendere questa classe per rimuovere la validazione. Quindi c'è una grande palla di neve lungo la catena, modificando SOAPEncoder per usare il tuo XMLEncoder modificato, quindi modificando Operazione per usare il tuo SOAPEncoder modificato, e quindi moidfing WebService per usare la tua classe operativa alternativa.
Ci ho passato alcune ore, ma devo andare avanti. Probabilmente ci vorranno un giorno o due.
Potresti essere in grado di correggere la linea XMLEncoder ed eseguire alcune patch scimmia per utilizzare la tua classe.
Aggiungerò anche che se si passa all'uso di RemoteObject / AMF con ColdFusion, il null viene passato senza problemi.
16/11/2013 aggiornamento :
Ho un'aggiunta più recente al mio ultimo commento su RemoteObject / AMF. Se si utilizza ColdFusion 10; quindi le proprietà con un valore null su un oggetto vengono rimosse dall'oggetto lato server. Quindi, devi controllare l'esistenza delle proprietà prima di accedervi o otterrai un errore di runtime.
Controlla in questo modo:
<cfif (structKeyExists(arguments.myObject,'propertyName')>
<!--- no property code --->
<cfelse>
<!--- handle property normally --->
</cfif>
Questo è un cambiamento nel comportamento rispetto a ColdFusion 9; dove le proprietà null si trasformerebbero in stringhe vuote.
Modifica il 06/12/2013
Dato che c'era una domanda su come vengono trattati i null, ecco una rapida applicazione di esempio per dimostrare come una stringa "null" si collegherà alla parola riservata 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>
L'output della traccia è:
la stringa null non è uguale alla parola riservata null usando la condizione! =
la stringa null non è uguale alla parola riservata null utilizzando la condizione ==
la stringa null non è uguale alla parola riservata null utilizzando la condizione ===