flex – 如何将“Null” 传递给ActionScript 3中的SOAP Web服务
我们有一个名字为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> 可爱,是吗? 参数类型为字符串。 我在用: > WSDL(SOAP)。 请注意,从ColdFusion页面将Web服务调用为对象时,不会发生错误。 解决方法跟踪它 起初,我认为这是一个强制错误,其中null被强制为“null”和一个“null”== null的测试通过。不是。我很近,但是非常,非常错了。对于那个很抱歉! 我自从做了很多的fiddling on wonderfl.net和跟踪通过mx.rpc.xml。*中的代码。在XMLEncoder的第1795行(在3.5源中),在setValue中,所有的XMLEncoding都归结为 currentChild.appendChild(xmlSpecialCharsFilter(Object(value))); 其基本上与以下相同: currentChild.appendChild("null"); 这段代码,根据我原来的小提琴,返回一个空的XML元素。但为什么? 原因 根据评论家Justin Mclean的错误报告FLEX-33664,以下是罪魁祸首(见我在fiddle的最后两个测试验证这一点): var thisIsNotNull:XML = <root>null</root>; if(thisIsNotNull == null){ // always branches here,as (thisIsNotNull == null) strangely returns true // despite the fact that thisIsNotNull is a valid instance of type XML } 当currentChild.appendChild传递字符串“null”时,它首先将其转换为具有文本null的根XML元素,然后针对null文字测试该元素。这是一个弱等式测试,所以包含null的XML被强制转换为null类型,或者null类型被强制转换为包含字符串“null”的根xml元素,测试通过它可以说应该失败的地方。一个修复可能是在检查XML(或任何东西,真的)为“nullness”时总是使用strict equality测试。 解 CDATA值是突变整个文本值(否则会导致编码/解码问题)的最合适的方法。例如,Hex编码用于单个字符。当您转义元素的整个文本时,首选CDATA值。这样做的最大原因是它保持了人类的可读性。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |