Як передати "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 note, сайті Bobby Tables є слушні поради щодо уникнення некоректної інтерпретації даних користувача (в даному випадку рядка "Null") в SQL-запитах на різних мовах, в тому числі і на ColdFusion.

Із запитання не зрозуміло, що саме це є джерелом проблеми, а враховуючи рішення, зазначене у коментарі до першої відповіді (вбудовування параметрів у структуру), видається ймовірним, що це було щось інше.

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

Проблема може бути в кодеру SOAP Flex. Спробуйте розширити кодер SOAP у вашому додатку Flex і налагодити програму, щоб побачити, як обробляється нульове значення.

Я припускаю, що воно передається як NaN (не число). Це коли-небудь зіпсує процес розбиття SOAP-повідомлень (особливо в сервері JBoss 5...). Я пам'ятаю, як розширював кодер SOAP і виконував явну перевірку того, як обробляється NaN.

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

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

Це не дуже красиво, але це може вирішити проблему для такого граничного випадку.

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