Расширение 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.