Jsonix в скрипте Google Apps
Как я могу использовать Jsonix в скрипте Google Apps (серверная автоматизация Google Docs)? Если я не могу, какую альтернативу Jsonix я могу использовать в GAS для генерации сопоставлений Javascript из XSD, затем сериализовать объект JS в XML для отправки в API REST, а затем десериализовать ответ обратно в объект JS?
Я использовал Jsonix для компиляции REST API из его файлов XSD в сопоставления JSON. Я протестировал OK в командной строке Node.js Javascript, который создает объект JS из встроенного JSON, затем маршализирует его в Jsonix.Context для отправки в REST API, а затем отменяет маршалинг ответа.
Затем я создал проект скрипта Google Apps со своим скриптом. Я создал еще один проект GAS со сценарием Jsonix.js (как Jsonix.gs), а затем еще один проект GAS со сценарием сопоставлений (как API.gs). Я сконфигурировал ресурсы проекта моего основного скрипта с помощью ключей проекта библиотек Jsonix и API. Я могу выполнить свой скрипт (проверяя, используются ли ресурсы библиотеки), но он не работает, когда Jsonix.createDocument()
называется. Я вставил в начало скрипта библиотеки Jsonix _jsonix_factory = function(_jsonix_xmldom, _jsonix_xmlhttprequest, _jsonix_fs)
Logger.log("_jsonix_xmldom: " + _jsonix_xmldom)
строка, которая регистрирует _jsonix_xmldom: undefined
вот почему Jsonix.createDocument()
выдает ошибку вместо возврата документа.
Могу ли я использовать службу скриптов Google Apps XmlService или какую-либо другую службу в среде GAS вместо _jsonix_xmldom, который Jsonix ожидает по умолчанию? Или я могу включить в качестве ресурса библиотеки некоторые функционально эквивалентные библиотеки? Или иным образом предоставить эту функциональность Jsonix в GAS?
Я ожидаю, что подобные ошибки будут результатом Jsonix, пытающимся использовать _jsonix_xmlhttprequest
а также _jsonix_fs
значения, которые также не определены. Я вижу в исходном коде Jsonix.js (.gs) две строки
// REWORK
// Node.js
в createDocument()
декларация и в другом месте. Возможно, этот случай, о котором я сообщаю, находится в активной разработке?
Спасибо за ваши идеи.
3 ответа
Я закончил создание новых проектов Google Apps Script для Jsonix, для его зависимости XMLDOM и для моих сопоставлений API JS (GAS), которые я сгенерировал с помощью Jsonix из файлов API XSD. Я сделал свой проект GAS Jsonix зависимым от моего проекта XMLDOM как библиотечного ресурса. Затем я сделал проект GAS для своего основного сценария, который зависит от проекта Jsonix GAS и проекта API GAS в качестве библиотечных ресурсов. Оно работает.
Я использовал существующий, хорошо протестированный проект XMLDOM с соответствующей лицензией FOSS и настроил его в соответствии с требованиями API GAS.
Я пытался использовать GAS XmlService, оборачивая его API, чтобы представить его соответствующие члены как DOMImplementation, DOMParser и XMLSerializer, но API XmlService глубоко несовместим с API XMLDOM. Члены API XmlService, соответствующие стандартной реализации DOM, структурированы совсем не в соответствии со стандартным API.
Основываясь на исходном коде jsonix.js на github, похоже, что вам придется проделать значительную работу, чтобы запустить его в GAS. XMLDOM и объекты документа просто не существуют в среде GAS, вам нужно изменить jsonix, чтобы использовать службы XmlService и UrlFetchApp, предоставляемые Apps Script.
Обратите внимание, что, хотя это выглядит неплохо, но похоже, что jsonix структурирован для работы с различными средами, и это никоим образом не будет невозможно или даже так сложно добавить поддержку GAS.
Я автор Jsonix.
Я понятия не имею, что такое "Сценарий Google Apps". Наверняка это не что-то "в активной разработке".
Jsonix поддерживает Node.js и браузерные среды OOTB. Заводская функция _jsonix_factory
просто получает зависимости, которые, как ожидается, будут предоставлены средой. Если зависимости не предоставлены, некоторые функции не будут работать.
В настоящее время существует три зависимости:
xmldom
xmlhttprequest
fs
fs
совершенно необязательно. Если fs
не предусмотрено, вы не сможете работать с файлами - такие методы, как unmarshalFile
не будет работать. Никаких сюрпризов, ничего страшного.
xmlhttprequest
нужен только если вы хотите анализировать URL-адреса в среде без браузера. Без этого, unmarshalURL
не будет работать (в не браузерной среде).
xmldom
предоставляет анализатор DOM в не браузерной среде. Jsonix использует DOM для синтаксического анализа XML, поэтому вам потребуется либо предоставляемая браузером DOM, либо xmldom
как зависимость. Это очень важно, иначе Jsonix не будет работать вообще.
В общем, единственное, что вам действительно нужно, это xmldom
, Он будет использоваться для:
xmldom.DOMImplementation
xmldom.XMLSerializer
xmldom.DOMParser
Есть ли реализация DOM для ГАЗА? Если да, вполне вероятно, что вы сможете передать его как зависимость _jsonix_factory
, Если нет, извините, ничего не могу сделать.