Repository: camel Updated Branches: refs/heads/master 559bdb126 -> c68c78215
CAMEL-8687 Fixed the rfc5424 structured data issue in camel-syslog Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/c68c7821 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/c68c7821 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/c68c7821 Branch: refs/heads/master Commit: c68c7821566f6298810eec2a2b87e1385f415587 Parents: 559bdb1 Author: Willem Jiang <willem.ji...@gmail.com> Authored: Thu Apr 23 14:29:15 2015 +0800 Committer: Willem Jiang <willem.ji...@gmail.com> Committed: Thu Apr 23 14:29:15 2015 +0800 ---------------------------------------------------------------------- .../camel/component/syslog/SyslogConverter.java | 9 ++++++++- .../component/syslog/NettyRfc5425Test.java | 21 +++++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/c68c7821/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogConverter.java ---------------------------------------------------------------------- diff --git a/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogConverter.java b/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogConverter.java index ea91800..e872498 100644 --- a/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogConverter.java +++ b/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogConverter.java @@ -228,7 +228,14 @@ public final class SyslogConverter { rfc5424SyslogMessage.setMsgId(msgId.toString()); StringBuilder structuredData = new StringBuilder(); - while ((charFound = (char) (byteBuffer.get() & 0xff)) != ' ') { + boolean inblock = false; + while (((charFound = (char) (byteBuffer.get() & 0xff)) != ' ') || inblock) { + if (charFound == '[') { + inblock = true; + } + if (charFound == ']') { + inblock = false; + } structuredData.append(charFound); } rfc5424SyslogMessage.setStructuredData(structuredData.toString()); http://git-wip-us.apache.org/repos/asf/camel/blob/c68c7821/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyRfc5425Test.java ---------------------------------------------------------------------- diff --git a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyRfc5425Test.java b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyRfc5425Test.java index 05eca0f..595fe28 100644 --- a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyRfc5425Test.java +++ b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyRfc5425Test.java @@ -26,7 +26,6 @@ import org.apache.camel.impl.JndiRegistry; import org.apache.camel.spi.DataFormat; import org.apache.camel.test.AvailablePortFinder; import org.apache.camel.test.junit4.CamelTestSupport; -import org.jboss.netty.buffer.BigEndianHeapChannelBuffer; import org.junit.BeforeClass; import org.junit.Test; @@ -38,6 +37,8 @@ public class NettyRfc5425Test extends CamelTestSupport { private final String rfc3164Message = "<165>Aug 4 05:34:00 mymachine myproc[10]: %% It's\n time to make the do-nuts. %% Ingredients: Mix=OK, Jelly=OK #\n" + " Devices: Mixer=OK, Jelly_Injector=OK, Frier=OK # Transport:\n" + " Conveyer1=OK, Conveyer2=OK # %%"; private final String rfc5424Message = "<34>1 2003-10-11T22:14:15.003Z mymachine.example.com su - ID47 - BOM'su root' failed for lonvick on /dev/pts/8"; + private final String rfc5424WithStructuredData = "<34>1 2003-10-11T22:14:15.003Z mymachine.example.com su - ID47 " + + "[exampleSDID@32473 iut=\"3\" eventSource=\"Application\" eventID=\"1011\"] BOM'su root' failed for lonvick on /dev/pts/8"; @BeforeClass public static void initPort() { @@ -68,6 +69,14 @@ public class NettyRfc5425Test extends CamelTestSupport { assertMockEndpointsSatisfied(); } + + @Test + public void testStructuredData() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:syslogReceiver"); + mock.expectedMessageCount(1); + + template.sendBody("direct:checkStructuredData", rfc5424WithStructuredData); + } @Override protected RouteBuilder createRouteBuilder() throws Exception { @@ -86,6 +95,16 @@ public class NettyRfc5425Test extends CamelTestSupport { assertTrue(ex.getIn().getBody() instanceof SyslogMessage); } }).to("mock:syslogReceiver").marshal(syslogDataFormat).to("mock:syslogReceiver2"); + + + from("direct:checkStructuredData").unmarshal(syslogDataFormat).process(new Processor() { + @Override + public void process(Exchange ex) { + Object body = ex.getIn().getBody(); + assertTrue(body instanceof Rfc5424SyslogMessage); + assertEquals("[exampleSDID@32473 iut=\"3\" eventSource=\"Application\" eventID=\"1011\"]", ((Rfc5424SyslogMessage)body).getStructuredData()); + } + }).to("mock:syslogReceiver"); } }; }