2013-06-02 5 views
1

나는 세션 변수 "servicerequested"가있는 뮬 (mule) 흐름이 있으며이 변수는 - customerservice, accountservice, transferservice 등과 같은 다른 값을 가질 수 있습니다. 변수에 파일 기반속성 파일에서 속성을 동적으로 읽는 뮬 표현식 언어

customerservice=9914 
accountservice=9918 
transferservice=9919 

내가이 특성에서 포트를 선택하기 위해 HTTP 아웃 바운드 엔드 포인트를 원하는 :

이 서비스 옵션에 따라 포트의 정보가있는 등록 정보 파일 mule.dev.properties 있습니다 요청한 서비스.

$ : 나는 아래와 같은 MEL을 사용하여 시도 {# [헤더 : 세션 : servicerequested]}

<http:outbound-endpoint exchange-pattern="request-response" host="localhost" 
port="${#[header:session:servicerequested]}" path="services" method="GET"/> 

하지만

Template Endpoint "http://localhost:session:servicerequested]/services" resolved 
into a Malformed endpoint "http://localhost:session:servicerequested]/services" 

은 알려 주시기 바랍니다 예외를 발생 어떻게 우리가 할 수있는 MEL을 사용하여 속성 파일을 동적으로 읽습니다.

+0

문제가 해결 되었습니까? – user1760178

답변

0

게시글에서 세션 변수가 속성 파일의 값이 선택되는 조건이라는 것을 알 수있었습니다.

하지만 문제는 응용 프로그램이 배포 된 후에 속성 파일이로드된다는 것입니다. 그러나 세션 varaible은 흐름 실행 중에 만 사용할 수 있습니다.

따라서 $ {# [header : session : servicerequested]} 표현식은 속성 파일을 참조 할 때 # [MEL]을 사용할 수 없으므로 작동하지 않습니다.

가능한 해결 방법은 속성을 일부 흐름 오류에로드 한 다음 세션 오류 값에 따라 해당 흐름 오류를 선택하는 것입니다.

또한이 모든 것은 단일 MEL 문에서 발생할 수 없습니다.

는 세션 가변적이고을 평가하고 흐름 한다거나 할 중 하나를 선택하고 다음 포트 속성에서 그 값을 사용하는 사용자 정의 구성 요소 또는 그루비를 구축 한 후

아래
<set-variable variableName="prop1" value="${property key from properties file}" /> 
<set-variable variableName="prop2" value="${property key from properties file}" /> 

같은 흐름 변수로 특성을 저장하려고합니다.

희망이 도움이 :)

+0

귀하의 제안은 좋은 데이빗입니다! 고마워요. 하지만 제 경우에는 속성 파일에 얼마나 많은 속성이 있는지 알지 못합니다. 얼마나 많은 변수를 생성해야하는지 동적입니다. – user2254601

+0

속성 파일에 몇 개의 속성이 존재하는지 잘 모를 경우, 그런 경우에 도움이 될만한 것이 있는지 확신 할 수 없습니다. 그러나 당신이 너무 많은 프로퍼티를 가지고있어서 플로우 변수로 선언된다면. 그런 다음 등록 정보 파일에서로드 된 상수로 모든 등록 정보가있는 pojo bean을 준비한 다음 세션 등록 정보를 기반으로 bean에서 상수에 액세스 해보십시오. – user1760178

0

당신은 자바 구성 요소를 만들 수 directly.It 가장 간단한 솔루션 속성을 읽을. Spring에서 ReloadableResourceBundleMessageSource를 설정하여 속성을 읽을 수도 있습니다.