简体   繁体   中英

Why I obtain an “Invalid Date” error when I try to set a Date object into a JS script performed in Rhino?

I am not so into JavaScript and I have a huge problem trying to perform a simple JavaScript code into Rhino ( https://developer.mozilla.org/it/docs/Rhino ) that is a JavaScript implementation that allows to perform JS code into a Java application. In my specific case Rhino is embedded into WSO2 ESB (an ESB tool developed in Java).

I can perform my JS code into my Java\\WSO2 ESB application but I am experiencing some problem trying to create a JavaScript Date object. In this case it can't work.

If in my JS code I have something like:

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

it works fine if I perfom it into the browser but performing it into Rhino I obtain the following error message into the Java console:

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 have also tried other format such as:

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');

but I still obtain the same error.

Why? What is the problem? What am I missing? What is a correct date format that is ok for Rhino?

Something similar related to Date objects and Rhino is here but there is not a solution: Javascript invalid date in iOS/Android 2.2

Effectivly it's strange....

Try using explicit date part :

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

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

It has a different implementation of Date . If Date.parse of the string returns NaN then the string is not interpreted as a valid date and calls of new Date(string) will return a date but InvalidDate .

Split the string dates on its parts and set them separately, or uild string dates that are respecting the Date requirements.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM