0

扩展 org.teiid.translator.ws 以连接到返回 JSONP(其媒体类型通常是 application/javascript)的 web 服务的最佳方法是什么?现有的 ws 转换器只能读取 JSON 或 XML。一般而言,翻译器是否旨在促进转换逻辑的注入以处理任何网页结构/格式(例如,JSONP、纯文本、html 等)?

对于 JSONP,我倾向于创建自己的 org.teiid.core.types.InputStreamFactory 实现,比如 com.acme.JsonpToJsonInputStreamFactory,我在其中定义了自己的 JsonpToJsonReaderInputStream(扩展 ReaderInputStream),它跳过了前导

randomFunctionName(

和尾随

)

JSONP 有效负载,并修改 ClobInputStreamFactory.getInputStream 以返回它,而不是 ReaderInputStream。然后我替换两个实例

ds = new InputStreamFactory.ClobInputStreamFactory(...);

在translator-ws-jsonp.BinaryWSProcedureExecution(其中translator-ws-jsonp基于translator-ws)中

ds = new JsonpToJsonInputStreamFactory.ClobInputStreamFactory(...);
4

1 回答 1

1

WS 翻译器以 Blob 形式返回结果,如何解压结果由您决定。IMO,您实际上并不需要构建另一个翻译器。

目前,JDV 中的典型用例是读取 blob 并使用 JSONTOXML 函数转换为 XML,然后可以使用 XMLTABLE 等结构将结果解析为表格结构。因此,您可以编写一个像 JSONPTOJSON 这样的 UDF,就像您提到的那样,然后使用 JSONTOXML(JSONPTOJSON(blob)) 作为 XMLTABLE 的输入。

于 2018-08-31T00:28:30.330 回答