2011-01-10 97 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>