2011-01-10 96 views
4

我需要这个问题有所帮助。URL编码骆驼交换部件

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

我知道我可以在Java中创建编译路线,但我必须使用Spring的XML方言,使新途径可以是创建/在配置文件中改变,而重新编译。

因此,总之,我想URL编码$ {机构}财产利用弹簧方言我的路线如图所示(显然无效)下面的伪代码。

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

回答

2

好吧,我咬紧牙关。我创建一个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> 

这一工程进行编码。如果有人能告诉我这种方法有什么问题,请告诉我。

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>