Camello: ¿el caché de flujo no se almacena en caché / no se puede convertir?

Parece que estoy perdiendo mi cuerpo 'dentro' después de leerlo una vez. Tenga en cuenta que estoy usando el almacenamiento en caché de secuencias de Camel, y que la entrada es un archivo json del componente http. Tengo un procesador con el siguiente código.

    log.debug("Body Type: " + exchange.getIn().getBody().getClass().getCanonicalName());
    log.debug("In msg1:"  + exchange.getIn().getBody(String.class));
    log.debug("In msg2:"  + exchange.getIn().getBody(String.class));

Lo que esperaría ver aquí es que msg1 y msg2 son la misma salida, sin embargo, msg2 devuelve una cadena en blanco (no nula). Aquí están los registros a nivel TRACE.

1- DEBUG com.mycompany.MyProcessor : Body Type: org.apache.camel.converter.stream.InputStreamCache
2- TRACE org.apache.camel.impl.converter.DefaultTypeConverter : Converting org.apache.camel.converter.stream.InputStreamCache -> java.lang.String with value: org.apache.camel.converter.stream.InputStreamCache@780a5cef
3- TRACE org.apache.camel.impl.converter.DefaultTypeConverter : Using converter: StaticMethodTypeConverter: public static java.lang.String org.apache.camel.converter.IOConverter.toString(java.io.InputStream,org.apache.camel.Exchange) throws java.io.IOException to convert [class org.apache.camel.converter.stream.InputStreamCache=>class java.lang.String]
4- DEBUG com.mycompany.MyProcessor : In msg1:{myJson}
5- TRACE org.apache.camel.impl.converter.DefaultTypeConverter : Converting org.apache.camel.converter.stream.InputStreamCache -> java.lang.String with value: org.apache.camel.converter.stream.InputStreamCache@780a5cef
6- TRACE org.apache.camel.impl.converter.DefaultTypeConverter : Using converter: StaticMethodTypeConverter: public static java.lang.String org.apache.camel.converter.IOConverter.toString(java.io.InputStream,org.apache.camel.Exchange) throws java.io.IOException to convert [class org.apache.camel.converter.stream.InputStreamCache=>class java.lang.String]
7- DEBUG com.mycompany.MyProcessor : In msg2:

Cosas a tener en cuenta de los registros:

Línea 1- El tipo de cuerpo muestra correctamente una secuencia de entrada en cachéLínea 4- Convertir a cadenafunciona para producir msg1, aunque la línea 3, el código de conversión, parece fallar con una IOExceptionLínea 6- También falla la conversión, pero es importante tener en cuenta que el cuerpo sigue siendo una secuencia en caché.Línea 7- Mi mensaje se perdió.

Entonces, ¿a dónde se fue msg2?

EDITAR

Algunas cosas para mencionar además de la respuesta de Peter a continuación:

La clase estática MessageHelper de Camel tiene dos funciones útiles:

resetStreamCacheextractBodyAsString

Ambos ayudarán a esta situación.

Respuestas a la pregunta(3)

Su respuesta a la pregunta