2017-11-09 7 views
1

私はJavaScriptに慣れていないので、JavaScriptコードをJavaアプリケーションに実行できるようにするJavaScript実装であるRhino()に簡単なJavaScriptコードを実行しようとすると巨大な問題が発生します。私の具体的なケースでは、Rhinoは、WSO2 ESB(Javaで開発されたESBツール)に組み込まれています。Rhinoで実行されるJSスクリプトにDateオブジェクトを設定しようとすると「無効な日付」エラーが表示されるのはなぜですか?

JavaScriptコードをJava \ WSO2 ESBアプリケーションに実行できますが、JavaScriptを作成しようとしました。日付オブジェクトです。この場合、動作しません。

私のようなものを持っている私のJSコード内の場合:私は、ブラウザにそれをperfomが、JavaコンソールにRhinoの私は、次のエラーメッセージを取得にそれを実行した場合

var dateCurrentOriginalForecast = new Date('2017-11-09 06:00:00'); 

それが正常に動作します:

TID: [-1234] [] [2017-11-09 15:55:43,610] INFO {org.apache.synapse.mediators.bsf.ScriptMessageContext} - dateCurrentOriginalForecast: Invalid Date {org.apache.synapse.mediators.bsf.ScriptMessageContext} 
TID: [-1234] [] [2017-11-09 15:55:43,610] ERROR {org.apache.synapse.mediators.bsf.ScriptMediator} - The script engine returned an error executing the inlined js script function mediate {org.apache.synapse.mediators.bsf.ScriptMediator} 
com.sun.phobos.script.util.ExtendedScriptException: org.mozilla.javascript.EcmaError: RangeError: Date is invalid. (<Unknown Source>#139) in <Unknown Source> at line number 139 
     at com.sun.phobos.script.javascript.RhinoCompiledScript.eval(RhinoCompiledScript.java:68) 
     at javax.script.CompiledScript.eval(CompiledScript.java:92) 
     at org.apache.synapse.mediators.bsf.ScriptMediator.mediateForInlineScript(ScriptMediator.java:345) 
     at org.apache.synapse.mediators.bsf.ScriptMediator.invokeScript(ScriptMediator.java:265) 
     at org.apache.synapse.mediators.bsf.ScriptMediator.mediate(ScriptMediator.java:233) 
     at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:97) 
     at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:260) 
     at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.mediateFromContinuationStateStack(Axis2SynapseEnvironment.java:775) 
     at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:282) 
     at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:554) 
     at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:188) 
     at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) 
     at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:262) 
     at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: org.mozilla.javascript.EcmaError: RangeError: Date is invalid. (<Unknown Source>#139) 
     at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3687) 
     at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3665) 
     at org.mozilla.javascript.NativeDate.toISOString(NativeDate.java:398) 
     at org.mozilla.javascript.NativeDate.execIdCall(NativeDate.java:384) 
     at org.mozilla.javascript.IdFunctionObject.call(IdFunctionObject.java:97) 
     at org.mozilla.javascript.optimizer.OptRuntime.callProp0(OptRuntime.java:85) 
     at org.mozilla.javascript.gen._Unknown_Source__1177._c_script_0(<Unknown Source>:139) 
     at org.mozilla.javascript.gen._Unknown_Source__1177.call(<Unknown Source>) 
     at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:394) 
     at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3091) 
     at org.mozilla.javascript.gen._Unknown_Source__1177.call(<Unknown Source>) 
     at org.mozilla.javascript.gen._Unknown_Source__1177.exec(<Unknown Source>) 
     at com.sun.phobos.script.javascript.RhinoCompiledScript.eval(RhinoCompiledScript.java:55) 
     ... 16 more 

Iはまた、などの他のフォーマットを試みた:

var dateCurrentOriginalForecast = new Date('2017-11-09 06:00:00'); 
var dateCurrentOriginalForecast = new Date('2017-11-09T06:00:00.000Z'); 
var dateCurrentOriginalForecast = new Date('2017-11-09T06:00:00'); 
var dateCurrentOriginalForecast = new Date('2017-11-09T06:00:00T'); 

でも、同じエラーが表示されます。

なぜですか?何が問題ですか?私は何が欠けていますか? Rhinoの正しい日付形式は何ですか?

Dateオブジェクトとサイに関連似た何かがここにありますが、解決策はありません。Javascript invalid date in iOS/Android 2.2

答えて

2

、事実、それは奇妙だ....

明示的な日付の部分を使用してみてください:

new Date(year, month, day [, hour, minute, second, millisecond ]) 

new Date('2017','11','09','06','00','00') 
1

Dateの実装が異なります。文字列のDate.parseNaNを返した場合、文字列は有効な日付として解釈されず、new Date(string)の呼び出しはdateではなくInvalidDateを返します。

文字列の日付を分割して別々に設定するか、Dateの要件を満たす文字列の日付を設定します。

+0

しかし、なぜ彼らはDateオブジェクトの異なるバージョンを実装していますか? Java上のJavaScript実装です...この異なるバージョンの理由はありますか?これは多くの非互換性を引き起こします。 – AndreaNobili

+1

@AndreaNobili IE jsがChrome jsと異なる理由:) – bluehipy

関連する問題