2011-01-10 2 views
4

J'ai besoin d'aide pour cette question.URL codant un corps d'échange Camel

J'utilise le composant camel-http comme indiqué here mais j'ai des problèmes car le corps que j'envoie a des esperluettes non échappées. Cela provoque la chaîne de requête sur le serveur de réception pour diviser la publication en plusieurs paramètres de publication. Je sais que je pourrais créer des routes compilées dans Java, mais je dois utiliser le dialecte spring xml pour que de nouvelles routes puissent être créées/changées dans les fichiers de configuration sans recompiler. Donc, en bref, je voudrais encoder la propriété $ {body} sur mon itinéraire en utilisant le dialecte à ressort comme indiqué dans le pseudo-code (évidemment invalide) ci-dessous.

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

Répondre

2

Ok, j'ai mordu la balle. J'ai créé un 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; 
    } 
} 

ensuite injecté dans le contexte

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

Et finalement utilisé pour coder une transformation du corps

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

qui fonctionne. Si quelqu'un peut me dire ce qui ne va pas avec cette approche, s'il vous plaît faites le moi savoir.

2

Vous pouvez également utiliser un langage groovy, comme ceci:

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