无法在服务总线队列中获取消息

问题描述 投票:0回答:4

我有一个小的Java Web应用程序,当用户单击按钮时,我在服务总线队列中发送消息。我想在我的jsp页面上显示消息。但是当我打电话的时候

resultQM = service.receiveQueueMessage(queueName, opts);

我得到以下异常。在此先感谢您的帮助。

 java.lang.IllegalArgumentException: org.codehaus.jackson.map.JsonMappingException: Can not construct instance of java.util.Date from String value 'Sun, 03 Jun 2012 13:54:40 GMT': not a valid representation (error: Can not parse date "Sun, 03 Jun 2012 13:54:40 GMT": not compatible with any of standard forms ("yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd"))
 at [Source: [B@8719e; line: 1, column: 70] (through reference chain: com.microsoft.windowsazure.services.serviceBus.implementation.BrokerProperties["LockedUntilUtc"])
    com.microsoft.windowsazure.services.serviceBus.implementation.BrokerPropertiesMapper.fromString(BrokerPropertiesMapper.java:41)
    com.microsoft.windowsazure.services.serviceBus.implementation.ServiceBusRestProxy.receiveMessage(ServiceBusRestProxy.java:187)
    com.microsoft.windowsazure.services.serviceBus.implementation.ServiceBusRestProxy.receiveQueueMessage(ServiceBusRestProxy.java:151)
    com.microsoft.windowsazure.services.serviceBus.implementation.ServiceBusExceptionProcessor.receiveQueueMessage(ServiceBusExceptionProcessor.java:108)
    messaging.QueueListener.getMessage(QueueListener.java:22)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:116)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
azure jsp azure-servicebus-queues
4个回答
0
投票

我认为异常足够清楚了吗?有一条消息包含一个包含日期的字符串,并且库无法将字符串解析为有效日期。

"Sun, 03 Jun 2012 13:54:40 GMT": not compatible with any of standard forms ("yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd")

0
投票

我建议你检查你当地机器的时钟是否正确。还尝试创建一个SimpleDateFormat,如Jersey + Jackson deserialization failure with date object(类似的例外)所述。


0
投票

在调用receiveQueueMessage之前,将默认系统区域设置设置为US

Locale.setDefault(Locale.US);

原因:

Windows Azure SDK for Java使用Jackson,它在创建SimpleDateFormat对象以解析日期时使用默认系统区域设置。 Windows Azure Service Bus使用RFC-1123和ENGLISH语言环境返回格式化为字符串的日期。 RFC-1123日期格式包含星期几,当您的默认语言环境不是ENGLISH并且具有不同的星期名称时,解析器将失败。

资料来源:MSDN论坛中的Alexander Racheev's answer


0
投票

在最新版本的Windows Azure SDK for Java,版本0.4.2中。这应该已经修复,让我们知道是否有人仍然可以重复这一点。

© www.soinside.com 2019 - 2024. All rights reserved.