我们有一位姓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)柔性3.5动作脚本3冷聚变8

请注意,当从ColdFusion页面作为对象调用Web服务时,不会发生错误。


当前回答

这是一个杂烩,但假设SEARCHSRING有一个最小长度,例如2个字符,在第二个字符处对SEARCHSTRING参数进行子串,并将其作为两个参数传递:SEARCHSSTRING1(“Nu”)和SEARCHSTRING2(“ll”)。在对数据库执行查询时,将它们重新连接在一起。

其他回答

问题可能在Flex的SOAP编码器中。尝试在Flex应用程序中扩展SOAP编码器,并调试程序以查看如何处理空值。

我猜,它是以NaN(不是数字)的形式传递的。这有时会打乱SOAP消息解组过程(尤其是在JBoss 5服务器中…)。我记得扩展了SOAP编码器,并对NaN的处理方式进行了显式检查。

嗯,我猜SOAP编码器的Flex实现似乎错误地序列化了空值。将它们序列化为字符串Null似乎不是一个好的解决方案。正式正确的版本似乎是传递一个空值:

<childtag2 xsi:nil="true" />

因此,“Null”的值只不过是一个有效字符串,这正是您要查找的。

我想在ApacheFlex中修复这个问题应该不难。我建议打开Jira问题或联系apacheflex邮件列表中的人。然而,这只会修复客户端。我不能说ColdFusion是否能够处理这样编码的空值。

另请参阅Radu Cotescu的博客文章“如何在soapUI请求中发送空值”。

关于xkcd,Bobby Tables网站有很好的建议,可以避免在各种语言(包括ColdFusion)的SQL查询中对用户数据(在本例中为字符串“Null”)进行不正确的解释。

从这个问题中还不清楚这是问题的根源,并且考虑到第一个答案的注释中提到的解决方案(将参数嵌入到结构中),这很可能是其他问题。

将所有字符转换为其十六进制实体等效字符。在这种情况下,Null将被转换为&#4E&#75;&#6C中&#6C中;

在ActionScript中对空值进行字符串化将得到字符串“null”。我的怀疑是,有人认为,因此,将字符串“NULL”解码为NULL是一个好主意,这会导致您在这里看到的破坏——可能是因为他们在传递NULL对象并在数据库中获取字符串,而他们不想这样做(所以也要确保检查这种错误)。