对Camel Exchange正文进行URL编码

dohp0rv5  于 9个月前  发布在  Apache
关注(0)|答案(2)|浏览(89)

我需要帮助回答这个问题。
我正在使用camel-http组件,如这里所示,但我遇到了麻烦,因为我发送的主体有未转义的&符号。这会导致接收服务器上的查询字符串将post分解为多个post参数。
我知道我可以在java中创建编译的路由,但是我必须使用spring xml方言,这样新的路由就可以在配置文件中创建/更改而无需重新编译。
因此,简而言之,我想使用spring方言对路由上的${body}属性进行URL编码,如下面的伪代码(显然无效)所示。

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

8ulbf1ek1#

好吧,我咬了子弹。我创建了一个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>

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

xn1cxnb4

xn1cxnb42#

你也可以使用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>

相关问题