2011-01-10 2 views
4

이 질문에 도움이 필요합니다.URL 낙타 교환 본문 인코딩

here과 같이 camel-http 구성 요소를 사용하고 있습니다. 전송하려는 본문에 이스케이프 처리되지 않은 앰퍼샌드가 있기 때문에 문제가 있습니다. 이로 인해받는 서버의 쿼리 문자열에서 게시물을 여러 게시 매개 변수로 나누었습니다.

자바에서 컴파일 된 라우트를 만들 수 있지만 스프링 XML 방언을 사용해야 만 새로운 경로를 만들거나 다시 컴파일하지 않고 구성 파일에서 변경할 수 있습니다.

간단히 말해서 아래 URL에 나와있는 스프링 방언을 사용하여 내 경로의 $ {body} 속성을 URL 인코딩하고 싶습니다.

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

답변

2

좋아, 글 머리 기호. 제가

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; 
    } 
} 

POJO

자바 만든 다음 컨텍스트

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

로 주입 마침내 신체 작동

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

을 인코딩하는데 사용 변환. 누구든지이 접근 방식에있어 잘못된 점을 알 수 있으면 알려주십시오.

2

또한이 같은 그루비 언어를 사용할 수 있습니다

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