Ibm mobilefirst WL.Server.readSingleJMSMessage上的零超时导致类强制转换异常

Ibm mobilefirst WL.Server.readSingleJMSMessage上的零超时导致类强制转换异常,ibm-mobilefirst,Ibm Mobilefirst,根据文档,通过指定“超时:0”,可以实现从JMS读取的无限等待消息队列。使用对WL.Server.readSingleJMSMessage的非零值调用可以正常工作,因为零超时函数立即返回,我可以找到日志条目: com.worklight.integration.model.InvocationContext E FWLSE0099E: An error occurred while invoking procedure jms_topic/JMSConsumerFWLSE0100E: param

根据文档,通过指定
“超时:0”
,可以实现从
JMS
读取的无限等待消息队列。使用对
WL.Server.readSingleJMSMessage
的非零值调用可以正常工作,因为零超时函数立即返回,我可以找到日志条目:

com.worklight.integration.model.InvocationContext E FWLSE0099E: An error occurred while invoking procedure jms_topic/JMSConsumerFWLSE0100E: parameters:{ "arr": [ { "destination": "myqueue", "singleMessage": true, "timeout": 0.0 }]} java.lang.Double cannot be cast to java.lang.Integer FWLSE0101E: Caused by: null
对于正值,如
“timeout:1000”
记录的参数正确,也可以是“timeout:1000”。对于“timeout:0”,记录的值是浮点值,如Java端意外的“timeout:0.0”


我看不出强制整数为零的方法,我尝试了
“timeout:0x0”
“timeout:parseInt(0)”
,但问题似乎出在
JS Java
翻译中。遗憾的是,这样的基本边界条件在发布之前没有经过测试。

这似乎是一个不幸的错误,目前还没有已知的解决方法。将打开一个缺陷以修复该问题。我们将继续为当前版本寻找可能的解决方法。

这似乎是一个不幸的错误,目前还没有已知的解决方法。将打开一个缺陷以修复该问题。我们将继续为当前版本寻找一种可能的解决方法。

对于kicks,请尝试使用-1的超时。我见过其他IBM文档将0和-1混为一谈,没有超时。它有不同的含义:0表示无限等待,如果您还没有尝试过,并且仍然存在问题,我仍然会说,请尝试一下。对我来说,超时0意味着没有等待。因此,默认情况下,负值意味着无限。Jeremy在回答中提到,这可能仍然是一个bug,但如果没有其他问题,那么尝试一下将有助于验证这个想法,并在您选择打开PMR时为您提供更多的IBM支持。另外,如果您不介意,您是否可以链接您在第一次陈述中提到的文档?我只想在那里四处游逛,看看是否还有别的事情要考虑。Nick,我实际上试过了,它与文档一致。对于负值,它只是试图从队列中获取消息或立即返回没有消息的消息。我想等待消息,直到它到达阻塞调用方,因此使用0。现在唯一的选择是通过循环中足够长的等待时间来模拟等待。(顺便说一句,我更喜欢在索引良好的论坛上写作,而不是打开PMR,因为它更容易在谷歌上搜索收据)只是为了好玩,尝试使用-1的超时时间。我见过其他IBM文档将0和-1混为一谈,没有超时。它有不同的含义:0表示无限等待,如果您还没有尝试过,并且仍然存在问题,我仍然会说,请尝试一下。对我来说,超时0意味着没有等待。因此,默认情况下,负值意味着无限。Jeremy在回答中提到,这可能仍然是一个bug,但如果没有其他问题,那么尝试一下将有助于验证这个想法,并在您选择打开PMR时为您提供更多的IBM支持。另外,如果您不介意,您是否可以链接您在第一次陈述中提到的文档?我只想在那里四处游逛,看看是否还有别的事情要考虑。Nick,我实际上试过了,它与文档一致。对于负值,它只是试图从队列中获取消息或立即返回没有消息的消息。我想等待消息,直到它到达阻塞调用方,因此使用0。现在唯一的选择是通过循环中足够长的等待时间来模拟等待。(注:我更喜欢在索引良好的论坛上写作,而不是打开PMR,因为它更容易用谷歌搜索收据)情况更糟。若超时不是文字而是计算表达式(JS的性质,其中所有数字都是浮点),则也会发生类转换。示例:函数getMessage(queue,waitSecs){var result=WL.Server.readSingleJMSMessage({目的地:queue,timeout:1000*waitSecs});…}情况更糟。若超时不是文字而是计算表达式(JS的性质,其中所有数字都是浮点),则也会发生类转换。示例:函数getMessage(queue,waitSecs){var result=WL.Server.readSingleJMSMessage({目的地:队列,超时:1000*waitSecs});…}