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

ローカル マシンの時計が正しいかどうかを確認することをお勧めします。また、日付オブジェクトでの Jersey + Jackson デシリアライゼーションの失敗(同様の例外)で説明されているように、SimpleDateFormat を作成してみてください。

于 2012-06-04T02:20:26.160 に答える
0

USreceiveQueueMessage を呼び出す前に、デフォルトのシステム ロケールを次のように設定します。

Locale.setDefault(Locale.US);

原因:

Windows Azure SDK for Java は Jackson を使用します。Jackson は、日付を解析する SimpleDateFormat オブジェクトを作成するときに既定のシステム ロケールを使用します。Windows Azure Service Bus は、RFC-1123 および ENGLISH ロケールを使用して文字列にフォーマットされた日付を返します。RFC-1123 日付形式には曜日が含まれており、デフォルトのロケールが英語ではなく、曜日名が異なる場合、パーサーは失敗します。

出典: MSDN フォーラムでの Alexander Racheev の回答。

于 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 に答える