Как да предадем "Null" (истинско фамилно име!) на уеб услуга по SOAP в ActionScript 3

Имаме служител, чието фамилно име е Null. Нашето приложение за търсене на служители не работи, когато това име се използва като термин за търсене (което сега се случва доста често). Получената грешка (благодарение на Fiddler!) е:

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

Сладко, а?

Типът на параметъра е string.

Използвам:

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

Обърнете внимание, че грешката не се появява при извикване на уеб услугата като обект от страница на ColdFusion.

В бележката xkcd, на уебсайта Bobby Tables има добри съвети за избягване на неправилното тълкуване на потребителски данни (в този случай низът "Null") в SQL заявки на различни езици, включително ColdFusion.

От въпроса не става ясно, че това е източникът на проблема, а като се има предвид решението, отбелязано в коментар към първия отговор (вграждане на параметрите в структура), изглежда вероятно причината да е друга.

Коментари (0)

Проблемът може да е в SOAP енкодера на Flex's. Опитайте да разширите SOAP енкодера във вашето Flex приложение и дебъгнете програмата, за да видите как се обработва нулевата стойност.

Моето предположение е, че тя се предава като NaN (Not a Number). Това някога ще обърка процеса на разкодиране на SOAP съобщенията (най-вече в сървъра JBoss 5...). Спомням си, че разширих енкодера на SOAP и извърших изрична проверка за това как се обработва NaN.

Коментари (1)

Може да помислите за специална обработка от страна на клиента, която да преобразува символния низ 'Null' в нещо, което никога няма да се появи, например XXNULLXX, и да го преобразува обратно на сървъра.

Това не е красиво, но може да реши проблема за такъв граничен случай.

Коментари (5)