扩展 JBoss Data Virt ws 转换器以处理 JSONP

Extending JBoss Data Virt ws translator to handle JSONP

扩展 org.teiid.translator.ws 以连接到 returns JSONP(其媒体类型通常为 application/javascript)的网络服务的最佳方法是什么?现有的ws翻译器只能读取JSON或XML。一般来说,翻译器是否旨在促进转换逻辑的注入以处理任何网页 structure/format(例如,JSONP、明文、html 等)?

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

randomFunctionName(

和尾随

)
JSONP 负载的

,并将 ClobInputStreamFactory.getInputStream 修改为 return,而不是 ReaderInputStream。然后我替换

的两个实例
ds = new InputStreamFactory.ClobInputStreamFactory(...);

in translator-ws-jsonp.BinaryWSProcedureExecution(其中translator-ws-jsonp是基于translator-ws的)with

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

WS 翻译器returns Blob 形式的结果,如何解压结果由您决定。 IMO,你真的不需要再建一个翻译器。

目前,JDV 中的典型用例是读取 blob 并使用 JSONTOXML 函数转换为 XML,然后可以使用 XML表格。因此,您可以编写像 JSONPTOJSON 这样的 UDF,它像您提到的那样执行上述操作,然后使用 JSONTOXML(JSONPTOJSON(blob)) 作为 XMLTABLE 的输入。