Расширение JBoss Data Virt с переводчиком для обработки JSONP

Каков наилучший способ расширения org.teiid.translator.ws для подключения к веб-сервису, который возвращает JSONP (медиатипом которого обычно является application/javascript)? Существующий переводчик 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(...);

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

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

1 ответ

Решение

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

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

Другие вопросы по тегам