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 に答える