GWT Jackson APT在用于编码字符串的$wnd.window JSON web工作者代码上失败

GWT Jackson APT在用于编码字符串的$wnd.window JSON web工作者代码上失败,gwt,web-worker,gwt-jackson-apt,Gwt,Web Worker,Gwt Jackson Apt,最后,在让GWT Jackson APT处理器正常工作并为我的类正确生成代码之后,我还有一个问题,那就是出于某种原因,GWT Jackson APT使用了windowJSONstringify(&parse)函数 $wnd.window.JSON.stringify(STRING) 问题是,由于这是在web worker上,因此未定义$wnd.window。尽管web worker中提供了JSON.stringify(),但结果是代码无法正确运行,即使我在上传之前将其修改为JSON.strin

最后,在让GWT Jackson APT处理器正常工作并为我的类正确生成代码之后,我还有一个问题,那就是出于某种原因,GWT Jackson APT使用了windowJSONstringify(&parse)函数

$wnd.window.JSON.stringify(STRING)
问题是,由于这是在web worker上,因此未定义$wnd.window。尽管web worker中提供了JSON.stringify(),但结果是代码无法正确运行,即使我在上传之前将其修改为JSON.stringify(),代码仍能正常运行

有没有一种干净的方法来重新定义在这个实例中使用了哪些函数


解决这个问题的最佳方法是什么,这样我的web worker代码就不会试图调用在其上下文中不可用的函数

该库现在使用的是JSON的elemental2版本
Global.JSON.stringify

如果我们看一下全局类中JSON的实现,我们会发现它被分配给窗口实例:

@JsType(isNative = true, name = "window", namespace = JsPackage.GLOBAL)
public class Global {
  public static JSONType JSON;
}
当它作为GWT java代码中的
Global.JSON.stringify(someJsonObject)
使用时,编译时它将生成
$wnd.window.JSON.stringify(someJsonObject)
或类似的内容

为了解决这个问题,我们需要以不同的方式访问本机JSON,而不是将其链接到当前窗口实例

解决这个问题的一个方法是使用JsInterop直接和JSON接口,类似这样

@JsType(isNative = true, namespace = JsPackage.GLOBAL)
public class JSON {
    public native static String stringify(Object jsonObj);
}
通过这个实现,我们可以在不使用窗口前缀的情况下使用JSON,当我们在java中像这样使用它时,
JSON.stringify(someJsonObject)
,注意我们如何不再使用来自
Global
的JSON,我们最终生成的Js看起来像这样
$wnd.JSON.stringify(someJsonObject)

我运行了一个小测试,在jackson apt库中实现了这个JSON,并切换到使用新的实现,而不是使用
Global.JSON
,所有测试都通过了


在我看来,这是一个需要在项目存储库中报告的好问题。我将尽快应用修复。

问题已存档,感谢您深入了解此Ahmad@dynamophorus。gwt jackson apt已应用修复程序,这将是一个解决方法,直到Colin评论中的问题得到解决。