import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
import org.opendaylight.openflowjava.protocol.api.extensibility.HeaderDeserializer;
import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
+import org.opendaylight.openflowjava.protocol.api.keys.MessageCodeKey;
+import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* @author michal.polkorab
*
*/
public final class ListDeserializer {
+ private static final Logger LOG = LoggerFactory.getLogger(ListDeserializer.class);
private ListDeserializer() {
throw new UnsupportedOperationException("Utility class shouldn't be instantiated");
}
/**
- * Deserializes headers of items into list
+ * Deserializes headers of items into list (used in MultipartReplyMessage - Table features)
* @param version openflow wire version
* @param length length of list in ByteBuf (bytes)
* @param input input buffer
items = new ArrayList<>();
int startIndex = input.readerIndex();
while ((input.readerIndex() - startIndex) < length){
- HeaderDeserializer<E> deserializer = registry.getDeserializer(keyMaker.make(input));
+ HeaderDeserializer<E> deserializer;
+ MessageCodeKey key = keyMaker.make(input);
+ try {
+ deserializer = registry.getDeserializer(key);
+ } catch (IllegalStateException e) {
+ LOG.warn("Problem during reading table feature property. Skipping unknown feature property: {}", key);
+ input.skipBytes(2 * EncodeConstants.SIZE_OF_SHORT_IN_BYTES);
+ continue;
+ }
E item = deserializer.deserializeHeader(input);
items.add(item);
}