如何在Google脚本(服务器端的Google自动化)中使用Jsonix?如果不能,我可以在GAS中使用什么替代Jsonix来从XSD生成Javascript映射,然后将JS对象序列化为XML以提交到REST,然后反序列化响应返回到JS对象中?
我使用Jsonix从XSD文件编译REST到JSON映射。我在命令行Node.js中测试了OK --一个Javascript,它从内联JSON中创建一个JS对象,然后在Jsonix.Context下将其封送至REST,然后解除对响应的封送。
然后我用我的脚本创建了一个Google脚本项目。我用Jsonix.js脚本(作为Jsonix.gs)创建了另一个GAS项目,然后用映射脚本(作为API.gs)创建了另一个GAS项目。我用Jsonix和API库的项目密钥配置了主脚本的项目资源。我可以执行我的脚本(验证使用了库资源),但是当调用Jsonix.createDocument()时它会失败。我在Jsonix脚本的_jsonix_factory = function(_jsonix_xmldom, _jsonix_xmlhttprequest, _jsonix_fs)开头插入了一个记录_jsonix_xmldom: undefined的Logger.log("_jsonix_xmldom: " + _jsonix_xmldom)行,这就是Jsonix.createDocument()抛出错误而不是返回文档的原因。
我能否在GAS环境中使用Google脚本服务XmlService或其他服务,而不是默认情况下Jsonix所期望的_jsonix_xmldom?或者,我可以将一些功能相当的库作为库资源吗?或者以其他方式在气体中向Jsonix提供这种功能?
我希望Jsonix尝试使用同样未定义的_jsonix_xmlhttprequest和_jsonix_fs值时也会产生类似的错误。我在Jsonix.js (.gs)源代码中看到了// REWORK // Node.js在createDocument()声明和其他地方的两行代码。也许我报告的这个案子正在积极发展呢?
谢谢你的见解。
发布于 2018-08-23 19:07:37
最后,我创建了新的Google脚本项目,用于Jsonix、其XMLDOM依赖项以及我从API的XSD文件中生成的API映射JS (GAS)。我使GAS Jsonix项目依赖于我的XMLDOM项目作为库资源。然后,我为我的主要脚本创建了一个GAS项目,它依赖于Jsonix GAS项目和API GAS项目作为库资源。它起作用了。
我使用了一个现有的、经过良好测试的XMLDOM项目,并使用了适当的FOSS许可证,并对其进行了调整,以满足GAS的要求。
我尝试使用GAS XmlService,包装它的API,将其相关成员表示为DOMImplementation、DOMParser和XMLSerializer,但是XmlService API与XMLDOM非常不一致。与标准DOM实现对应的XmlService API成员的结构与标准API完全不一致。
发布于 2018-08-14 15:59:56
基于github上的jsonix.js源代码,看起来您需要进行大量的工作才能让它在github中运行。XMLDOM和document对象根本不存在于GAS环境中,您需要修改jsonix以使用Apps脚本提供的XmlService和UrlFetchApp服务。
请注意,尽管jsonix看起来很不错,但它的结构似乎是为了处理不同的环境,它绝不是不可能的,甚至是很难添加气体支持的。
发布于 2018-08-14 21:18:30
我是Jsonix的作者。
我不知道什么是“谷歌应用程序脚本”。可以肯定的是,这不是“积极发展”的事情。
Jsonix支持Node.js和浏览器环境OOTB。工厂函数_jsonix_factory只接收环境需要提供的依赖项。如果不提供依赖项,则某些特性将无法工作。
目前有三种依赖关系:
xmldomxmlhttprequestfsfs是完全可选的。如果不提供fs,您将无法处理文件--像unmarshalFile这样的方法将无法工作。没有冲浪没什么大不了的。
只有在非浏览器环境中要从URL解析时才需要xmlhttprequest。没有它,unmarshalURL将无法工作(在非浏览器环境中)。
xmldom在非浏览器环境中提供DOM解析器。Jsonix使用DOM解析XML,所以要么需要浏览器提供的DOM,要么提供xmldom作为依赖项。这一点很关键,否则Jsonix根本无法工作。
基本上,您真正需要的是xmldom。它将用于:
xmldom.DOMImplementationxmldom.XMLSerializerxmldom.DOMParserGAS有DOM实现吗?如果是,则很可能可以将其作为依赖项传递给_jsonix_factory。如果没有,对不起,什么也做不了。
https://stackoverflow.com/questions/51845377
复制相似问题