如何为Apache Camel路由编写单元测试——以EDI820AdapterRouteBuilder类为例
为EDI820AdapterRouteBuilder类编写单元测试请求
需要为以下继承自BaseRouteBuilder的EDI820AdapterRouteBuilder类编写单元测试,该类是基于Apache Camel的路由构建类,包含JMS消息消费、消息持久化与转换、分支路由、MDC处理等逻辑。完整代码如下:
@Component("edi820AdapterRouteBuilder") public class EDI820AdapterRouteBuilder extends BaseRouteBuilder { private static final Logger LOGGER = LoggerFactory.getLogger(EDI820AdapterRouteBuilder.class); private static final String DIRECT_Q_RECEIVER = "direct:queueReceiver"; private static final String DIRECT_PROCESS_820 = "direct:process820"; private static final String DIRECT_TO_HIX = "direct:toHIX"; private static final String DIRECT_TO_CMS = "direct:toCMS"; private static final String MDC_TRANSACTIONID = "transactionId"; private static final String REQUEST_ID = "RequestID"; private static final String DIRECT_PUT_MDC = "direct:putMDC"; private static final String DIRECT_REMOVE_MDC = "direct:removeMDC"; @Override public void configure() throws Exception { super.configure(); LOGGER.debug("configure called."); String queueName = appConfig.getInboundQueueName(); LOGGER.debug("inboundQueueName: {}", queueName); String toHIXendpoint = appConfig.getEndpointWithOptions("toHIXendpoint"); LOGGER.debug("toHIXendpoint: {}", toHIXendpoint); String toCMSendpoint = appConfig.getEndpointWithOptions("toCMSendpoint"); LOGGER.debug("toCMSendpoint: {}", toCMSendpoint); String routeDelay = appConfig.getRouteDelay(); LOGGER.debug("routeDelay: {}",routeDelay); from("timer://runOnce?repeatCount=1&delay="+routeDelay) .to("bean:edi820AdapterRouteBuilder?method=addRoute") .end(); from(DIRECT_Q_RECEIVER) .to(PERSIST_EDI820_XDATA) .to(EDI820_REQUEST_TRANSFORMER) .to(DIRECT_PROCESS_820) .log(LoggingLevel.INFO, LOGGER,"Executed "+DIRECT_Q_RECEIVER) .end(); from(DIRECT_PROCESS_820) .choice() .when(header(TRANSACTION_SOURCE_STR).isEqualTo(HIX_SOURCE_SYSTEM)) .log(LoggingLevel.INFO, LOGGER,"Calling route for: "+HIX_SOURCE_SYSTEM) .to(DIRECT_TO_HIX) .when(header(TRANSACTION_SOURCE_STR).isEqualTo(CMS_SOURCE_SYSTEM)) .log(LoggingLevel.INFO, LOGGER,"Calling route for: "+CMS_SOURCE_SYSTEM) .to(DIRECT_TO_CMS) .otherwise() .log(LoggingLevel.INFO, LOGGER,"Invalid "+TRANSACTION_SOURCE_STR+" ${header["+TRANSACTION_SOURCE_STR+"]}") .end(); from(DIRECT_TO_HIX).routeId("edi820adapter-to-hix-producer-route") .log(LoggingLevel.INFO, LOGGER,"Executing edi820adapter-to-hix-producer-route") .marshal().json(JsonLibrary.Jackson)//Convert body to json string .to(toHIXendpoint) .log(LoggingLevel.DEBUG, LOGGER, "json body sent to edi820-hix: ${body}") .log(LoggingLevel.INFO, LOGGER,"Executed edi820adapter-to-hix-producer-route") .end(); from(DIRECT_TO_CMS).routeId("edi820adapter-to-cms-producer-route") .log(LoggingLevel.INFO, LOGGER,"Executing edi820adapter-to-cms-producer-route") .marshal().json(JsonLibrary.Jackson)//Convert body to json string .to(toCMSendpoint) .log(LoggingLevel.DEBUG, LOGGER, "json body sent to edi820-cms: ${body}") .log(LoggingLevel.INFO, LOGGER,"Executed edi820adapter-to-cms-producer-route") .end(); from(DIRECT_PUT_MDC).process(new Processor() { public void process(Exchange exchange) throws Exception { if (exchange.getIn().getHeader(REQUEST_ID) != null) { MDC.put(MDC_TRANSACTIONID, (String) exchange.getIn().getHeader(REQUEST_ID)); } } }).end(); from(DIRECT_REMOVE_MDC).process(new Processor() { public void process(Exchange exchange) throws Exception { MDC.remove(MDC_TRANSACTIONID); } }).end(); } public void addRoute(Exchange exchange) { try { CamelContext context = exchange.getContext(); ModelCamelContext modelContext = context.adapt(ModelCamelContext.class); modelContext.addRouteDefinition(buildRouteDefinition()); } catch (Exception e) { LOGGER.error("Exception in addRoute: {}", e.getMessage()); LOGGER.error(ExceptionUtils.getFullStackTrace(e)); } } private RouteDefinition buildRouteDefinition() { String queueName = appConfig.getInboundQueueName(); RouteDefinition routeDefinition = new RouteDefinition(); routeDefinition .from("jms:queue:" + queueName).routeId("edi820-adapter-jms-consumer-route") .to(DIRECT_PUT_MDC) .log(LoggingLevel.INFO, LOGGER,"Executing edi820-adapter-jms-consumer-route") .log(LoggingLevel.DEBUG, LOGGER, "Received Message from queue: "+queueName) .to(DIRECT_Q_RECEIVER) .log(LoggingLevel.INFO, LOGGER,"Executed edi820-adapter-jms-consumer-route") .to(DIRECT_REMOVE_MDC) .end(); return routeDefinition; } }
若需补充任何信息,请告知。
内容的提问来源于stack exchange,提问作者BHARATH KUMAR
相关产品推荐
相关产品推荐

