4

我需要这个问题的帮助。

我正在使用如图所示的camel-http组件,但我遇到了麻烦,因为我发送的正文有未转义的 & 符号。这导致接收服务器上的查询字符串将帖子分成多个帖子参数。

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

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

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

2 回答 2

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>

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

于 2011-01-10T20:02:24.320 回答
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>
于 2013-02-21T20:11:34.313 回答