[
https://issues.apache.org/jira/browse/CAMEL-4178?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Josef Jahn updated CAMEL-4178:
------------------------------
Description:
When wiretapping the result of a http request (to uri="http://foo"), the
wiretap does not work because the result is a stream. The developer has to
remember to convert the result to a string first to avoid the first consumption
of the stream to make the data not available for wiretapping.
In the interest of "defaults that work", maybe the wiretap should "know" to
handle streams in a way that makes the wiretap work without extra consideration
by the developer. Streams could be auto-converted to string or, if the amount
of data is larger than a certain pre-configured threshold, cache them to disk
and read the resulting file.
Here's an example of a route that needs a convertBodyTo to make the wiretap
work. Without this, the wiretap quietly fails, and it can be quite
time-consuming to try to find out why.
{code:xml}
<route>
<!-- cxf consumer using MESSAGE format -->
<from uri="jetty:http://0.0.0.0:8087/wsn/Broker"/>
<!-- log input received -->
<wireTap
uri="file:data/recording?fileName=wsn-${date:now:yyyyMMdd}.log&fileExist=Append">
<body>
<simple>[${date:now:dd.MM.yyyy hh:mm:ss}] [INCOMING
REQUEST]: ${in.body}

</simple>
</body>
</wireTap>
<!-- send proxied request to real web service -->
<removeHeaders pattern="CamelHttp*"/>
<removeHeader headerName="Accept-Encoding"/>
<to uri="http://127.0.0.1:8192/wsn/Broker/"/>
<!-- convert to string to prevent the stream to be consumed by the
wiretap -->
<convertBodyTo type="String"/>
<!-- log answer from real web service -->
<wireTap
uri="file:data/recording?fileName=wsn-${date:now:yyyyMMdd}.log&fileExist=Append">
<body>
<simple>[${date:now:dd.MM.yyyy hh:mm:ss}] [OUTGOING
RESPONSE]: ${in.body}

</simple>
</body>
</wireTap>
</route>
{code}
was:
When wiretapping the result of a http request (to uri="http://foo"), the
wiretap does not work because the result is a stream. The developer has to
remember to convert the result to a string first to avoid the first consumption
of the stream to make the data not available for wiretapping.
In the interest of "defaults that work", maybe the wiretap should "know" to
handle streams in a way that makes the wiretap work without extra consideration
by the developer. Streams could be auto-converted to string or, if the amount
of data is larger than a certain pre-configured threshold, cache them to disk
and read the resulting file.
Here's an example of a route that needs a convertBodyTo to make the wiretap
work. Without this, the wiretap quietly fails, and it can be quite
time-consuming to try to find out why.
{code:xml}
<route>
<!-- cxf consumer using MESSAGE format -->
<from uri="jetty:http://0.0.0.0:8087/wsn/Broker"/>
<!-- log input received -->
<wireTap
uri="file:data/recording?fileName=wsn-${date:now:yyyyMMdd}.log&fileExist=Append">
<body>
<simple>[${date:now:dd.MM.yyyy
hh:mm:ss}] [INCOMING REQUEST]: ${in.body}

</simple>
</body>
</wireTap>
<!-- send proxied request to real web service -->
<removeHeaders pattern="CamelHttp*"/>
<removeHeader headerName="Accept-Encoding"/>
<to uri="http://127.0.0.1:8192/wsn/Broker/"/>
<!-- convert to string to prevent the stream to be consumed by the
wiretap -->
<convertBodyTo type="String"/>
<!-- log answer from real web service -->
<wireTap
uri="file:data/recording?fileName=wsn-${date:now:yyyyMMdd}.log&fileExist=Append">
<body>
<simple>[${date:now:dd.MM.yyyy
hh:mm:ss}] [OUTGOING RESPONSE]: ${in.body}

</simple>
</body>
</wireTap>
</route>
{code}
> WireTap should auto-convert streams to string so it always works by default
> ---------------------------------------------------------------------------
>
> Key: CAMEL-4178
> URL: https://issues.apache.org/jira/browse/CAMEL-4178
> Project: Camel
> Issue Type: Improvement
> Components: camel-core
> Affects Versions: 2.7.2
> Reporter: Josef Jahn
> Priority: Minor
>
> When wiretapping the result of a http request (to uri="http://foo"), the
> wiretap does not work because the result is a stream. The developer has to
> remember to convert the result to a string first to avoid the first
> consumption of the stream to make the data not available for wiretapping.
> In the interest of "defaults that work", maybe the wiretap should "know" to
> handle streams in a way that makes the wiretap work without extra
> consideration by the developer. Streams could be auto-converted to string or,
> if the amount of data is larger than a certain pre-configured threshold,
> cache them to disk and read the resulting file.
> Here's an example of a route that needs a convertBodyTo to make the wiretap
> work. Without this, the wiretap quietly fails, and it can be quite
> time-consuming to try to find out why.
> {code:xml}
> <route>
> <!-- cxf consumer using MESSAGE format -->
> <from uri="jetty:http://0.0.0.0:8087/wsn/Broker"/>
> <!-- log input received -->
> <wireTap
> uri="file:data/recording?fileName=wsn-${date:now:yyyyMMdd}.log&fileExist=Append">
> <body>
> <simple>[${date:now:dd.MM.yyyy hh:mm:ss}] [INCOMING
> REQUEST]: ${in.body}

</simple>
> </body>
> </wireTap>
> <!-- send proxied request to real web service -->
> <removeHeaders pattern="CamelHttp*"/>
> <removeHeader headerName="Accept-Encoding"/>
> <to uri="http://127.0.0.1:8192/wsn/Broker/"/>
> <!-- convert to string to prevent the stream to be consumed by the
> wiretap -->
> <convertBodyTo type="String"/>
> <!-- log answer from real web service -->
> <wireTap
> uri="file:data/recording?fileName=wsn-${date:now:yyyyMMdd}.log&fileExist=Append">
> <body>
> <simple>[${date:now:dd.MM.yyyy hh:mm:ss}] [OUTGOING
> RESPONSE]: ${in.body}

</simple>
> </body>
> </wireTap>
> </route>
> {code}
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira