2016-07-20 5 views
1

ID와 같은 요구 사항이 HTTP 요청을 통해 전달되며 해당 ID에 따라 동적으로 속성 값을 호출해야합니다. 내가 dgc.metamodel.CommunityToSync=Community2 dgc.metamodel.DomainToSync=Domain2Mule 흐름의 런타임에 속성 값을 동적으로 가져옵니다.

처럼해야 할 또 다른 ID를 들어 dgc.metamodel.CommunityToSync=Community1 dgc.metamodel.DomainToSync=Domain1

같은 속성을 필요로 하나 개의 ID에 대한

그것은 뮬에서이 작업을 수행 할 수 있습니까?

답변

0

AFAIK, 속성 파일은 서버가 처음 실행될 때 읽혀집니다. 여러 속성이 있지만 하나의 키 (고유 한) 만 참조됩니다.

그러나이 요구 사항을 수용하기 위해 Java 코드를 사용해야한다고 생각합니다. 이 코드는 요청 (id)을 기반으로 특정 속성 파일을 읽는 작업을 담당합니다. 그런 다음 속성을 읽고 더 사용에 대한 변수로 설정 : http://localhost:8081/prop?id=1 또는 http://localhost:8081/prop?id=2는 다른 결과를 얻을 :

private Properties prop = new Properties(); 
private InputStream input = null; 

public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException {  
    String id = ((ParameterMap)message.getInboundProperty("http.query.params")).get("id"); 
    input = getClass().getResourceAsStream("../property" + id + ".properties"); 
    prop.load(input); 

    message.setInvocationProperty("communityToSync", prop.getProperty("dgc.metamodel.CommunityToSync")); 
    message.setInvocationProperty("domainToSync", prop.getProperty("dgc.metamodel.DomainToSync")); 

을 나는

<flow name="propertyFlow"> 
    <http:listener config-ref="HTTP_Listener_Configuration" path="/prop" allowedMethods="GET" doc:name="HTTP"/> 
    <custom-transformer class="example.ReadProperty" doc:name="Java"/> 
    <logger message="CommunityToSync = #[flowVars.communityToSync], DomainToSync = #[flowVars.domainToSync]" level="INFO" doc:name="Logger"/> 
</flow> 

브라우저를 통해 실행하는 간단한 흐름을 테스트했다.

+0

뮬 서버를 시작하는 동안 예외가 발생하고 'name'속성 생성 '오류로 생성 오류가 발생하여 배포가 실패했습니다 :'bean 초기화가 실패했습니다. 중첩 예외 'java.util.ArrayList'유형의 속성 값을 'messageProcessors'속성의 필수 유형 'java.util.List'로 변환하지 못했습니다. 속성 'messageProcessors [0]'에 대해 [test_project.ReadProperty] 유형의 값을 필수 유형 [org.mule.api.processor.MessageProcessor]으로 변환 할 수 없습니다 : 일치하는 편집기 또는 변환 전략이 없습니다. '이 메시지에 대한 반환 값으로 메시지를 전달 중입니다. transformMessage 메소드. – Arkade

+0

AbstractMessageTransformer 클래스를 확장하여이 문제를 해결했습니다. – Arkade

0

먼저지도에 속성을 읽어하여이 작업을 수행 할 수 있습니다 : 동적 흐름 MEL을 사용

<spring:beans> 
     <spring:bean id="appProps" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
      <spring:property name="singleton" value="true"/> 
      <spring:property name="location" value="classpath:application.properties"/> 
     </spring:bean> 
    </spring:beans> 

및 액세스 그것은 :

당신은과 같이 스프링을 사용하여지도에 직접로드 할 수 있습니다 다음과 유사합니다 :

그리고 원하는대로 키 문자열을 작성할 수 있습니다.

+0

문제는 런타임 중에 다른 파일에서 (동일한 키로) 속성을 동적으로 읽는 방법입니다. –

0

groovy로 이동하여 요구 사항을 확인하고 필요에 따라 속성을 보낼 수 있습니다.