私は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
しかし、なぜ彼らはDateオブジェクトの異なるバージョンを実装していますか? Java上のJavaScript実装です...この異なるバージョンの理由はありますか?これは多くの非互換性を引き起こします。 – AndreaNobili
@AndreaNobili IE jsがChrome jsと異なる理由:) – bluehipy