跳到主要內容

Java 8 Nashorn ArrayIndexOutOfBoundsException

雖然有一段時間沒有發文
不過其實我都還是有寫些草稿,只是一直沒有完整的時間加筆
今天趁這個問題還在時效內,貼出來充版面XD

今天碰到的問題是在Java的scripting engine上跑字串實字(literal notation)會碰到  ArrayIndexOutOfBoundsException
追蹤原因後才發現客戶端使用了JDK8,難怪會有這個跟測試端不同的狀況
如同大家所知,在JDK8後Oracle揮別了過去使用的Rhino,改用新開發的Nashorn
這個例外很難不聯想到新引擎的bug

查了下果然看到類似的問題
然後這是官方的回覆
I can reproduce the problem with 8u20, however it seems to be fixed in 
JDK 9 and JDK8u40. You can download a preview release of 8u40 here:
https://jdk8.java.net/download.html

這個問題推測會發生在使用數字做為JavaScript物件的屬性時
目前測試還有一種暫時的解法
就是不使用字串實字建立JavaScript物件,而是用Object的Constructor建立
也就是 var obj = {} -> var obj = new Object()

目前看起來可行,當然不保證不會觸發其他的問題
也許new Object()的實作方式是使用Java的Object,所以不會有這問題
猜測歸猜測,如果沒辦法等官方的修正,也許還是可以試試看這方法

留言