Avoiding reading of messages that have not been fully received in the channel buffer.
diff --git a/java_gen/templates/of_class.java b/java_gen/templates/of_class.java
index 4ea6ac9..ec398e7 100644
--- a/java_gen/templates/of_class.java
+++ b/java_gen/templates/of_class.java
@@ -171,6 +171,13 @@
 //:: else:
     // fixme: todo ${prop.name}
 //:: #endif
+//:: if prop.is_length_value or prop.is_field_length_value:
+            if(bb.readableBytes() + (bb.readerIndex() - start) < ${prop.name}) {
+                // Buffer does not have all data yet
+                bb.readerIndex(start);
+                return null;
+            }
+//:: #endif
 //:: #endfor
             //:: if msg.align:
             // align message to ${msg.align} bytes
diff --git a/java_gen/templates/of_virtual_class.java b/java_gen/templates/of_virtual_class.java
index fe5c66c..33a6cd2 100644
--- a/java_gen/templates/of_virtual_class.java
+++ b/java_gen/templates/of_virtual_class.java
@@ -52,6 +52,12 @@
     static class Reader implements OFMessageReader<${msg.interface.inherited_declaration()}> {
         @Override
         public ${msg.interface.name} readFrom(ChannelBuffer bb) throws OFParseError {
+//:: if msg.is_fixed_length:
+            if(bb.readableBytes() < LENGTH)
+//:: else:
+            if(bb.readableBytes() < MINIMUM_LENGTH)
+//:: #endif
+                return null;
             int start = bb.readerIndex();
 //:: fields_with_length_member = {}
 //::    for prop in msg.members: