diff --git a/codec/src/main/java/io/netty/handler/codec/xml/XmlFrameDecoder.java b/codec/src/main/java/io/netty/handler/codec/xml/XmlFrameDecoder.java index b3d5e2fb3e..08e502df70 100644 --- a/codec/src/main/java/io/netty/handler/codec/xml/XmlFrameDecoder.java +++ b/codec/src/main/java/io/netty/handler/codec/xml/XmlFrameDecoder.java @@ -20,7 +20,6 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; import io.netty.handler.codec.CorruptedFrameException; import io.netty.handler.codec.TooLongFrameException; -import io.netty.util.CharsetUtil; import java.util.List; @@ -99,7 +98,7 @@ public class XmlFrameDecoder extends ByteToMessageDecoder { final byte readByte = in.getByte(i); if (!openingBracketFound && Character.isWhitespace(readByte)) { // xml has not started and whitespace char found - leadingWhiteSpaceCount ++; + leadingWhiteSpaceCount++; } else if (!openingBracketFound && readByte != '<') { // garbage found before xml start fail(ctx); @@ -148,7 +147,7 @@ public class XmlFrameDecoder extends ByteToMessageDecoder { } } - if (openingBracketFound && atLeastOneXmlElementFound && openBracketsCount == 0) { + if (atLeastOneXmlElementFound && openBracketsCount == 0) { // xml is balanced, bailing out break; } @@ -158,9 +157,11 @@ public class XmlFrameDecoder extends ByteToMessageDecoder { final int readerIndex = in.readerIndex(); if (openBracketsCount == 0 && length > 0) { + if (length >= in.writerIndex()) { + length = in.readableBytes(); + } final ByteBuf frame = extractFrame(in, readerIndex + leadingWhiteSpaceCount, length - leadingWhiteSpaceCount); - System.err.println(in + ", " + frame + ", " + frame.toString(CharsetUtil.UTF_8)); in.skipBytes(length); out.add(frame); } diff --git a/codec/src/main/java/io/netty/handler/codec/xml/package-info.java b/codec/src/main/java/io/netty/handler/codec/xml/package-info.java new file mode 100644 index 0000000000..22dc8ca662 --- /dev/null +++ b/codec/src/main/java/io/netty/handler/codec/xml/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2012 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +/** + * Xml specific codecs. + */ +package io.netty.handler.codec.xml; diff --git a/codec/src/test/java/io/netty/handler/codec/xml/XmlFrameDecoderTest.java b/codec/src/test/java/io/netty/handler/codec/xml/XmlFrameDecoderTest.java index 835213ca0e..3bd9d6cafc 100644 --- a/codec/src/test/java/io/netty/handler/codec/xml/XmlFrameDecoderTest.java +++ b/codec/src/test/java/io/netty/handler/codec/xml/XmlFrameDecoderTest.java @@ -24,6 +24,13 @@ import io.netty.handler.codec.TooLongFrameException; import io.netty.util.CharsetUtil; import org.junit.Test; +import java.io.IOException; +import java.net.URISyntaxException; +import java.net.URL; +import java.nio.ByteBuffer; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -34,8 +41,11 @@ import static org.junit.Assert.*; public class XmlFrameDecoderTest { - private final List xmlSamples = - Arrays.asList(SAMPLE_01, SAMPLE_02, SAMPLE_03, SAMPLE_04); + private final List xmlSamples; + + public XmlFrameDecoderTest() throws IOException, URISyntaxException { + xmlSamples = Arrays.asList(sample("01"), sample("02"), sample("03"), sample("04")); + } @Test(expected = IllegalArgumentException.class) public void testConstructorWithIllegalArgs01() { @@ -93,14 +103,14 @@ public class XmlFrameDecoderTest { testDecodeWithXml( "\n" + '\n' + - "\n" + - "\n" + - "", + "\n\n", "", "\n" + "\n" + "" - ); + ); } @Test @@ -137,649 +147,14 @@ public class XmlFrameDecoderTest { assertThat(actual, is(expectedList)); } - private static final String SAMPLE_01 = ""; - - private static final String SAMPLE_02 = "\n" + - "\n" + - ""; - - private static final String SAMPLE_03 = "\n" + - "\n" + - "\n" + - '\n' + - " 4.0.0\n" + - " \n" + - " org.sonatype.oss\n" + - " oss-parent\n" + - " 7\n" + - " \n" + - '\n' + - " io.netty\n" + - " netty-parent\n" + - " pom\n" + - " 4.0.0.Beta3-SNAPSHOT\n" + - '\n' + - " Netty\n" + - " http://netty.io/\n" + - " \n" + - " Netty is an asynchronous event-driven network application framework for \n" + - " rapid development of maintainable high performance protocol servers and\n" + - " clients.\n" + - " \n" + - '\n' + - " \n" + - " The Netty Project\n" + - " http://netty.io/\n" + - " \n" + - '\n' + - " \n" + - " \n" + - " Apache License, Version 2.0\n" + - " http://www.apache.org/licenses/LICENSE-2.0\n" + - " \n" + - " \n" + - " 2008\n" + - '\n' + - " \n" + - " https://github.com/netty/netty\n" + - " scm:git:git://github.com/netty/netty.git\n" + - " scm:git:ssh://git@github.com/netty/netty.git\n" + - " HEAD\n" + - " \n" + - '\n' + - " \n" + - " \n" + - " netty.io\n" + - " The Netty Project Contributors\n" + - " netty@googlegroups.com\n" + - " http://netty.io/\n" + - " The Netty Project\n" + - " http://netty.io/\n" + - " \n" + - " \n" + - '\n' + - " \n" + - " UTF-8\n" + - " UTF-8\n" + - " 1.3.14.GA\n" + - " \n" + - " \n" + - " \n" + - " common\n" + - " buffer\n" + - " codec\n" + - " codec-http\n" + - " codec-socks\n" + - " transport\n" + - " transport-rxtx\n" + - " transport-sctp\n" + - " transport-udt\n" + - " handler\n" + - " example\n" + - " testsuite\n" + - " testsuite-osgi\n" + - " microbench\n" + - " all\n" + - " tarball\n" + - " \n" + - '\n' + - " \n" + - " \n" + - " \n" + - " \n" + - " org.jboss.marshalling\n" + - " jboss-marshalling\n" + - " ${jboss.marshalling.version}\n" + - " compile\n" + - " true\n" + - " \n" + - " \n" + - " \n" + - " com.google.protobuf\n" + - " protobuf-java\n" + - " 2.4.1\n" + - " \n" + - " \n" + - " com.jcraft\n" + - " jzlib\n" + - " 1.1.2\n" + - " \n" + - '\n' + - " \n" + - " org.rxtx\n" + - " rxtx\n" + - " 2.1.7\n" + - " \n" + - '\n' + - " \n" + - " com.barchart.udt\n" + - " barchart-udt-bundle\n" + - " 2.2.2\n" + - " \n" + - '\n' + - " \n" + - " javax.servlet\n" + - " servlet-api\n" + - " 2.5\n" + - " \n" + - '\n' + - " \n" + - " org.slf4j\n" + - " slf4j-api\n" + - " 1.7.2\n" + - " \n" + - " \n" + - " commons-logging\n" + - " commons-logging\n" + - " 1.1.1\n" + - " \n" + - " \n" + - " log4j\n" + - " log4j\n" + - " 1.2.17\n" + - " \n" + - " \n" + - " mail\n" + - " javax.mail\n" + - " \n" + - " \n" + - " jms\n" + - " javax.jms\n" + - " \n" + - " \n" + - " jmxtools\n" + - " com.sun.jdmk\n" + - " \n" + - " \n" + - " jmxri\n" + - " com.sun.jmx\n" + - " \n" + - " \n" + - " true\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " com.yammer.metrics\n" + - " metrics-core\n" + - " 2.2.0\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " org.jboss.marshalling\n" + - " jboss-marshalling-serial\n" + - " ${jboss.marshalling.version}\n" + - " test\n" + - " \n" + - " \n" + - " org.jboss.marshalling\n" + - " jboss-marshalling-river\n" + - " ${jboss.marshalling.version}\n" + - " test\n" + - " \n" + - '\n' + - " \n" + - " \n" + - " com.google.caliper\n" + - " caliper\n" + - " 0.5-rc1\n" + - " test\n" + - " \n" + - " \n" + - " \n" + - '\n' + - " \n" + - " \n" + - " \n" + - " org.javassist\n" + - " javassist\n" + - " 3.17.1-GA\n" + - " compile\n" + - " true\n" + - " \n" + - '\n' + - " \n" + - " \n" + - " junit\n" + - " junit\n" + - " 4.10\n" + - " test\n" + - " \n" + - " \n" + - " \n" + - " org.hamcrest\n" + - " hamcrest-core\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " org.hamcrest\n" + - " hamcrest-library\n" + - " 1.3\n" + - " test\n" + - " \n" + - " \n" + - " org.easymock\n" + - " easymock\n" + - " 3.1\n" + - " test\n" + - " \n" + - " \n" + - " org.easymock\n" + - " easymockclassextension\n" + - " 3.1\n" + - " test\n" + - " \n" + - " \n" + - " org.jmock\n" + - " jmock-junit4\n" + - " 2.5.1\n" + - " test\n" + - " \n" + - " \n" + - " ch.qos.logback\n" + - " logback-classic\n" + - " 1.0.9\n" + - " test\n" + - " \n" + - " \n" + - '\n' + - " \n" + - " \n" + - " \n" + - " maven-enforcer-plugin\n" + - " 1.1\n" + - " \n" + - " \n" + - " enforce-tools\n" + - " \n" + - " enforce\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " [1.7.0,)\n" + - " \n" + - " \n" + - " [3.0.5,)\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " maven-compiler-plugin\n" + - " 2.5.1\n" + - " \n" + - " 1.7\n" + - " true\n" + - " 1.6\n" + - " 1.6\n" + - " true\n" + - " true\n" + - " true\n" + - " true\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " org.codehaus.mojo\n" + - " animal-sniffer-maven-plugin\n" + - " 1.8\n" + - " \n" + - " \n" + - " org.codehaus.mojo.signature\n" + - " java16\n" + - " 1.0\n" + - " \n" + - " \n" + - " sun.misc.Unsafe\n" + - " sun.misc.Cleaner\n" + - '\n' + - " java.util.zip.Deflater\n" + - '\n' + - " \n" + - " java.nio.channels.DatagramChannel\n" + - " java.nio.channels.MembershipKey\n" + - " java.net.StandardProtocolFamily\n" + - '\n' + - " \n" + - " java.nio.channels.AsynchronousChannel\n" + - " java.nio.channels.AsynchronousSocketChannel\n" + - " java.nio.channels.AsynchronousServerSocketChannel\n" + - " java.nio.channels.AsynchronousChannelGroup\n" + - " java.nio.channels.NetworkChannel\n" + - " java.nio.channels.InterruptedByTimeoutException\n" + - " java.net.StandardSocketOptions\n" + - " java.net.SocketOption\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " process-classes\n" + - " \n" + - " check\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " maven-checkstyle-plugin\n" + - " 2.9.1\n" + - " \n" + - " \n" + - " check-style\n" + - " \n" + - " check\n" + - " \n" + - " validate\n" + - " \n" + - " true\n" + - " true\n" + - " true\n" + - " true\n" + - " io/netty/checkstyle.xml\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " ${project.groupId}\n" + - " netty-build\n" + - " 17\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " maven-surefire-plugin\n" + - " \n" + - " \n" + - " **/*Test*.java\n" + - " **/*Benchmark*.java\n" + - " \n" + - " \n" + - " **/Abstract*\n" + - " **/TestUtil*\n" + - " \n" + - " random\n" + - " \n" + - " -server \n" + - " -Dio.netty.resourceLeakDetection\n" + - " -dsa -da -ea:io.netty...\n" + - " -XX:+AggressiveOpts\n" + - " -XX:+TieredCompilation\n" + - " -XX:+UseBiasedLocking\n" + - " -XX:+UseFastAccessorMethods\n" + - " -XX:+UseStringCache\n" + - " -XX:+OptimizeStringConcat\n" + - " -XX:+HeapDumpOnOutOfMemoryError\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " org.apache.felix\n" + - " maven-bundle-plugin\n" + - " 2.3.7\n" + - " true\n" + - " \n" + - " \n" + - " maven-source-plugin\n" + - " 2.1.2\n" + - " \n" + - " \n" + - " attach-sources\n" + - " \n" + - " jar\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " maven-javadoc-plugin\n" + - " 2.8.1\n" + - " \n" + - " false\n" + - " true\n" + - " false\n" + - " false\n" + - " true\n" + - " \n" + - " \n" + - " \n" + - " maven-deploy-plugin\n" + - " 2.7\n" + - " \n" + - " 10\n" + - " \n" + - " \n" + - " \n" + - " maven-release-plugin\n" + - " 2.3.2\n" + - " \n" + - " false\n" + - " -P release,sonatype-oss-release,full\n" + - " true\n" + - " true\n" + - " netty-@{project.version}\n" + - " \n" + - " \n" + - " \n" + - " \n" + - '\n' + - " \n" + - " \n" + - " \n" + - " \n" + - " maven-surefire-plugin\n" + - " 2.12\n" + - " \n" + - " \n" + - " \n" + - " maven-failsafe-plugin\n" + - " 2.12\n" + - " \n" + - " \n" + - " maven-clean-plugin\n" + - " 2.5\n" + - " \n" + - " \n" + - " maven-resources-plugin\n" + - " 2.5\n" + - " \n" + - " \n" + - " maven-jar-plugin\n" + - " 2.4\n" + - " \n" + - " \n" + - " maven-dependency-plugin\n" + - " 2.4\n" + - " \n" + - " \n" + - " maven-assembly-plugin\n" + - " 2.3\n" + - " \n" + - " \n" + - " maven-jxr-plugin\n" + - " 2.2\n" + - " \n" + - " \n" + - " maven-antrun-plugin\n" + - " 1.7\n" + - " \n" + - " \n" + - " ant-contrib\n" + - " ant-contrib\n" + - " 1.0b3\n" + - " \n" + - " \n" + - " ant\n" + - " ant\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " org.codehaus.mojo\n" + - " build-helper-maven-plugin\n" + - " 1.7\n" + - " \n" + - '\n' + - " \n" + - " \n" + - " org.eclipse.m2e\n" + - " lifecycle-mapping\n" + - " 1.0.0\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " org.apache.maven.plugins\n" + - " maven-checkstyle-plugin\n" + - " [1.0,)\n" + - " \n" + - " check\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " false\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " org.apache.maven.plugins\n" + - " maven-enforcer-plugin\n" + - " [1.0,)\n" + - " \n" + - " enforce\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " false\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " org.apache.maven.plugins\n" + - " maven-clean-plugin\n" + - " [1.0,)\n" + - " \n" + - " clean\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " false\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - ""; - - private static final String SAMPLE_04 = "\n" + - "\n" + - "\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - ""; + private String sample(String number) throws IOException, URISyntaxException { + String path = "io/netty/handler/codec/xml/sample-".concat(number).concat(".xml"); + URL url = getClass().getClassLoader().getResource(path); + if (url == null) { + throw new IllegalArgumentException("file not found: ".concat(path)); + } + byte[] buf = Files.readAllBytes(Paths.get(url.toURI())); + return StandardCharsets.UTF_8.decode(ByteBuffer.wrap(buf)).toString(); + } } diff --git a/codec/src/test/resources/io/netty/handler/codec/xml/sample-01.xml b/codec/src/test/resources/io/netty/handler/codec/xml/sample-01.xml new file mode 100644 index 0000000000..2408a6fe9d --- /dev/null +++ b/codec/src/test/resources/io/netty/handler/codec/xml/sample-01.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/codec/src/test/resources/io/netty/handler/codec/xml/sample-02.xml b/codec/src/test/resources/io/netty/handler/codec/xml/sample-02.xml new file mode 100644 index 0000000000..ffd40cdac7 --- /dev/null +++ b/codec/src/test/resources/io/netty/handler/codec/xml/sample-02.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/codec/src/test/resources/io/netty/handler/codec/xml/sample-03.xml b/codec/src/test/resources/io/netty/handler/codec/xml/sample-03.xml new file mode 100644 index 0000000000..bda593493f --- /dev/null +++ b/codec/src/test/resources/io/netty/handler/codec/xml/sample-03.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/codec/src/test/resources/io/netty/handler/codec/xml/sample-04.xml b/codec/src/test/resources/io/netty/handler/codec/xml/sample-04.xml new file mode 100644 index 0000000000..65bc2ccd8b --- /dev/null +++ b/codec/src/test/resources/io/netty/handler/codec/xml/sample-04.xml @@ -0,0 +1,773 @@ + + + + + 4.0.0 + + org.sonatype.oss + oss-parent + 7 + + + io.netty + netty-parent + pom + 4.0.14.Final-SNAPSHOT + + Netty + http://netty.io/ + + Netty is an asynchronous event-driven network application framework for + rapid development of maintainable high performance protocol servers and + clients. + + + + The Netty Project + http://netty.io/ + + + + + Apache License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0 + + + 2008 + + + https://github.com/netty/netty + scm:git:git://github.com/netty/netty.git + scm:git:ssh://git@github.com/netty/netty.git + HEAD + + + + + netty.io + The Netty Project Contributors + netty@googlegroups.com + http://netty.io/ + The Netty Project + http://netty.io/ + + + + + UTF-8 + UTF-8 + 1.3.18.GA + + -server + -dsa -da -ea:io.netty... + -XX:+AggressiveOpts + -XX:+TieredCompilation + -XX:+UseBiasedLocking + -XX:+UseFastAccessorMethods + -XX:+UseStringCache + -XX:+OptimizeStringConcat + -XX:+HeapDumpOnOutOfMemoryError + + + + + common + buffer + codec + codec-http + codec-socks + transport + transport-rxtx + transport-sctp + transport-udt + handler + example + testsuite + microbench + all + tarball + + + + + + + org.javassist + javassist + 3.18.0-GA + compile + true + + + + + org.jboss.marshalling + jboss-marshalling + ${jboss.marshalling.version} + compile + true + + + + com.google.protobuf + protobuf-java + 2.5.0 + + + com.jcraft + jzlib + 1.1.2 + + + + org.rxtx + rxtx + 2.1.7 + + + + com.barchart.udt + barchart-udt-bundle + 2.3.0 + + + + javax.servlet + servlet-api + 2.5 + + + + org.slf4j + slf4j-api + 1.7.5 + + + commons-logging + commons-logging + 1.1.3 + + + log4j + log4j + 1.2.17 + + + mail + javax.mail + + + jms + javax.jms + + + jmxtools + com.sun.jdmk + + + jmxri + com.sun.jmx + + + true + + + + + com.yammer.metrics + metrics-core + 2.2.0 + + + + + org.jboss.marshalling + jboss-marshalling-serial + ${jboss.marshalling.version} + test + + + org.jboss.marshalling + jboss-marshalling-river + ${jboss.marshalling.version} + test + + + + + com.google.caliper + caliper + 0.5-rc1 + test + + + + + + + + org.javassist + javassist + test + + + + + junit + junit + 4.11 + test + + + org.easymock + easymock + 3.2 + test + + + org.easymock + easymockclassextension + 3.2 + test + + + org.jmock + jmock-junit4 + 2.6.0 + test + + + ch.qos.logback + logback-classic + 1.0.13 + test + + + + + + + maven-enforcer-plugin + 1.3 + + + enforce-tools + + enforce + + + + + + + [1.7.0,) + + + [3.0.5,3.1) + + + + + + + + maven-compiler-plugin + 3.1 + + 1.7 + true + 1.6 + 1.6 + true + true + true + true + -Xlint:-options + + + 256m + 1024m + + + + + org.codehaus.mojo + animal-sniffer-maven-plugin + 1.9 + + + org.codehaus.mojo.signature + java16 + 1.0 + + + sun.misc.Unsafe + sun.misc.Cleaner + + java.util.zip.Deflater + + + java.nio.channels.DatagramChannel + java.nio.channels.MembershipKey + java.net.StandardProtocolFamily + + + java.nio.channels.AsynchronousChannel + java.nio.channels.AsynchronousSocketChannel + java.nio.channels.AsynchronousServerSocketChannel + java.nio.channels.AsynchronousChannelGroup + java.nio.channels.NetworkChannel + java.nio.channels.InterruptedByTimeoutException + java.net.StandardSocketOptions + java.net.SocketOption + + + + + process-classes + + check + + + + + + maven-checkstyle-plugin + 2.10 + + + check-style + + check + + validate + + true + true + true + true + io/netty/checkstyle.xml + true + + + + + + ${project.groupId} + netty-build + 19 + + + + + maven-surefire-plugin + + + **/*Test*.java + **/*Benchmark*.java + + + **/Abstract* + **/TestUtil* + + random + ${test.jvm.argLine} + + + + + org.apache.felix + maven-bundle-plugin + 2.4.0 + + + generate-manifest + process-classes + + manifest + + + + ${project.groupId}.* + + sun.misc.*;resolution:=optional,* + + !* + + + + + + + maven-source-plugin + 2.2.1 + + + + attach-sources + invalid + + jar + + + + attach-sources-no-fork + package + + jar-no-fork + + + + + + maven-javadoc-plugin + 2.9.1 + + false + true + false + false + true + + + + maven-deploy-plugin + 2.7 + + 10 + + + + maven-release-plugin + 2.4.1 + + false + -P release,sonatype-oss-release,full,no-osgi + true + false + netty-@{project.version} + + + + + + maven-antrun-plugin + + + + write-version-properties + initialize + + run + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Current commit: ${shortCommitHash} on ${commitDate} + + + + + + + + + + + + + + + + + + + + + + + org.apache.ant + ant + 1.8.2 + + + org.apache.ant + ant-launcher + 1.8.2 + + + ant-contrib + ant-contrib + 1.0b3 + + + ant + ant + + + + + + + + + + + + maven-surefire-plugin + 2.15 + + + + maven-failsafe-plugin + 2.15 + + + maven-clean-plugin + 2.5 + + + maven-resources-plugin + 2.6 + + + maven-jar-plugin + 2.4 + + + default-jar + + + + true + + true + ${project.build.outputDirectory}/META-INF/MANIFEST.MF + + + + + + + maven-dependency-plugin + 2.8 + + + maven-assembly-plugin + 2.4 + + + + maven-jxr-plugin + 2.2 + + + maven-antrun-plugin + 1.7 + + + ant-contrib + ant-contrib + 1.0b3 + + + ant + ant + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 1.8 + + + + + org.eclipse.m2e + lifecycle-mapping + 1.0.0 + + + + + + org.apache.maven.plugins + maven-antrun-plugin + [1.7,) + + run + + + + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + [1.0,) + + check + + + + + false + + + + + + org.apache.maven.plugins + maven-enforcer-plugin + [1.0,) + + enforce + + + + + false + + + + + + org.apache.maven.plugins + maven-clean-plugin + [1.0,) + + clean + + + + + false + + + + + + org.apache.felix + maven-bundle-plugin + [2.4,) + + manifest + + + + + + + + + + + + + + \ No newline at end of file