Как да предадем "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
.
Използвам:
Обърнете внимание, че грешката не се появява при извикване на уеб услугата като обект от страница на ColdFusion.
4596
3
В бележката xkcd, на уебсайта Bobby Tables има добри съвети за избягване на неправилното тълкуване на потребителски данни (в този случай низът "Null") в SQL заявки на различни езици, включително ColdFusion.
От въпроса не става ясно, че това е източникът на проблема, а като се има предвид решението, отбелязано в коментар към първия отговор (вграждане на параметрите в структура), изглежда вероятно причината да е друга.
Проблемът може да е в SOAP енкодера на Flex's. Опитайте да разширите SOAP енкодера във вашето Flex приложение и дебъгнете програмата, за да видите как се обработва нулевата стойност.
Моето предположение е, че тя се предава като NaN (Not a Number). Това някога ще обърка процеса на разкодиране на SOAP съобщенията (най-вече в сървъра JBoss 5...). Спомням си, че разширих енкодера на SOAP и извърших изрична проверка за това как се обработва NaN.
Може да помислите за специална обработка от страна на клиента, която да преобразува символния низ 'Null' в нещо, което никога няма да се появи, например XXNULLXX, и да го преобразува обратно на сървъра.
Това не е красиво, но може да реши проблема за такъв граничен случай.