0

如何在 Google Apps 脚本(服务器端 Google Docs 自动化)中使用 Jsonix?如果我不能,我可以在 GAS 中使用什么替代 Jsonix 从 XSD 生成 Javascript 映射,然后将 JS 对象序列化为 XML 以提交给 REST API,然后将响应反序列化回 JS 对象?

我使用 Jsonix 将 REST API 从其 XSD 文件编译为 JSON 映射。我在命令行 Node.js 中测试了一个 Javascript,它从内联 JSON 创建一个 JS 对象,然后在 Jsonix.Context 下编组它以提交给 REST API,然后解组响应。

然后我用我的脚本创建了一个 Google Apps 脚本项目。我使用 Jsonix.js 脚本(作为 Jsonix.gs)创建了另一个 GAS 项目,然后使用映射脚本(作为 API.gs)创建了另一个 GAS 项目。我使用 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()抛出错误而不是返回文档的原因。

我可以在 GAS 环境中使用 Google Apps 脚本服务 XmlService 或其他一些服务,而不是 Jsonix 默认期望的 _jsonix_xmldom 吗?或者我可以包含一些功能等效的库作为库资源吗?或者以其他方式在 GAS 中向 Jsonix 提供该功能?

我希望 Jsonix 尝试使用未定义的_jsonix_xmlhttprequestand_jsonix_fs值也会导致类似的错误。我在 Jsonix.js (.gs) 源代码 // REWORK // Node.js 中看到createDocument()声明和其他地方的两行。也许我报告的这个案例正在积极开发中?

感谢您的见解。

4

3 回答 3

0

根据 github 上的 jsonix.js 源代码,看起来您必须进行大量工作才能使其在 GAS 中运行。GAS 环境中根本不存在 XMLDOM 和文档对象,您需要修改 jsonix 以使用 Apps Script 提供的 XmlService 和 UrlFetchApp 服务。

请注意,虽然它看起来有点像或工作,但 jsonix 似乎可以处理不同的环境,并且添加 GAS 支持绝不是不可能的,甚至不是那么困难。

于 2018-08-14T15:59:56.860 回答
0

我是 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

GAS 有 DOM 实现吗?如果是,您很可能能够将其作为依赖项传递给_jsonix_factory. 如果没有,对不起,什么都做不了。

于 2018-08-14T21:18:30.740 回答
0

我最终为 Jsonix 创建了新的 Google Apps 脚本项目,因为它的 XMLDOM 依赖项,以及我使用 Jsonix 从 API 的 XSD 文件生成的 API 映射 JS (GAS)。我使我的 GAS Jsonix 项目依赖于我的 XMLDOM 项目作为库资源。然后我为我的主脚本做了一个 GAS 项目,它依赖于 Jsonix GAS 项目和 API GAS 项目作为库资源。有用。

我使用了一个现有的、经过良好测试的 XMLDOM 项目和适当的 FOSS 许可证,并对其进行了调整以适应 GAS API 要求。

我尝试使用 GAS XmlService,包装其 API 以将其相关成员呈现为 DOMImplementation、DOMParser 和 XMLSerializer,但 XmlService API 与 XMLDOM API 严重不一致。与标准 DOM 实现相对应的 XmlService API 成员的结构与标准 API 完全不同。

于 2018-08-23T19:07:37.903 回答