В настоящее время библиотека использует элементную версию JSON Global.JSON.stringify
, и если мы посмотрим на реализацию JSON в классе Global, то обнаружим, что он назначен экземпляру окна здесь:
@JsType(isNative = true, name = "window", namespace = JsPackage.GLOBAL)
public class Global {
public static JSONType JSON;
}
, когда это используется как Global.JSON.stringify(someJsonObject)
из Java-кода GWT, при компиляции он выдаст $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
, мы получим сгенерированный J, который выглядит так: $wnd.JSON.stringify(someJsonObject)
Я запустил небольшой тест и внедрил этот JSON в библиотеку jackson-apt и переключился на использование новой реализации вместо использования Global.JSON
и всех тестов.sed.
для меня это выглядит как хорошая проблема, о которой нужно сообщить в репозитории проекта.и я приму исправление как можно скорее.