Sådan overføres "Null" (et rigtigt efternavn!) til en SOAP-webservice i ActionScript 3

Vi har en medarbejder, hvis efternavn er Null. Vores program til opslag af medarbejdere bliver dræbt, når dette efternavn bruges som søgeord (hvilket sker ret ofte nu). Den fejl, der modtages (tak Fiddler!), er:

<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ødt, hva'?

Parametertypen er string.

Jeg bruger:

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

Bemærk, at fejlen ikke opstår, når webtjenesten kaldes som et objekt fra en ColdFusion-side.

xkcd note har Bobby Tables website gode råd til at undgå ukorrekt fortolkning af brugerdata (i dette tilfælde strengen "Null") i SQL-forespørgsler i forskellige sprog, herunder ColdFusion.

Det fremgår ikke klart af spørgsmålet, at dette er kilden til problemet, og i betragtning af den løsning, der er nævnt i en kommentar til det første svar (indlejring af parametrene i en struktur), forekommer det sandsynligt, at det var noget andet.

Kommentarer (0)

Problemet kan ligge i Flex's SOAP-encoder. Prøv at udvide SOAP-enkoderen i din Flex-applikation, og fejlsøg programmet for at se, hvordan nulværdien håndteres.

Mit gæt er, at den overføres som NaN (Not a Number). Dette vil ødelægge SOAP-meddelelsen unmarshalling-processen på et tidspunkt (især i JBoss2 5-serveren...). Jeg husker at have udvidet SOAP-enkoderen og udført en eksplicit kontrol af hvordan NaN håndteres.

Kommentarer (1)

Som et hack kan du overveje at have en særlig håndtering på klientsiden, der konverterer 'Null' streng til noget, der aldrig vil forekomme, f.eks. XXNULLXX og konverterer tilbage på serveren.

Det er ikke kønt, men det kan løse problemet for et sådant grænsetilfælde.

Kommentarer (5)