我需要这个问题的帮助。
我正在使用显示camel-http的here组件,但我遇到了麻烦,因为我发送的身体没有未转动的&符号。这导致接收服务器上的查询字符串将帖子分成多个post参数。
我知道我可以在java中创建编译路由,但我必须使用spring xml方言,以便在配置文件中创建/更改新路由而无需重新编译。
所以,简而言之,我想使用spring方言对我路线上的$ {body}属性进行编码,如下面的(明显无效的)伪代码所示。
<setBody inheritErrorHandler="true" id="setBody2">
<simple>name=<urlencode>${body}</urlencode></simple>
</setBody>
答案 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>