2012-06-03 23 views
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: [[email protected]; 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

我觉得这个例外很明显吗?有一条消息包含一个包含日期的字符串,并且该库无法将该字符串解析为有效的日期。

"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

是的,但我不知道如何解决这个问题,因为我不是操纵字符串的人......它来自底层库,我不知道我的代码是如何牵连的...... – orleant

+0

我试图直接在云上部署应用程序,它工作正常......我仍然奇怪它为什么不能在模拟器上工作。 – orleant

+0

这是因为云中的机器可能位于美国本地。 –

0

设置默认的系统区域设置为US调用receiveQueueMessage前:

Locale.setDefault(Locale.US); 

原因:

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

来源:Alexander Racheev's answer在MSDN论坛。

0

在最新版本的Windows Azure SDK for Java版本0.4.2中。这应该已经修复,让我们知道如果任何人仍然可以repro这一点。