You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@camel.apache.org by "Josef Jahn (JIRA)" <ji...@apache.org> on 2011/07/06 14:05:16 UTC
[jira] [Created] (CAMEL-4178) WireTap should auto-convert streams
to string so it always works by default
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
[jira] [Updated] (CAMEL-4178) WireTap should auto-convert streams
to string so it always works by default
Posted by "Josef Jahn (JIRA)" <ji...@apache.org>.
[ 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>
<!-- jetty listening on port 8087 -->
<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 actual 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>
> <!-- jetty listening on port 8087 -->
> <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 actual 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
[jira] [Commented] (CAMEL-4178) WireTap should auto-convert streams
to string so it always works by default
Posted by "Josef Jahn (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/CAMEL-4178?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13060539#comment-13060539 ]
Josef Jahn commented on CAMEL-4178:
-----------------------------------
Certainly true. The question is whether it might be better to have wiretap always work by default without needing to worry about whether or not maybe the input is a stream.
I understand that stream caching is not always the right thing to do, just as converting to string is not always the right solution as it might get you into OutOfMemoryLand. But even some form of error message would be preferable to failing silently, don't you agree?
> 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>
> <!-- jetty listening on port 8087 -->
> <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 actual 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
[jira] [Updated] (CAMEL-4178) WireTap should auto-convert streams
to string so it always works by default
Posted by "Josef Jahn (JIRA)" <ji...@apache.org>.
[ 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
[jira] [Commented] (CAMEL-4178) WireTap should auto-convert streams
to string so it always works by default
Posted by "Claus Ibsen (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/CAMEL-4178?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13060529#comment-13060529 ]
Claus Ibsen commented on CAMEL-4178:
------------------------------------
You can enable stream caching
http://camel.apache.org/stream-caching
> 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>
> <!-- jetty listening on port 8087 -->
> <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 actual 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