Come passare "Null" (un vero cognome!) a un servizio web SOAP in ActionScript 3

Abbiamo un dipendente il cui cognome è Null. La nostra applicazione di ricerca dei dipendenti viene uccisa quando quel cognome viene usato come termine di ricerca (il che accade abbastanza spesso ora). L'errore ricevuto (grazie Fiddler!) è:

-- lingua: lang-none -->

<soapenv:Fault>
   <faultcode>soapenv:Server.userException</faultcode>
   <faultstring>coldfusion.xml.rpc.CFCInvocationException: [coldfusion.runtime.MissingArgumentException : The SEARCHSTRING parameter to the getFacultyNames function is required but was not passed in.]</faultstring>

Carino, eh?

Il tipo di parametro è stringa.

Sto usando:

  • WSDL (SOAP)
  • Flex 3.5
  • ActionScript 3
  • ColdFusion 8

Notate che l'errore non si verifica quando si chiama il webservice come oggetto da una pagina ColdFusion.

Sulla nota di xkcd, il sito di Bobby Tables ha buoni consigli per evitare l'interpretazione impropria dei dati utente (in questo caso, la stringa "Null") nelle query SQL in vari linguaggi, tra cui ColdFusion.

Non è chiaro dalla domanda che questa sia la fonte del problema, e data la soluzione notata in un commento alla prima risposta (incorporare i parametri in una struttura) sembra probabile che fosse qualcos'altro.

Commentari (0)

Il problema potrebbe essere nel codificatore SOAP di Flex. Provate ad estendere il codificatore SOAP nella vostra applicazione Flex e fate il debug del programma per vedere come viene gestito il valore nullo.

La mia ipotesi è che sia passato come NaN (Not a Number). Questo incasina il processo di unmarshalling dei messaggi SOAP a volte (in particolare nel server JBoss 5...). Ricordo di aver esteso il codificatore SOAP e di aver eseguito un controllo esplicito su come NaN viene gestito.

Commentari (1)

Come hack, si potrebbe considerare di avere una gestione speciale sul lato client, convertendo 'Null' stringa in qualcosa che non si verificherà mai, per esempio, XXNULLXX e riconvertendo sul server.

Non è carino, ma potrebbe risolvere il problema per un caso limite del genere.

Commentari (5)