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