Hur du skickar "Null" (ett riktigt efternamn!) till en SOAP-webbtjänst i ActionScript 3

Vi har en anställd vars efternamn är Null. Vårt program för att söka efter anställda dödas när det efternamnet används som sökbegrepp (vilket händer ganska ofta nu). Felet som vi får (tack Fiddler!) är följande:

<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>

Sött, va?

Parametertypen är string.

Jag använder:

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

Observera att felet inte uppstår när du anropar webbtjänsten som ett objekt från en ColdFusion-sida.

xkcd-notisen har Bobby Tables-webbplatsen goda råd för att undvika felaktig tolkning av användardata (i det här fallet strängen "Null") i SQL-förfrågningar i olika språk, inklusive ColdFusion.

Det framgår inte tydligt av frågan att detta är källan till problemet, och med tanke på den lösning som noterades i en kommentar till det första svaret (att bädda in parametrarna i en struktur) verkar det troligt att det var något annat.

Kommentarer (0)

Problemet kan ligga i Flex's SOAP-kodare. Prova att utöka SOAP-kodaren i Flex-programmet och felsök programmet för att se hur nollvärdet hanteras.

Min gissning är att det skickas som NaN (Not a Number). Detta kommer att ställa till det för SOAP-meddelandet i samband med avmarscheringsprocessen någon gång (framför allt i JBoss 5-servern...). Jag minns att jag utökade SOAP-kodaren och utförde en uttrycklig kontroll av hur NaN hanteras.

Kommentarer (1)

Som ett hack kan du överväga att ha en särskild hantering på klientsidan, som konverterar 'Null' strängen till något som aldrig kommer att inträffa, till exempel XXNULLXX och konverterar tillbaka på servern.

Det är inte vackert, men det kan lösa problemet för ett sådant gränsfall.

Kommentarer (5)