10.3. 노멀라이저
10.3.1. 개요
노멀라이저 패턴은 의미 체계적으로 동일하지만 다른 형식으로 도달하는 메시지를 처리하는 데 사용됩니다. 노멀라이저는 들어오는 메시지를 공통 형식으로 변환합니다.
Apache Camel에서는 들어오는 메시지의 형식을 감지하는 8.1절. “콘텐츠 기반 라우터” 를 결합하여 다른 5.6절. “메시지#159” 로 들어오는 형식을 공통 형식으로 변환하는 컬렉션을 결합하여 노멀라이저 패턴을 구현할 수 있습니다.
그림 10.3. 노멀라이저 패턴
10.3.2. Java DSL 예
이 예에서는 두 가지 유형의 XML 메시지를 공통 형식으로 변환하는 Message Normalizer를 보여줍니다. 그런 다음 이 공통 형식의 메시지가 필터링됩니다.
// we need to normalize two types of incoming messages from("direct:start") .choice() .when().xpath("/employee").to("bean:normalizer?method=employeeToPerson") .when().xpath("/customer").to("bean:normalizer?method=customerToPerson") .end() .to("mock:result");
이 경우 Java 8080을 노멀라이저로 사용하고 있습니다. 클래스는 다음과 같습니다.
// Java public class MyNormalizer { public void employeeToPerson(Exchange exchange, @XPath("/employee/name/text()") String name) { exchange.getOut().setBody(createPerson(name)); } public void customerToPerson(Exchange exchange, @XPath("/customer/@name") String name) { exchange.getOut().setBody(createPerson(name)); } private String createPerson(String name) { return "<person name=\"" + name + "\"/>"; } }
10.3.3. XML 구성 예
XML DSL의 동일한 예
<camelContext xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:start"/> <choice> <when> <xpath>/employee</xpath> <to uri="bean:normalizer?method=employeeToPerson"/> </when> <when> <xpath>/customer</xpath> <to uri="bean:normalizer?method=customerToPerson"/> </when> </choice> <to uri="mock:result"/> </route> </camelContext> <bean id="normalizer" class="org.apache.camel.processor.MyNormalizer"/>