2011-07-02 2 views
3

Apache Camel 경로에서 몇 가지 헤더를 안전한 방법으로 HTTP 쿼리 문자열로 작성하려고합니다. 내가 찾은 유일한 예는 동적 쿼리 문자열을 작성하는 데 유용하지 않은 constant()를 사용하거나 URL 이스케이프를 제공하지 않는 simple()을 사용하는 것입니다.Apache Camel : HTTP에서 이스케이프 처리하는 URI (및 다른 제작자)

예를 들어, 바로 HTTP 구성 요소의 설명서에서 다음 코드를 가지고 :

from("direct:start") 
     .setHeader(Exchange.HTTP_QUERY, constant("order=123&detail=short")) 
     .to("http://oldhost"); 

이이 방식의 90 %,하지만 당신은 항상 주문 ID (123)를하지 않을 경우 어떻게해야합니까? 여기서 헤더 값을 대체 할 수 있기를 바랍니다. 따라서이 다음 논리적 버전은 단순하게 전환하는 것입니다.

from("direct:start") 
    .setHeader(Exchange.HTTP_QUERY, simple("order=${header.orderId}&detail=short")) 
    .to("http://oldhost"); 

그러나 이것은 URL 인코딩되지 않은 주요 문제점을 가지고 있습니다. 즉, header.orderId의 공백 (또는 예약 된 문자)은 잘못된 쿼리 문자열에 대해 HTTP 구성 요소에 의해 예외가 throw됩니다.

그래서 남은 유일한 길은 자바 스크립트를 사용하는 것입니다.이 스크립트는 이와 같이 매우 장황하거나 맞춤 프로세서를 작성합니다. 이게 뭔가 내장 된 것 같아서, 내가 여기있는 것을 할 수있는 분명한/정상적인 방법을 놓치고 있는지 묻고 있습니다. 여기를 찾고 계십니까?

답변

관련 문제