Неверный аргумент при передаче ByteArray в javascript через Rhino - PullRequest
0 голосов
/ 26 февраля 2020

Я использую Rhino для оценки некоторого javascript, где я просто передаю ByteArray из kotlin в функцию в Javascript. Я знаю, что это плохо, но я использую тот же файл Js в Swift и в. Net Core, без проблем со строкой, которая в этом случае не работает.

Как показано ниже, я передаю bytes, ByteArray, в функцию JS decodeByteArray(). Неудачная строка - это строка, которую я пометил комментарием //invalid argument

Я проверил содержимое ByteArray, и они соответствуют ожиданиям.

Я что-то не так делаю или что-то упустил в этом ?

Javascript

function decodeByteArray(buf) {
    var pbf = new Pbf(buf);
    return JSON.stringify(decode(pbf));
}

function Pbf(buf) {
    this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf); 
    this.pos = 0;
    this.type = 0;
    this.length = this.buf.length;
    setUp(this);
}

Kotlin

private fun decodePbfBytes(bytes: ByteArray?): Any? {
    var jsResult: Any? = null;

    var params = arrayOf(bytes)

    val rhino = org.mozilla.javascript.Context.enter()
    rhino.optimizationLevel = -1
    rhino.languageVersion = org.mozilla.javascript.Context.VERSION_ES6
    try{
        val scope = rhino.initStandardObjects()
        val assetManager = MyApp.sharedInstance.assets
        val input = assetManager.open("pbfIndex.js") //the js file containing js code
        val targetReader = InputStreamReader(input)
        rhino.evaluateReader(scope, targetReader, "JavaScript", 1,null)
        val obj = scope.get("decodeByteArray", scope)
        if (obj is org.mozilla.javascript.Function){
            jsResult = obj.call(rhino, scope, scope, params)
            jsResult = org.mozilla.javascript.Context.toString(jsResult)
        }
    }catch (ex: Exception){
        Log.e("Error", ex.localizedMessage)
    }finally {
        org.mozilla.javascript.Context.exit()
    }

    return jsResult
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...