2011-01-10 6 views
4

Ich brauche Hilfe bei dieser Frage.URL Codierung eines Camel Exchange Body

Ich benutze die camel-http Komponente wie gezeigt here, aber ich habe Probleme, weil der Körper, den ich sendete, Unescaped Et-Zeichen hat. Dies führt dazu, dass die Abfragezeichenfolge auf dem empfangenden Server den Post in mehrere Post-Parameter aufteilt.

Ich weiß, dass ich kompilierte Routen in Java erstellen konnte, aber ich muss den Spring XML-Dialekt verwenden, damit neue Routen in den Konfigurationsdateien ohne eine Neukompilierung erstellt/geändert werden können.

Kurz gesagt, möchte ich URL Die Eigenschaft {{body}} auf meiner Route mit dem Spring-Dialekt codieren, wie im (offensichtlich ungültigen) Pseudocode unten gezeigt.

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

Antwort

2

Ok, ich biss in die Kugel. Ich habe ein 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; 
    } 
} 

Dann injizierten sie in den Kontext

<bean id="payloadEncoder" class="com.wufoo.camel.PayloadEncoder" /> 

und verwendet schließlich ein, den Körper zu kodieren verwandeln

<transform> 
    <method bean="payloadEncoder" method="getEncodedBody"/> 
</transform> 

, das funktioniert. Wenn mir jemand sagen kann, was mit dieser Vorgehensweise nicht stimmt, lass es mich wissen.

2

Sie können auch groovy Sprache wie folgt verwenden:

<?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>