@ doc_180 имел правильную концепцию, за исключением того, что он сосредоточен на числах, тогда как в исходном плакате были проблемы со строками.
Решение - изменить mx.rpc.xml.XMLEncoder
файл. Это строка 121:
if (content != null)
result += content;
(Я смотрел Flex 4.5.1 SDK; номера строк могут отличаться в других версиях.)
Обычно проверка не выполняется, потому что «содержимое равно нулю» и, следовательно, ваш аргумент не добавляется к исходящему пакету SOAP; что вызывает ошибку отсутствующего параметра.
Вы должны расширить этот класс, чтобы удалить проверку. Затем идет большой снежный ком вверх по цепочке, модифицируя SOAPEncoder для использования вашего модифицированного XMLEncoder, а затем модифицируя Operation для использования вашего модифицированного SOAPEncoder, а затем изменяя WebService для использования вашего альтернативного класса Operation.
Я потратил на это несколько часов, но мне нужно двигаться дальше. Наверное, это займет день или два.
Возможно, вы сможете просто исправить строку XMLEncoder и выполнить некоторые исправления обезьян, чтобы использовать свой собственный класс. .
Я также добавлю, что если вы переключитесь на использование RemoteObject / AMF с ColdFusion, null будет передан без проблем.
Обновление от 16.11.2013:
У меня есть еще одно недавнее добавление к моему последнему комментарию о RemoteObject / AMF. Если вы используете ColdFusion 10; затем свойства с нулевым значением объекта удаляются из объекта на стороне сервера. Итак, вы должны проверить наличие свойств, прежде чем обращаться к ним, иначе вы получите ошибку времени выполнения.
Проверить вот так:
<cfif (structKeyExists(arguments.myObject,'propertyName')>
<!--- no property code --->
<cfelse>
<!--- handle property normally --->
</cfif>
Это изменение поведения по сравнению с ColdFusion 9; где нулевые свойства превратятся в пустые строки.
Изменить 12/6/2013
Поскольку возник вопрос о том, как обрабатываются значения NULL, вот краткий пример приложения, демонстрирующий, как строка «null» соотносится с зарезервированным словом null.
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" initialize="application1_initializeHandler(event)">
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
protected function application1_initializeHandler(event:FlexEvent):void
{
var s :String = "null";
if(s != null){
trace('null string is not equal to null reserved word using the != condition');
} else {
trace('null string is equal to null reserved word using the != condition');
}
if(s == null){
trace('null string is equal to null reserved word using the == condition');
} else {
trace('null string is not equal to null reserved word using the == condition');
}
if(s === null){
trace('null string is equal to null reserved word using the === condition');
} else {
trace('null string is not equal to null reserved word using the === condition');
}
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
</s:Application>
Результат трассировки:
пустая строка не равна нулевому зарезервированному слову с использованием условия! =
нулевая строка не равна нулевому зарезервированному слову с использованием условия ==
пустая строка не равна нулевому зарезервированному слову с использованием условия ===
person
JeffryHouser
schedule
03.05.2012