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&amp;fileExist=Append">
                                <body>
                                        <simple>[${date:now:dd.MM.yyyy 
hh:mm:ss}] [INCOMING REQUEST]: ${in.body}&#xA;&#xD;</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&amp;fileExist=Append">
                                <body>
                                        <simple>[${date:now:dd.MM.yyyy 
hh:mm:ss}] [OUTGOING RESPONSE]: ${in.body}&#xA;&#xD;</simple>
                                </body>
                        </wireTap>
        </route>
{code} 



--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to