Skip to content

Commit

Permalink
Integrate non-blocking XML parser as Netty codec (netty#2806)
Browse files Browse the repository at this point in the history
Motivation:
Provide non-blocking XML parser as Netty codec.

Modifications:
New codec implemented/extracted.

io.netty.handler.codec.xml.XmlDecoder decodes XML fed by Netty without blocking.

Result:
Non-blocking XML stream parsing.
  • Loading branch information
marekjelen authored and normanmaurer committed Feb 19, 2015
1 parent ed416e0 commit d5207bc
Show file tree
Hide file tree
Showing 22 changed files with 1,330 additions and 0 deletions.
8 changes: 8 additions & 0 deletions NOTICE.txt
Original file line number Diff line number Diff line change
Expand Up @@ -195,3 +195,11 @@ can be obtained at:
* HOMEPAGE:
* http://logging.apache.org/log4j/

This product optionally depends on 'Aalto XML', an ultra-high performance
non-blocking XML processor, which can be obtained at:

* LICENSE:
* license/LICENSE.aalto-xml.txt (Apache License 2.0)
* HOMEPAGE:
* http://wiki.fasterxml.com/AaltoHome

48 changes: 48 additions & 0 deletions codec-xml/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2014 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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>io.netty</groupId>
<artifactId>netty-parent</artifactId>
<version>5.0.0.Alpha2-SNAPSHOT</version>
</parent>

<artifactId>netty-codec-xml</artifactId>
<packaging>jar</packaging>

<name>Netty/Codec/XML</name>

<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>netty-codec</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>netty-handler</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml</groupId>
<artifactId>aalto-xml</artifactId>
</dependency>
</dependencies>
</project>

Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
/*
* Copyright 2014 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.
*/
package io.netty.handler.codec.xml;


/**
* XML attributes, it is part of {@link XmlElement}
*/
public class XmlAttribute {

private final String type;
private final String name;
private final String prefix;
private final String namespace;
private final String value;

public XmlAttribute(String type, String name, String prefix, String namespace, String value) {
this.type = type;
this.name = name;
this.prefix = prefix;
this.namespace = namespace;
this.value = value;
}

public String type() {
return type;
}

public String name() {
return name;
}

public String prefix() {
return prefix;
}

public String namespace() {
return namespace;
}

public String value() {
return value;
}

@Override
public boolean equals(Object o) {
if (this == o) { return true; }
if (o == null || getClass() != o.getClass()) { return false; }

XmlAttribute that = (XmlAttribute) o;

if (!name.equals(that.name)) { return false; }
if (namespace != null ? !namespace.equals(that.namespace) : that.namespace != null) { return false; }
if (prefix != null ? !prefix.equals(that.prefix) : that.prefix != null) { return false; }
if (type != null ? !type.equals(that.type) : that.type != null) { return false; }
if (value != null ? !value.equals(that.value) : that.value != null) { return false; }

return true;
}

@Override
public int hashCode() {
int result = type != null ? type.hashCode() : 0;
result = 31 * result + name.hashCode();
result = 31 * result + (prefix != null ? prefix.hashCode() : 0);
result = 31 * result + (namespace != null ? namespace.hashCode() : 0);
result = 31 * result + (value != null ? value.hashCode() : 0);
return result;
}

@Override
public String toString() {
return "XmlAttribute{" +
"type='" + type + '\'' +
", name='" + name + '\'' +
", prefix='" + prefix + '\'' +
", namespace='" + namespace + '\'' +
", value='" + value + '\'' +
'}';
}
}
27 changes: 27 additions & 0 deletions codec-xml/src/main/java/io/netty/handler/codec/xml/XmlCdata.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
* Copyright 2014 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.
*/
package io.netty.handler.codec.xml;

/**
* XML CDATA ... <![CDATA[&lt;sender&gt;John Smith&lt;/sender&gt;]]>
*/
public class XmlCdata extends XmlContent {

public XmlCdata(String data) {
super(data);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
* Copyright 2014 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.
*/
package io.netty.handler.codec.xml;

/**
* XML characters, e.g. &lt;test&gt;characters&lt;/test&gt;, but not CDATA.
*/
public class XmlCharacters extends XmlContent {

public XmlCharacters(String data) {
super(data);
}

}
27 changes: 27 additions & 0 deletions codec-xml/src/main/java/io/netty/handler/codec/xml/XmlComment.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
* Copyright 2014 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.
*/
package io.netty.handler.codec.xml;

/**
* XML Comment
*/
public class XmlComment extends XmlContent {

public XmlComment(String data) {
super(data);
}

}
56 changes: 56 additions & 0 deletions codec-xml/src/main/java/io/netty/handler/codec/xml/XmlContent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/*
* Copyright 2014 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.
*/
package io.netty.handler.codec.xml;

/**
* XML Content is base class for XML CDATA, Comments, Characters and Space
*/
public abstract class XmlContent {

private final String data;

protected XmlContent(String data) {
this.data = data;
}

public String data() {
return data;
}

@Override
public boolean equals(Object o) {
if (this == o) { return true; }
if (o == null || getClass() != o.getClass()) { return false; }

XmlContent that = (XmlContent) o;

if (data != null ? !data.equals(that.data) : that.data != null) { return false; }

return true;
}

@Override
public int hashCode() {
return data != null ? data.hashCode() : 0;
}

@Override
public String toString() {
return "XmlContent{" +
"data='" + data + '\'' +
'}';
}
}
57 changes: 57 additions & 0 deletions codec-xml/src/main/java/io/netty/handler/codec/xml/XmlDTD.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/*
* Copyright 2014 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.
*/
package io.netty.handler.codec.xml;

/**
* DTD (Document Type Definition)
*/
public class XmlDTD {

private final String text;

public XmlDTD(String text) {
this.text = text;
}

public String text() {
return text;
}

@Override
public boolean equals(Object o) {
if (this == o) { return true; }
if (o == null || getClass() != o.getClass()) { return false; }

XmlDTD xmlDTD = (XmlDTD) o;

if (text != null ? !text.equals(xmlDTD.text) : xmlDTD.text != null) { return false; }

return true;
}

@Override
public int hashCode() {
return text != null ? text.hashCode() : 0;
}

@Override
public String toString() {
return "XmlDTD{" +
"text='" + text + '\'' +
'}';
}

}
Loading

0 comments on commit d5207bc

Please sign in to comment.