@ doc_180은 숫자에 중점을 둔 것을 제외하고는 올바른 개념을 가지고 있었지만 원래 포스터에는 문자열에 문제가있었습니다.
해결책은 mx.rpc.xml.XMLEncoder
파일 을 변경하는 것 입니다. 이것은 121 행입니다.
if (content != null)
result += content;
(Flex 4.5.1 SDK를 보았습니다. 행 번호는 다른 버전에서 다를 수 있습니다.)
기본적으로 'content is null'이므로 유효성 검사에 실패하므로 인수가 발신 SOAP 패킷에 추가되지 않습니다. 따라서 누락 된 매개 변수 오류가 발생합니다.
유효성 검사를 제거하려면이 클래스를 확장해야합니다. 그런 다음 체인에 큰 눈덩이가있어 수정 된 XMLEncoder를 사용하도록 SOAPEncoder를 수정 한 다음 수정 된 SOAPEncoder를 사용하도록 Operation을 수정 한 다음 WebService를 moidfying하여 대체 Operation 클래스를 사용합니다.
나는 그것에 몇 시간을 보냈지 만 계속해야합니다. 아마 하루나 이틀 걸릴 것입니다.
XMLEncoder 줄을 수정하고 자신의 클래스를 사용하기 위해 원숭이 패치 를 수행 할 수 있습니다.
또한 ColdFusion과 함께 RemoteObject / AMF를 사용하도록 전환하면 문제없이 null이 전달됩니다.
2013 년 11 월 16 일 업데이트 :
RemoteObject / AMF에 대한 마지막 의견에 최근에 추가 된 내용이 하나 더 있습니다. ColdFusion 10을 사용하는 경우; 그런 다음 개체에 null 값이있는 속성이 서버 쪽 개체에서 제거됩니다. 따라서 속성에 액세스하기 전에 속성 존재를 확인해야합니다. 그렇지 않으면 런타임 오류가 발생합니다.
다음과 같이 확인하십시오.
<cfif (structKeyExists(arguments.myObject,'propertyName')>
<!--- no property code --->
<cfelse>
<!--- handle property normally --->
</cfif>
이것은 ColdFusion 9에서 변경된 동작입니다. 여기서 null 속성은 빈 문자열로 바뀝니다.
2013 년 12 월 6 일 수정
널이 처리되는 방법에 대한 질문이 있으므로 다음은 문자열 "널"이 예약어 인 널과 어떻게 관련되는지를 보여주는 빠른 샘플 애플리케이션입니다.
<?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>
추적 출력은 다음과 같습니다.
null 문자열은! = 조건을 사용하여 null 예약어와 같지 않습니다
== 조건을 사용하여 널 문자열이 널 예약어와 같지 않음
=== 조건을 사용하여 널 문자열이 널 예약어와 같지 않음