@Bean @ConditionalOnClass(CamelContext.class) @ConditionalOnMissingBean(SyslogDataFormat.class) public SyslogDataFormat configureSyslogDataFormat( CamelContext camelContext, SyslogDataFormatConfiguration configuration) throws Exception { SyslogDataFormat dataformat = new SyslogDataFormat(); if (dataformat instanceof CamelContextAware) { ((CamelContextAware) dataformat).setCamelContext(camelContext); } Map<String, Object> parameters = new HashMap<>(); IntrospectionSupport.getProperties(configuration, parameters, null, false); IntrospectionSupport.setProperties(camelContext, camelContext.getTypeConverter(), dataformat, parameters); return dataformat; }
/** * Builds route for handling message forwarded from syslog. */ @Override public void configure() { String uri = "netty:udp://"+ getBindAddress() + ":" + getPort() + "?sync=false&allowDefaultCodec=false"; DataFormat syslogDataFormat = new SyslogDataFormat(); RouteDefinition routeDefinition = from(uri); routeDefinition .startupOrder(startUpOrder) .routeId(routeId) .unmarshal(syslogDataFormat) .process(this.eventProcessor) .marshal().serialization() .to(toUri) ; }
@Test public void testSyslogMarshal() throws Exception { CamelContext camelctx = new DefaultCamelContext(); camelctx.addRoutes(new RouteBuilder() { @Override public void configure() throws Exception { from("direct:start") .marshal(new SyslogDataFormat()); } }); camelctx.start(); try { Calendar calendar = Calendar.getInstance(); calendar.set(2016, Calendar.SEPTEMBER, 26, 19, 30, 55); SyslogMessage message = new SyslogMessage(); message.setHostname("camel-test-host"); message.setLogMessage("Hello Kermit!"); message.setTimestamp(calendar); ProducerTemplate template = camelctx.createProducerTemplate(); String result = template.requestBody("direct:start", message, String.class); Assert.assertEquals(SYSLOG_RAW_MESSAGE, result); } finally { camelctx.stop(); } }
@Test public void testSyslogUnmarshal() throws Exception { int port = AvailablePortFinder.getNextAvailable(); CamelContext camelctx = new DefaultCamelContext(); camelctx.addRoutes(new RouteBuilder() { @Override public void configure() throws Exception { from("netty4:udp://localhost:" + port + "?sync=false&allowDefaultCodec=false") .unmarshal(new SyslogDataFormat()) .to("mock:result"); } }); camelctx.start(); try { MockEndpoint mockEndpoint = camelctx.getEndpoint("mock:result", MockEndpoint.class); mockEndpoint.expectedMessageCount(1); ProducerTemplate template = camelctx.createProducerTemplate(); template.requestBody("netty4:udp://127.0.0.1:" + port + "?sync=false&allowDefaultCodec=false&useByteBuf=true", SYSLOG_RAW_MESSAGE); mockEndpoint.assertIsSatisfied(); Exchange exchange = mockEndpoint.getReceivedExchanges().get(0); SyslogMessage message = exchange.getIn().getBody(SyslogMessage.class); Assert.assertEquals("camel-test-host", message.getHostname()); Assert.assertEquals("Hello Kermit!", message.getLogMessage()); } finally { camelctx.stop(); } }