我有一个小型的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)
答案 0 :(得分: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")
答案 1 :(得分:0)
我建议您检查本地机器的时钟是否正确。还要尝试创建一个SimpleDateFormat,如Jersey + Jackson deserialization failure with date object所述(类似的例外)。
答案 2 :(得分: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。
答案 3 :(得分:0)
在最新版本的Windows Azure SDK for Java,版本0.4.2中。这应该已经修复,让我们知道是否有人仍然可以重复这一点。