Расширение JBoss Data Virt с переводчиком для обработки JSONP - PullRequest
0 голосов
/ 30 августа 2018

Каков наилучший способ расширения org.teiid.translator.ws для подключения к веб-сервису, который возвращает JSONP (медиатипом которого обычно является application / javascript)? Существующий переводчик WS может читать только JSON или XML. В целом, был ли создан переводчик для облегчения внедрения логики преобразования для обработки любой структуры / формата веб-страницы (например, JSONP, обычный текст, HTML и т. Д.)?

Для JSONP я склоняюсь к созданию собственной реализации org.teiid.core.types.InputStreamFactory, скажем com.acme.JsonpToJsonInputStreamFactory, в которой я определяю свой собственный JsonpToJsonReaderInputStream (расширяющий ReaderInputStream3), который пропускает ведущий * 100

randomFunctionName(

и трейлинг

)

полезной нагрузки JSONP и измените ClobInputStreamFactory.getInputStream, чтобы вернуть его вместо ReaderInputStream. Затем я заменяю оба экземпляра

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

в translationator-ws-jsonp.BinaryWSProcedureExecution (где translationator-ws-jsonp основан на translation-ws) с

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

1 Ответ

0 голосов
/ 31 августа 2018

WS переводчик возвращает результаты в блоб-форме, как вы распакуете результаты, зависит только от вас. ИМО, вам не нужно создавать другого переводчика.

В настоящее время типичным вариантом использования в JDV является чтение BLOB-объектов и использование функции JSONTOXML для преобразования в XML, чтобы результаты можно было затем проанализировать в табличную структуру с использованием таких конструкций, как XMLTABLE. Таким образом, вы можете написать UDF, такой как JSONPTOJSON, который, как вы упомянули выше, работает, а затем использовать JSONTOXML (JSONPTOJSON (blob)) в качестве входных данных для XMLTABLE.

...