2016-09-16 3 views
1

XML 메시지에 REST 서비스 엔드 포인트를 호출하는 데 사용하는 두 개의 매개 변수가 있습니다. 그 중 하나가 특정 값이 있다면 그러나, 나는 그 중 하나라도 값이있는 경우 예를페이로드에서 값 대체

<Interface Server="ABC" Server2="DEF"/> 

를 들어, 내 전화하기 전에를 변경하려면 "ABC는"항상 "BC"로하고 교체해야 위의 예제에서 param1 = "BC"와 param2 = "DEF"를 보내는 REST 서비스에 대한 나의 호출. 나는 선택 라우터를 생각하고 서버가 "ABC"인지 확인한 다음 흐름 변수 param1 = "BC"를 설정하지만, 그 중 하나가 "ABC"인 경우 Server2에 대해 동일한 작업을 다시 수행해야한다는 것을 깨달았습니다. 그리고 그것은 마치 이것을 달성하는 더 쉬운 방법 일 것입니다. 맞습니까? 그 중 하나라도 "ABC"라면 값을 "BC"로 대체하기 위해 영리한 MEL 또는 XPATH3 표현식을 사용할 수 있습니까?

감사

답변

2

다음과 같은 구성을 시도 할 수 있습니다 : 당신의 XML 소스의 많은 속성, 그냥 따라 enricher 요소를 추가해야하는지에 관계없이

<enricher doc:name="Message Enricher"> 
    <dw:transform-message doc:name="Transform Message"> 
    <dw:set-payload><![CDATA[%dw 1.0 
%output application/java 
%var evaluation = "ABC" 
%var substitution = "BC" 
%function substitute(serverVal)(
    serverVal when serverVal != evaluation otherwise substitution 
) 
--- 
[email protected] mapObject { 
    ($$): substitute($) 
} 
]]></dw:set-payload> 
    </dw:transform-message> 
    <enrich source="#[payload.Server]" target="#[variable:param1]"/> 
    <enrich source="#[payload.Server2]" target="#[variable:param2]"/> 
</enricher> 

합니다. <enrich source="#[payload.Server3]" target="#[variable:param3]"/> 새로운 변수를 설정 :

<Interface Server="ABC" Server2="DEF" Server3="ABC"/> 그런 다음 당신은 단지 추가해야합니다

예를 들어, 당신은 새로운 XML 소스를 가지고있다.

주 : DataWeaveEE 중 하나입니다. CE의 경우 다른 변압기로 교체 할 수 있습니다 (예 : Groovy). 아래 예에서 페이로드는 String 형식입니다. 원래 응용 프로그램/xml 형식은 byte-array-to-string-transformer을 사용하여 String으로 변환됩니다. 이후이 CE를 실행 해요 -

<scripting:component doc:name="Groovy"> 
<scripting:script engine="Groovy"><![CDATA[def attributeMap = new XmlSlurper().parseText(payload).attributes() 

attributeMap.each() { 
    it.value = it.value == "ABC" ? "BC" : it.value 
} 

payload = attributeMap]]></scripting:script> 
</scripting:component> 
+0

니스 접근, 나는 흠, 내가 SAXParser를 예외를 받고 있어요 갈이 – elwis

+0

, DataWeave 만한다는 것을주지? – elwis

+0

* DataWeave *는 ** EE ** 기능 중 하나입니다. Groovy를 대체 할 대체 답변을 업데이트했습니다. –