编码Camel Exchange正文的URL

时间:2011-01-10 18:56:52

标签: activemq apache-camel

我需要这个问题的帮助。

我正在使用显示camel-httphere组件,但我遇到了麻烦,因为我发送的身体没有未转动的&符号。这导致接收服务器上的查询字符串将帖子分成多个post参数。

我知道我可以在java中创建编译路由,但我必须使用spring xml方言,以便在配置文件中创建/更改新路由而无需重新编译。

所以,简而言之,我想使用spring方言对我路线上的$ {body}属性进行编码,如下面的(明显无效的)伪代码所示。

<setBody inheritErrorHandler="true" id="setBody2">
    <simple>name=<urlencode>${body}</urlencode></simple>
</setBody>

2 个答案:

答案 0 :(得分:3)

好的,我咬紧牙关。我创建了一个java POJO

package com.wufoo.camel;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import org.apache.log4j.Logger;

public class PayloadEncoder {
    public String getEncodedBody(String body) throws UnsupportedEncodingException {
        Logger mylogger = Logger.getLogger("log4j.logger.org.apache.camel");
        mylogger.info("Appending payload and URL Encoding");
        String encodedBody = new StringBuffer()
            .append("payload=")
            .append(URLEncoder.encode(body, "UTF-8")).toString();
        return encodedBody;
    }
}

然后将其注入上下文

<bean id="payloadEncoder" class="com.wufoo.camel.PayloadEncoder" />

最后使用变换对身体进行编码

<transform>
    <method bean="payloadEncoder" method="getEncodedBody"/>
</transform>

有效。如果有人能告诉我这种方法有什么问题,请告诉我。

答案 1 :(得分:2)

您还可以使用groovy语言,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
    <blueprint
    xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
    http://www.osgi.org/xmlns/blueprint/v1.0.0
    http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
    <camelContext xmlns="http://camel.apache.org/schema/blueprint">
        <route>
            <from uri="file:camel/input"/>
            <log message="Moving ${file:name} to the output directory"/>
            <setBody>
                <groovy>
                    "name=" + URLEncoder.encode(request.getBody(String.class));
                </groovy>   
            </setBody>
            <to uri="file:camel/output"/>
        </route>
    </camelContext>
</blueprint>