0

我有一个小型 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)
4

4 回答 4

0

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

于 2012-06-04T02:20:26.160 回答
0

US在调用 receiveQueueMessage 之前将默认系统语言环境设置为:

Locale.setDefault(Locale.US);

原因:

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

资料来源:Alexander Racheev在 MSDN 论坛中的回答。

于 2013-01-20T21:37:31.790 回答
0

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

于 2013-04-16T03:52:14.977 回答
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")
于 2012-06-03T17:49:47.353 回答