Как проверить, основано ли тело сообщения Camel на потоке? - PullRequest
0 голосов
/ 18 марта 2019

Javadoc: Message.getBody() метод говорит,

Обратите внимание, что если тело сообщения основано на потоке, то ....

Так как мне проверить, основано ли тело на потоке? Чек вроде этого

Object body = exchange.getIn().getBody();
if (body instanceof InputStream) {

не работает, скажем, с файлами. Я пишу общий код, и он должен делать определенные вещи для входящих потоков, и оставлять непотоковые объекты нетронутыми, поэтому я осторожен, чтобы вызвать

Object body = exchange.getIn().getBody(InputStream.class);

потому что я не знаю, что он будет делать с простой строкой, списком, целым числом и т. Д.

1 Ответ

1 голос
/ 19 марта 2019

Нет простой единой проверки, которая покрывает 100% ситуаций.Верблюд открыт с точки зрения того, какой формат полезной нагрузки он поддерживает, и, следовательно, тело сообщения это просто java.lang.Object.Поэтому, чтобы проверить, основано ли оно на потоковой передаче, вам необходимо проверить наличие потоковых типов, таких как `java.io.InputStream ', но затем у вас также есть другие типы, такие как файлы, и от сторонних компонентов, которые могут иметь собственное представление потоковых данных.

Camel имеет встроенное потоковое кэширование (http://camel.apache.org/stream-caching), где он поддерживает большинство потоковых типов и, если вы используете его, то вы можете проверить, является ли тело экземпляром org.apache.camel.StreamCache.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...