如何在蓝图中从Apache Camel调用URL并将数据返回到文本文件



我使用Apache Camel蓝图,我的路由是从本地主机上端口8081的URL触发的。这个路由生成一个文件,但问题是该文件是一个没有显示HTML的二进制文件。

然后在浏览器中导航到http://localhost:8081/foo,这会触发URL。

我不明白是什么导致它输出二进制文件而不是文本文件?我想我必须以某种方式改变身体?

    <route id="url1">
        <from uri="netty4-http:http://0.0.0.0:8081/foo" />
        <to uri="http://www.google.com/?bridgeEndpoint=true" />
        <to uri="file:/test"/>
    </route>

更新:我认为问题是,从www.google.com回来的内容是gzip。当我查看文档中的bridgeEndpoint参数时,它提到了一些关于gzip的内容…现在我不确定,因为我在另一个网站上试过了,它仍然不起作用。

我日志中的这一行可能是相关的。

writing body: DefaultFullHttpResponse(decodeResult: success, 
version: HTTP/1.1, content: UnpooledUnsafeDirectByteBuf(ridx: 0, widx: 0, cap: 0))

更新:我发现如果我做了:

<from uri="timer:secondfoo?period=20s" />

替换from,然后它就工作了。嗯…从nety4 -http流出的内容导致问题


更新:我发现了一些工作!痴迷终有收获。

    <route id="url1">
        <from uri="netty-http:http://0.0.0.0:8081/foo" />
        <removeHeaders pattern="*" />
        <setBody>
            <simple></simple>
        </setBody>
        <setHeader headerName="CamelHttpMethod">
            <constant>GET</constant>
        </setHeader>
        <to uri="http://www.google.com/?bridgeEndpoint=true" />
        <to uri="file:/test"/>
    </route>

您可以将消息转换为String类型,然后将其基于文本

<route id="url1">
    <from uri="netty4-http:http://0.0.0.0:8081/foo" />
    <to uri="http://www.google.com/?bridgeEndpoint=true" />
    <convertBodyTo type="String"/>
    <to uri="file:/test"/>
</route>

最新更新