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, Если нет, извините, ничего не могу сделать.

Другие вопросы по тегам