首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Camunda的Script-Task中调试Javascript

在Camunda的Script-Task中调试Javascript
EN

Stack Overflow用户
提问于 2015-10-04 12:40:45
回答 1查看 2.7K关注 0票数 2

我试图将脚本任务中的两个数组合并为Camunda中的Process中的Javascript类型。这是我的剧本:

代码语言:javascript
复制
var arr1 = execution.getVariableTyped("arr1", true);
var arr2 = execution.getVariableTyped("arr2", true);

var merged = [];

for (var i1 in arr1) {
    var found = false;
    for (var i2 in merged) {
        if (arr1[i1].id == merged[i2].id) {
            found = true;
            break;
        }
    }
    if (!found) {
        merged.push(arr1[i1]);
    }
}

for (var i1 in arr2) {
    var found = false;
    for (var i2 in merged) {
        if (arr2[i1].id == merged[i2].id) {
            found = true;
            break;
        }
    }
    if (!found) {
        merged.push(arr2[i1]);
    }
}

execution.setVariable("arr1", merged);
execution.removeVariable("arr2");

当执行上述脚本时,它会抛出一个异常:

无法完成任务b4fb856a-6a92-11e5-9774-005056c00008:无法序列化变量‘arr1 1’中的对象:SPIN/JACKSON 01009无法将对象'jdk.nashorn.internal.objects.NativeArray@5ff42b74‘映射到json节点

为什么会这样呢?有什么问题,我该怎么解决呢?是否存在调试此类脚本的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-05 16:35:58

Nashorn为Javascript数组提供了类似于NativeArray的类,因为Javascript数组没有绑定到元素类型,例如,Java中的String[]。因此,纳什霍恩创建了一个NativeArray实例。显然,流程引擎无法存储NativeArray的实例,因为它没有实现java.io.Serializable,也不能被JSON和XML序列化程序序列化。实际上,JSON序列化程序尝试这样做,但是抛出了您看到的异常。

你能做到的

代码语言:javascript
复制
execution.setVariable("arr1", Java.to(merged, "java.lang.Object[]"));

NativeArray转换为Object[]。如果要从Java代码访问数组,可以使用更特殊类型的数组。来源:纳什霍恩文件

注意:

对于JDK 8版本的>= 1.8u 40,提交的类型不是NativeArray,而是包装NativeArrayScriptObjectMirror实例(有关详细信息,请参阅这个问题 )。显然,同样的代码可以用来解决这个问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32933566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档