Fix findbugs violations in openflowjava 84/67884/5
authorTom Pantelis <tompantelis@gmail.com>
Fri, 2 Feb 2018 15:20:10 +0000 (10:20 -0500)
committerTom Pantelis <tompantelis@gmail.com>
Wed, 28 Feb 2018 17:48:29 +0000 (12:48 -0500)
- Invocation of toString on an array

- Check for sign of bitwise operation:
Example: ((event.detail & SWT.SELECTED) > 0)

Using bit arithmetic and then comparing with the greater than operator
can lead to unexpected results (of course depending on the value of
SWT.SELECTED). If SWT.SELECTED is a negative number, this is a candidate
for a bug. Even when SWT.SELECTED is not negative, it seems good practice
to use '!= 0' instead of '> 0'

- Reliance on default encoding - performs a byte to String (or String to byte)
conversion, and will assume that the default platform encoding is suitable.

- Primitive value is boxed then unboxed to perform primitive coercion

- Unread field

- Result of integer multiplication cast to long - possible overflow

- Dead store to local variable - assigns a value to a local variable, but
the value is not read or used in any subsequent instruction.

- Method uses the same code for two switch clauses

- Load of known null value

- Consider returning a zero length array rather than null

- Redundant nullcheck of value known to be non-null

- Field not initialized in constructor but dereferenced without null check

- Non-transient non-serializable instance field in serializable class

- Class implements same interface as superclass

Change-Id: I28b533c9f9805de539e35b729c5163fd22e75354
Signed-off-by: Tom Pantelis <tompantelis@gmail.com>
50 files changed:
openflowjava/openflow-protocol-api/src/main/java/org/opendaylight/openflowjava/protocol/api/connection/DeviceRequestFailedException.java
openflowjava/openflow-protocol-api/src/main/java/org/opendaylight/openflowjava/protocol/api/keys/ExperimenterActionSerializerKey.java
openflowjava/openflow-protocol-api/src/main/java/org/opendaylight/openflowjava/protocol/api/keys/ExperimenterInstructionSerializerKey.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/SwitchConnectionProviderFactoryImpl.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/SwitchConnectionProviderImpl.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/TcpChannelInitializer.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/connection/AbstractStackedOutboundQueue.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/DeserializationFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/OF13SetFieldActionDeserializer.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/ErrorMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/ExperimenterMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/FlowModInputMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/FlowRemovedMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/MeterModInputMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/MultipartReplyMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/MultipartRequestInputMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/OF10FlowModInputMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/OF10FlowRemovedMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/OF10PacketOutInputMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/OF10PortModInputMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/OF10StatsReplyMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/OF10StatsRequestInputFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/PacketInMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/PacketOutInputMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/QueueGetConfigReplyMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/VendorMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/SerializationFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/action/OF13SetFieldActionSerializer.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/ExperimenterInputMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/ExperimenterMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/FlowModInputMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/FlowRemovedMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/GetFeaturesOutputFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/MultipartReplyMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/MultipartRequestInputFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/OF10FeaturesReplyMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/OF10FlowModInputMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/OF10FlowRemovedMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/OF10PortStatusMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/OF10StatsReplyMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/OF10StatsRequestInputFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/PacketInMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/PortStatusMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/QueueGetConfigReplyMessageFactory.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/VendorInputMessageFactory.java
openflowjava/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/DeserializationFactoryTest.java
openflowjava/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/ErrorMessageFactoryTest.java
openflowjava/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/serialization/SerializationFactoryTest.java
openflowjava/openflowjava-util/src/main/java/org/opendaylight/openflowjava/util/ByteBufUtils.java
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/protocol/deserialization/AbstractDeserializerTest.java

index 347d73d0a0bf37bfb23344e76cce293b4231991f..17f83239847d5d0e17700401f40056ad694240f1 100644 (file)
@@ -17,7 +17,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
  */
 public class DeviceRequestFailedException extends OutboundQueueException {
     private static final long serialVersionUID = 1L;
-    private final Error error;
+    private final transient Error error;
 
     public DeviceRequestFailedException(final String message, @Nonnull final Error error) {
         super(message);
index 1b1dc424786a060581ae290cc7892dabe82ab680..7da6eb110c7cc5a3434a70f4bc1864d22db8e758 100644 (file)
@@ -16,8 +16,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev1
  *
  * @author michal.polkorab
  */
-public final class ExperimenterActionSerializerKey extends ActionSerializerKey<ExperimenterIdCase>
-        implements ExperimenterSerializerKey {
+public final class ExperimenterActionSerializerKey extends ActionSerializerKey<ExperimenterIdCase> {
 
     private final Class<? extends ExperimenterActionSubType> actionSubType;
 
index c4f1f16c4f16f691f0022a512cd0c7818ff521c9..abd9dd3b21760b9cb60767c78b90b5498d9143fe 100644 (file)
@@ -15,8 +15,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225
  *
  * @author michal.polkorab
  */
-public final class ExperimenterInstructionSerializerKey extends InstructionSerializerKey<ExperimenterIdCase>
-        implements ExperimenterSerializerKey {
+public final class ExperimenterInstructionSerializerKey extends InstructionSerializerKey<ExperimenterIdCase> {
 
     /**
      * Constructor.
index 4ad0097dc793dc9642492feef8de35e8b930e27e..13a9e38edad9d1a31848713394b4cf905dc72f8f 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.openflowjava.protocol.impl.core;
 
 import com.google.common.base.MoreObjects;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.util.List;
@@ -54,6 +55,7 @@ public class SwitchConnectionProviderFactoryImpl implements SwitchConnectionProv
         }
     }
 
+    @SuppressFBWarnings("PZLA_PREFER_ZERO_LENGTH_ARRAYS")
     private static byte[] address2bin(final String value) {
         //TODO: translate ipv4 or ipv6 into byte[]
         return null;
index be60738b5f1e7fed2c6f21ddfd27021d8064681c..c7bc5cc18a7563abb90fa241dd7c3d2c37cc8757 100755 (executable)
@@ -78,12 +78,10 @@ public class SwitchConnectionProviderImpl implements SwitchConnectionProvider, C
             serializerRegistry.setGroupAddModConfig(connConfig.isGroupAddModEnabled());
         }
         serializerRegistry.init();
-        serializationFactory = new SerializationFactory();
-        serializationFactory.setSerializerTable(serializerRegistry);
+        serializationFactory = new SerializationFactory(serializerRegistry);
         deserializerRegistry = new DeserializerRegistryImpl();
         deserializerRegistry.init();
-        deserializationFactory = new DeserializationFactory();
-        deserializationFactory.setRegistry(deserializerRegistry);
+        deserializationFactory = new DeserializationFactory(deserializerRegistry);
     }
 
     @Override
index e7abda93fb11da7aeba82d029c1cffb7e2256d74..8cf0536bdcf7c21d1f8a2b0d03dc1f0a72d34b84 100644 (file)
@@ -14,6 +14,7 @@ import io.netty.channel.socket.SocketChannel;
 import io.netty.handler.ssl.SslHandler;
 import io.netty.util.concurrent.Future;
 import java.net.InetAddress;
+import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
@@ -90,7 +91,8 @@ public class TcpChannelInitializer extends ProtocolChannelInitializer<SocketChan
                     LOG.debug("Requested Cipher Suites are: {}", suitesList);
                     String[] suites = suitesList.toArray(new String[suitesList.size()]);
                     engine.setEnabledCipherSuites(suites);
-                    LOG.debug("Cipher suites enabled in SSLEngine are: {}", engine.getEnabledCipherSuites().toString());
+                    LOG.debug("Cipher suites enabled in SSLEngine are: {}",
+                            Arrays.toString(engine.getEnabledCipherSuites()));
                 }
                 final SslHandler ssl = new SslHandler(engine);
                 final Future<Channel> handshakeFuture = ssl.handshakeFuture();
index 774e62237b0bd84f84929465eca60be2a41f808c..92ef79bd3490f5389cd699411dad2fd76ed907e9 100644 (file)
@@ -68,7 +68,7 @@ abstract class AbstractStackedOutboundQueue implements OutboundQueue {
 
         for (int i = unflushedSegments.size(); i <= segmentOffset; ++i) {
             final StackedSegment newSegment = StackedSegment.create(first.getBaseXid()
-                    + StackedSegment.SEGMENT_SIZE * i);
+                    + StackedSegment.SEGMENT_SIZE * (long)i);
             LOG.debug("Adding segment {}", newSegment);
             unflushedSegments.add(newSegment);
         }
index b2d2a4381b10062483dc5ae88a6b3c939b613a54..2f03a1a462534cbc4b4602947d30a1b5ffa8e2b1 100644 (file)
@@ -28,9 +28,11 @@ import org.opendaylight.yangtools.yang.binding.DataObject;
 public class DeserializationFactory {
 
     private final Map<TypeToClassKey, Class<?>> messageClassMap = new ConcurrentHashMap<>();
-    private DeserializerRegistry registry;
+    private final DeserializerRegistry registry;
+
+    public DeserializationFactory(final DeserializerRegistry registry) {
+        this.registry = registry;
 
-    public DeserializationFactory() {
         TypeToClassMapInitializer.initializeTypeToClassMap(messageClassMap);
 
         // Register type to class map for additional deserializers
@@ -78,9 +80,4 @@ public class DeserializationFactory {
 
         return messageClassMap.remove(key) != null;
     }
-
-    public void setRegistry(final DeserializerRegistry registry) {
-        this.registry = registry;
-    }
-
 }
index 0c7ebf17f0fb85952590e9b13d6a810cd967165e..4cd8d88f364dc132f35ef181f0cc3eb8096ef1af 100644 (file)
@@ -8,9 +8,11 @@
 
 package org.opendaylight.openflowjava.protocol.impl.deserialization.action;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
@@ -34,7 +36,10 @@ public class OF13SetFieldActionDeserializer extends AbstractActionDeserializer
     private DeserializerRegistry registry;
 
     @Override
+    @SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
     public Action deserialize(ByteBuf input) {
+        Objects.requireNonNull(registry);
+
         final  org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping
             .ActionBuilder builder = new ActionBuilder();
         final int startIndex = input.readerIndex();
index 80a876def4d5f5ab5b6eabca4db7226416ef7c5c..3069ea369e73cdefab3098080bf4dd2f7faf88dc 100644 (file)
@@ -8,7 +8,9 @@
 
 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
@@ -46,7 +48,10 @@ public class ErrorMessageFactory implements OFDeserializer<ErrorMessage>,
     private DeserializerRegistry registry;
 
     @Override
+    @SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
     public ErrorMessage deserialize(ByteBuf rawMessage) {
+        Objects.requireNonNull(registry);
+
         int startIndex = rawMessage.readerIndex();
         ErrorMessageBuilder builder = new ErrorMessageBuilder();
         builder.setVersion((short) EncodeConstants.OF13_VERSION_ID);
index a5d854b929ef88d95273e954c62077c30da500f9..13995727f8beb123deba0f5d5991a5ddd9669352 100644 (file)
@@ -8,7 +8,9 @@
 
 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
@@ -30,7 +32,10 @@ public class ExperimenterMessageFactory implements OFDeserializer<ExperimenterMe
     private DeserializerRegistry deserializerRegistry;
 
     @Override
+    @SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
     public ExperimenterMessage deserialize(ByteBuf message) {
+        Objects.requireNonNull(deserializerRegistry);
+
         final long xid = message.readUnsignedInt();
         final long expId = message.readUnsignedInt();
         final long expType = message.readUnsignedInt();
index 966b30ace8317b8794bbf2c142412cac9a3a0c77..ad553ce50af9b655d4a4b5646b292d11515a4f2f 100644 (file)
@@ -7,9 +7,11 @@
  */
 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
 import java.math.BigInteger;
 import java.util.List;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
@@ -36,7 +38,10 @@ public class FlowModInputMessageFactory implements OFDeserializer<FlowModInput>,
     private DeserializerRegistry registry;
 
     @Override
+    @SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
     public FlowModInput deserialize(ByteBuf rawMessage) {
+        Objects.requireNonNull(registry);
+
         FlowModInputBuilder builder = new FlowModInputBuilder();
         builder.setVersion((short) EncodeConstants.OF13_VERSION_ID);
         builder.setXid(rawMessage.readUnsignedInt());
@@ -68,11 +73,11 @@ public class FlowModInputMessageFactory implements OFDeserializer<FlowModInput>,
 
     @SuppressWarnings("checkstyle:AbbreviationAsWordInName")
     private static FlowModFlags createFlowModFlagsFromBitmap(int input) {
-        final Boolean _oFPFFSENDFLOWREM = (input & 1 << 0) > 0;
-        final Boolean _oFPFFCHECKOVERLAP = (input & 1 << 1) > 0;
-        final Boolean _oFPFFRESETCOUNTS = (input & 1 << 2) > 0;
-        final Boolean _oFPFFNOPKTCOUNTS = (input & 1 << 3) > 0;
-        final Boolean _oFPFFNOBYTCOUNTS = (input & 1 << 4) > 0;
+        final Boolean _oFPFFSENDFLOWREM = (input & 1 << 0) != 0;
+        final Boolean _oFPFFCHECKOVERLAP = (input & 1 << 1) != 0;
+        final Boolean _oFPFFRESETCOUNTS = (input & 1 << 2) != 0;
+        final Boolean _oFPFFNOPKTCOUNTS = (input & 1 << 3) != 0;
+        final Boolean _oFPFFNOBYTCOUNTS = (input & 1 << 4) != 0;
         return new FlowModFlags(_oFPFFCHECKOVERLAP, _oFPFFNOBYTCOUNTS, _oFPFFNOPKTCOUNTS, _oFPFFRESETCOUNTS,
                 _oFPFFSENDFLOWREM);
     }
index f736b8597a059a10f63cb4f1fbd5747ab33e8508..f8a5667e62dae64d614708e52e2544a5b85991d7 100644 (file)
@@ -8,8 +8,10 @@
 
 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
 import java.math.BigInteger;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
@@ -33,7 +35,10 @@ public class FlowRemovedMessageFactory implements OFDeserializer<FlowRemovedMess
     private DeserializerRegistry registry;
 
     @Override
+    @SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
     public FlowRemovedMessage deserialize(ByteBuf rawMessage) {
+        Objects.requireNonNull(registry);
+
         FlowRemovedMessageBuilder builder = new FlowRemovedMessageBuilder();
         builder.setVersion((short) EncodeConstants.OF13_VERSION_ID);
         builder.setXid(rawMessage.readUnsignedInt());
index 568b9aaecdb22d147deb22ffce20fc1a556264ed..2a6ab7e314b485d4ec96e41b9180c33080263c15 100644 (file)
@@ -7,9 +7,11 @@
  */
 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
@@ -46,7 +48,10 @@ public class MeterModInputMessageFactory implements OFDeserializer<MeterModInput
     }
 
     @Override
+    @SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
     public MeterModInput deserialize(ByteBuf rawMessage) {
+        Objects.requireNonNull(registry);
+
         MeterModInputBuilder builder = new MeterModInputBuilder();
         builder.setVersion((short) EncodeConstants.OF13_VERSION_ID);
         builder.setXid(rawMessage.readUnsignedInt());
index 73d4e839c1b6282fa8a10c2417b8a39e2ce19cec..f20e8778c305389d7fcd8aa3fef0c30bac0a0e72 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
 
 import io.netty.buffer.ByteBuf;
 import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
@@ -248,23 +249,23 @@ public class MultipartReplyMessageFactory implements OFDeserializer<MultipartRep
         MultipartReplyDescBuilder descBuilder = new MultipartReplyDescBuilder();
         byte[] mfrDescBytes = new byte[DESC_STR_LEN];
         input.readBytes(mfrDescBytes);
-        String mfrDesc = new String(mfrDescBytes);
+        String mfrDesc = new String(mfrDescBytes, StandardCharsets.UTF_8);
         descBuilder.setMfrDesc(mfrDesc.trim());
         byte[] hwDescBytes = new byte[DESC_STR_LEN];
         input.readBytes(hwDescBytes);
-        String hwDesc = new String(hwDescBytes);
+        String hwDesc = new String(hwDescBytes, StandardCharsets.UTF_8);
         descBuilder.setHwDesc(hwDesc.trim());
         byte[] swDescBytes = new byte[DESC_STR_LEN];
         input.readBytes(swDescBytes);
-        String swDesc = new String(swDescBytes);
+        String swDesc = new String(swDescBytes, StandardCharsets.UTF_8);
         descBuilder.setSwDesc(swDesc.trim());
         byte[] serialNumBytes = new byte[SERIAL_NUM_LEN];
         input.readBytes(serialNumBytes);
-        String serialNum = new String(serialNumBytes);
+        String serialNum = new String(serialNumBytes, StandardCharsets.UTF_8);
         descBuilder.setSerialNum(serialNum.trim());
         byte[] dpDescBytes = new byte[DESC_STR_LEN];
         input.readBytes(dpDescBytes);
-        String dpDesc = new String(dpDescBytes);
+        String dpDesc = new String(dpDescBytes, StandardCharsets.UTF_8);
         descBuilder.setDpDesc(dpDesc.trim());
         caseBuilder.setMultipartReplyDesc(descBuilder.build());
         return caseBuilder.build();
index c4c5df2aac697c6a7bbbbc3fb283675755c6a3a6..ddab52a6590c0dbf36828a909065411dc86f794f 100644 (file)
@@ -7,10 +7,12 @@
  */
 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
 import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
@@ -98,9 +100,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
  *
  * @author giuseppex.petralia@intel.com
  */
+@SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
 public class MultipartRequestInputMessageFactory
         implements OFDeserializer<MultipartRequestInput>, DeserializerRegistryInjector {
-    private DeserializerRegistry registry;
     private static final byte PADDING = 4;
     private static final byte FLOW_PADDING_1 = 3;
     private static final byte FLOW_PADDING_2 = 4;
@@ -111,6 +113,8 @@ public class MultipartRequestInputMessageFactory
     private static final byte MULTIPART_REQUEST_TABLE_FEATURES_STRUCTURE_LENGTH = 64;
     private static final byte COMMON_PROPERTY_LENGTH = 4;
 
+    private DeserializerRegistry registry;
+
     @Override
     public void injectDeserializerRegistry(DeserializerRegistry deserializerRegistry) {
         registry = deserializerRegistry;
@@ -118,6 +122,8 @@ public class MultipartRequestInputMessageFactory
 
     @Override
     public MultipartRequestInput deserialize(ByteBuf rawMessage) {
+        Objects.requireNonNull(registry);
+
         MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
         builder.setVersion((short) EncodeConstants.OF13_VERSION_ID);
         builder.setXid(rawMessage.readUnsignedInt());
@@ -184,7 +190,7 @@ public class MultipartRequestInputMessageFactory
 
     @SuppressWarnings("checkstyle:AbbreviationAsWordInName")
     private static MultipartRequestFlags getMultipartRequestFlags(int input) {
-        final Boolean _oFPMPFREQMORE = (input & 1 << 0) > 0;
+        final Boolean _oFPMPFREQMORE = (input & 1 << 0) != 0;
         MultipartRequestFlags flag = new MultipartRequestFlags(_oFPMPFREQMORE);
         return flag;
     }
index e7eaf6ea2de70b5017e26038dfd40fa2309ae699..44d4b6985619216d463058017dfabae9fe21b6c9 100644 (file)
@@ -7,9 +7,11 @@
  */
 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
 import java.math.BigInteger;
 import java.util.List;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
@@ -41,7 +43,10 @@ public class OF10FlowModInputMessageFactory implements OFDeserializer<FlowModInp
     }
 
     @Override
+    @SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
     public FlowModInput deserialize(ByteBuf rawMessage) {
+        Objects.requireNonNull(registry);
+
         FlowModInputBuilder builder = new FlowModInputBuilder();
         builder.setVersion((short) EncodeConstants.OF10_VERSION_ID);
         builder.setXid(rawMessage.readUnsignedInt());
@@ -68,9 +73,9 @@ public class OF10FlowModInputMessageFactory implements OFDeserializer<FlowModInp
 
     @SuppressWarnings("checkstyle:AbbreviationAsWordInName")
     private static FlowModFlagsV10 createFlowModFlagsFromBitmap(int input) {
-        final Boolean _oFPFFSENDFLOWREM = (input & 1 << 0) > 0;
-        final Boolean _oFPFFCHECKOVERLAP = (input & 1 << 1) > 0;
-        final Boolean _oFPFFEMERG = (input & 1 << 2) > 0;
+        final Boolean _oFPFFSENDFLOWREM = (input & 1 << 0) != 0;
+        final Boolean _oFPFFCHECKOVERLAP = (input & 1 << 1) != 0;
+        final Boolean _oFPFFEMERG = (input & 1 << 2) != 0;
         return new FlowModFlagsV10(_oFPFFCHECKOVERLAP, _oFPFFEMERG, _oFPFFSENDFLOWREM);
     }
 
index 5e6fde9ec7e301b7e58c198a921a39786f39828f..cfdf52d1602b6f78f3eeab81b6e35f024f9a628d 100644 (file)
@@ -8,8 +8,10 @@
 
 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
 import java.math.BigInteger;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
@@ -33,7 +35,10 @@ public class OF10FlowRemovedMessageFactory implements OFDeserializer<FlowRemoved
     private DeserializerRegistry registry;
 
     @Override
+    @SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
     public FlowRemovedMessage deserialize(ByteBuf rawMessage) {
+        Objects.requireNonNull(registry);
+
         FlowRemovedMessageBuilder builder = new FlowRemovedMessageBuilder();
         builder.setVersion((short) EncodeConstants.OF10_VERSION_ID);
         builder.setXid(rawMessage.readUnsignedInt());
index 31f4b1692dc82c53ef1434cc6ff76a5ca4e56505..6e84901a2bab1c6b44bc4a164f56fbe675fbb825 100644 (file)
@@ -51,10 +51,7 @@ public class OF10PacketOutInputMessageFactory implements OFDeserializer<PacketOu
         byte[] data = new byte[rawMessage.readableBytes()];
         rawMessage.readBytes(data);
 
-        if (data != null) {
-
-            builder.setData(data);
-        }
+        builder.setData(data);
         return builder.build();
     }
 
index 4bf2331e0a478829131b8ef56f60ef4ee7b55c57..2dd19bbaac361b639eb2de92ff07a21855ca547c 100644 (file)
@@ -38,29 +38,29 @@ public class OF10PortModInputMessageFactory implements OFDeserializer<PortModInp
     }
 
     private static PortConfigV10 createPortConfig(final long input) {
-        final Boolean _portDown = (input & 1 << 0) > 0;
-        final Boolean _noStp = (input & 1 << 1) > 0;
-        final Boolean _noRecv = (input & 1 << 2) > 0;
-        final Boolean _noRecvStp = (input & 1 << 3) > 0;
-        final Boolean _noFlood = (input & 1 << 4) > 0;
-        final Boolean _noFwd = (input & 1 << 5) > 0;
-        final Boolean _noPacketIn = (input & 1 << 6) > 0;
+        final Boolean _portDown = (input & 1 << 0) != 0;
+        final Boolean _noStp = (input & 1 << 1) != 0;
+        final Boolean _noRecv = (input & 1 << 2) != 0;
+        final Boolean _noRecvStp = (input & 1 << 3) != 0;
+        final Boolean _noFlood = (input & 1 << 4) != 0;
+        final Boolean _noFwd = (input & 1 << 5) != 0;
+        final Boolean _noPacketIn = (input & 1 << 6) != 0;
         return new PortConfigV10(_noFlood, _noFwd, _noPacketIn, _noRecv, _noRecvStp, _noStp, _portDown);
     }
 
     private static PortFeaturesV10 createPortFeatures(final long input) {
-        final Boolean _10mbHd = (input & 1 << 0) > 0;
-        final Boolean _10mbFd = (input & 1 << 1) > 0;
-        final Boolean _100mbHd = (input & 1 << 2) > 0;
-        final Boolean _100mbFd = (input & 1 << 3) > 0;
-        final Boolean _1gbHd = (input & 1 << 4) > 0;
-        final Boolean _1gbFd = (input & 1 << 5) > 0;
-        final Boolean _10gbFd = (input & 1 << 6) > 0;
-        final Boolean _copper = (input & 1 << 7) > 0;
-        final Boolean _fiber = (input & 1 << 8) > 0;
-        final Boolean _autoneg = (input & 1 << 9) > 0;
-        final Boolean _pause = (input & 1 << 10) > 0;
-        final Boolean _pauseAsym = (input & 1 << 11) > 0;
+        final Boolean _10mbHd = (input & 1 << 0) != 0;
+        final Boolean _10mbFd = (input & 1 << 1) != 0;
+        final Boolean _100mbHd = (input & 1 << 2) != 0;
+        final Boolean _100mbFd = (input & 1 << 3) != 0;
+        final Boolean _1gbHd = (input & 1 << 4) != 0;
+        final Boolean _1gbFd = (input & 1 << 5) != 0;
+        final Boolean _10gbFd = (input & 1 << 6) != 0;
+        final Boolean _copper = (input & 1 << 7) != 0;
+        final Boolean _fiber = (input & 1 << 8) != 0;
+        final Boolean _autoneg = (input & 1 << 9) != 0;
+        final Boolean _pause = (input & 1 << 10) != 0;
+        final Boolean _pauseAsym = (input & 1 << 11) != 0;
         return new PortFeaturesV10(_100mbFd, _100mbHd, _10gbFd, _10mbFd, _10mbHd, _1gbFd, _1gbHd, _autoneg, _copper,
                 _fiber, _pause, _pauseAsym);
     }
index d6e4702b3f21e1f9014d46fda7c60d8cfd4ed3e6..09a1db6424be7b7777c80d3590e52c85244200ba 100644 (file)
@@ -8,10 +8,13 @@
 
 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
 import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
@@ -66,6 +69,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
  *
  * @author michal.polkorab
  */
+@SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
 public class OF10StatsReplyMessageFactory implements OFDeserializer<MultipartReplyMessage>,
         DeserializerRegistryInjector {
 
@@ -84,6 +88,8 @@ public class OF10StatsReplyMessageFactory implements OFDeserializer<MultipartRep
 
     @Override
     public MultipartReplyMessage deserialize(ByteBuf rawMessage) {
+        Objects.requireNonNull(registry);
+
         MultipartReplyMessageBuilder builder = new MultipartReplyMessageBuilder();
         builder.setVersion((short) EncodeConstants.OF10_VERSION_ID);
         builder.setXid(rawMessage.readUnsignedInt());
@@ -123,23 +129,23 @@ public class OF10StatsReplyMessageFactory implements OFDeserializer<MultipartRep
         MultipartReplyDescBuilder descBuilder = new MultipartReplyDescBuilder();
         byte[] mfrDescBytes = new byte[DESC_STR_LEN];
         input.readBytes(mfrDescBytes);
-        String mfrDesc = new String(mfrDescBytes);
+        String mfrDesc = new String(mfrDescBytes, StandardCharsets.UTF_8);
         descBuilder.setMfrDesc(mfrDesc.trim());
         byte[] hwDescBytes = new byte[DESC_STR_LEN];
         input.readBytes(hwDescBytes);
-        String hwDesc = new String(hwDescBytes);
+        String hwDesc = new String(hwDescBytes, StandardCharsets.UTF_8);
         descBuilder.setHwDesc(hwDesc.trim());
         byte[] swDescBytes = new byte[DESC_STR_LEN];
         input.readBytes(swDescBytes);
-        String swDesc = new String(swDescBytes);
+        String swDesc = new String(swDescBytes, StandardCharsets.UTF_8);
         descBuilder.setSwDesc(swDesc.trim());
         byte[] serialNumBytes = new byte[SERIAL_NUM_LEN];
         input.readBytes(serialNumBytes);
-        String serialNum = new String(serialNumBytes);
+        String serialNum = new String(serialNumBytes, StandardCharsets.UTF_8);
         descBuilder.setSerialNum(serialNum.trim());
         byte[] dpDescBytes = new byte[DESC_STR_LEN];
         input.readBytes(dpDescBytes);
-        String dpDesc = new String(dpDescBytes);
+        String dpDesc = new String(dpDescBytes, StandardCharsets.UTF_8);
         descBuilder.setDpDesc(dpDesc.trim());
         caseBuilder.setMultipartReplyDesc(descBuilder.build());
         return caseBuilder.build();
index df1c003ea4eb5e2e059748c855cb48e4c2799437..07745c8fc408991848b9e67d263de3033ca59274 100644 (file)
@@ -7,7 +7,9 @@
  */
 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
@@ -45,6 +47,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
  *
  * @author giuseppex.petralia@intel.com
  */
+@SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
 public class OF10StatsRequestInputFactory
         implements OFDeserializer<MultipartRequestInput>, DeserializerRegistryInjector {
     private DeserializerRegistry registry;
@@ -53,6 +56,8 @@ public class OF10StatsRequestInputFactory
 
     @Override
     public MultipartRequestInput deserialize(ByteBuf rawMessage) {
+        Objects.requireNonNull(registry);
+
         MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
         builder.setVersion((short) EncodeConstants.OF10_VERSION_ID);
         builder.setXid(rawMessage.readUnsignedInt());
@@ -156,7 +161,7 @@ public class OF10StatsRequestInputFactory
 
     @SuppressWarnings("checkstyle:AbbreviationAsWordInName")
     private static MultipartRequestFlags getMultipartRequestFlags(int input) {
-        final Boolean _oFPMPFREQMORE = (input & 1 << 0) > 0;
+        final Boolean _oFPMPFREQMORE = (input & 1 << 0) != 0;
         MultipartRequestFlags flag = new MultipartRequestFlags(_oFPMPFREQMORE);
         return flag;
     }
index c0332d68e6d44ba44ec328e9d94519b3e4268089..b9e7fae677f594695b108c6be54536e639819c1d 100644 (file)
@@ -8,8 +8,10 @@
 
 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
 import java.math.BigInteger;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
@@ -36,7 +38,10 @@ public class PacketInMessageFactory implements OFDeserializer<PacketInMessage>,
     private DeserializerRegistry registry;
 
     @Override
+    @SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
     public PacketInMessage deserialize(final ByteBuf rawMessage) {
+        Objects.requireNonNull(registry);
+
         PacketInMessageBuilder builder = new PacketInMessageBuilder();
         builder.setVersion((short) EncodeConstants.OF13_VERSION_ID);
         builder.setXid(rawMessage.readUnsignedInt());
index 1a3cb50205f06ad36ab90e846a6c6bd1ef57c566..44449d65c08ab8b4b07f942fc3a6f2462136c773 100644 (file)
@@ -41,9 +41,8 @@ public class PacketOutInputMessageFactory implements OFDeserializer<PacketOutInp
         builder.setAction(actions);
         byte[] data = new byte[rawMessage.readableBytes()];
         rawMessage.readBytes(data);
-        if (data != null) {
-            builder.setData(data);
-        }
+
+        builder.setData(data);
         return builder.build();
     }
 
index 74e98efbcc41ba4364acf0767d615cd7ad6c2e20..40e9168caeb7e7d4bd99feff5934c1c0ece9dd3f 100644 (file)
@@ -8,9 +8,11 @@
 
 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
@@ -34,6 +36,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
  * @author timotej.kubas
  * @author michal.polkorab
  */
+@SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
 public class QueueGetConfigReplyMessageFactory implements OFDeserializer<GetQueueConfigOutput>,
         DeserializerRegistryInjector {
 
@@ -46,6 +49,8 @@ public class QueueGetConfigReplyMessageFactory implements OFDeserializer<GetQueu
 
     @Override
     public GetQueueConfigOutput deserialize(ByteBuf rawMessage) {
+        Objects.requireNonNull(registry);
+
         GetQueueConfigOutputBuilder builder = new GetQueueConfigOutputBuilder();
         builder.setVersion((short) EncodeConstants.OF13_VERSION_ID);
         builder.setXid(rawMessage.readUnsignedInt());
index e78e2b677e7b55090953540097b8449be72d8341..21955b769e01dc83cae45397fbb540e9b7c5c982 100644 (file)
@@ -8,7 +8,9 @@
 
 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
@@ -30,7 +32,10 @@ public class VendorMessageFactory implements OFDeserializer<ExperimenterMessage>
     private DeserializerRegistry deserializerRegistry;
 
     @Override
+    @SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
     public ExperimenterMessage deserialize(ByteBuf message) {
+        Objects.requireNonNull(deserializerRegistry);
+
         final long xid = message.readUnsignedInt();
         final long expId = message.readUnsignedInt();
         OFDeserializer<ExperimenterDataOfChoice> deserializer = deserializerRegistry.getDeserializer(
index 6a21b2df69e96a08c4755adf47e2a613a13f73aa..85da215d4441e6fb463a20902706a36cf3b97b17 100644 (file)
@@ -22,7 +22,11 @@ import org.opendaylight.yangtools.yang.binding.DataObject;
  */
 public class SerializationFactory {
 
-    private SerializerRegistry registry;
+    private final SerializerRegistry registry;
+
+    public SerializationFactory(SerializerRegistry registry) {
+        this.registry = registry;
+    }
 
     /**
      * Transforms POJO message into ByteBuf.
@@ -36,14 +40,4 @@ public class SerializationFactory {
                 new MessageTypeKey<>(version, message.getImplementedInterface()));
         serializer.serialize(message, out);
     }
-
-    /**
-     * Sets the SerializerRegistry.
-     *
-     * @param serializerRegistry registry with serializers
-     */
-    public void setSerializerTable(SerializerRegistry serializerRegistry) {
-        this.registry = serializerRegistry;
-    }
-
 }
index 769a4c3e48ace2977e308e617bd837888ee0df5a..2bf64326785e5ffd51c1f59b23a7cc941f1a0e9a 100644 (file)
@@ -8,7 +8,9 @@
 
 package org.opendaylight.openflowjava.protocol.impl.serialization.action;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.HeaderSerializer;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
@@ -33,7 +35,10 @@ public class OF13SetFieldActionSerializer implements OFSerializer<Action>,
     private SerializerRegistry registry;
 
     @Override
+    @SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
     public void serialize(Action action, ByteBuf outBuffer) {
+        Objects.requireNonNull(registry);
+
         final int startIndex = outBuffer.writerIndex();
         outBuffer.writeShort(ActionConstants.SET_FIELD_CODE);
         final int lengthIndex = outBuffer.writerIndex();
index fa39181747c3f3f55fb7502fe99f324546818f61..ee9e85aaf4efe7a137686d2432bf6eca08f93e67 100644 (file)
@@ -8,7 +8,9 @@
 
 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
@@ -32,7 +34,10 @@ public class ExperimenterInputMessageFactory implements OFSerializer<Experimente
     private static final byte MESSAGE_TYPE = 4;
 
     @Override
+    @SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
     public void serialize(ExperimenterOfMessage message, ByteBuf outBuffer) {
+        Objects.requireNonNull(registry);
+
         long expId = message.getExperimenter().getValue();
         final OFSerializer<ExperimenterDataOfChoice> serializer = registry.getSerializer(
                 ExperimenterSerializerKeyFactory.createExperimenterMessageSerializerKey(
index ddc06d5082091344c0700f5b64250d102ebeaec3..c57f403e2b828f53d84236e7bd8bdd129e9781d7 100644 (file)
@@ -27,12 +27,14 @@ public class ExperimenterMessageFactory implements OFSerializer<ExperimenterMess
         ByteBufUtils.writeOFHeader(MESSAGE_TYPE, message, outBuffer, EncodeConstants.EMPTY_LENGTH);
         outBuffer.writeInt(message.getExperimenter().getValue().intValue());
         outBuffer.writeInt(message.getExpType().intValue());
+
         // TODO: Serializer for data field is vendor specific.
-        byte[] data = null;
+//        byte[] data = null;
+//
+//        if (data != null) {
+//            outBuffer.writeBytes(data);
+//        }
 
-        if (data != null) {
-            outBuffer.writeBytes(data);
-        }
         ByteBufUtils.updateOFHeaderLength(outBuffer);
     }
 }
index 4a50e19c69795b2789a21dbc557de8b8d75fc6aa..01a1050ce1e5451fd40546b4e47e069a82e01e75 100644 (file)
@@ -8,7 +8,9 @@
 
 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
@@ -37,7 +39,10 @@ public class FlowModInputMessageFactory implements OFSerializer<FlowMod>, Serial
     private SerializerRegistry registry;
 
     @Override
+    @SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
     public void serialize(final FlowMod message, final ByteBuf outBuffer) {
+        Objects.requireNonNull(registry);
+
         final int index = outBuffer.writerIndex();
         ByteBufUtils.writeOFHeader(MESSAGE_TYPE, message, outBuffer, EncodeConstants.EMPTY_LENGTH);
         outBuffer.writeLong(message.getCookie().longValue());
index 3fc32b1e9bf5664d25233b8a03c09c2fa30d1bb0..1847ab9c3a3cd61a12849f44ad1ad77b2a70695a 100644 (file)
@@ -7,7 +7,9 @@
  */
 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
@@ -33,7 +35,10 @@ public class FlowRemovedMessageFactory implements OFSerializer<FlowRemovedMessag
     }
 
     @Override
+    @SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
     public void serialize(FlowRemovedMessage message, ByteBuf outBuffer) {
+        Objects.requireNonNull(registry);
+
         final int index = outBuffer.writerIndex();
         ByteBufUtils.writeOFHeader(MESSAGE_TYPE, message, outBuffer, EncodeConstants.EMPTY_LENGTH);
         outBuffer.writeLong(message.getCookie().longValue());
index 6eb7c6f7bed9875fefd8f0e5f456269482fbb31c..112a39e628bae9fad2097de1f43ac0364db1ea12 100644 (file)
@@ -25,8 +25,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
  */
 public class GetFeaturesOutputFactory implements OFSerializer<GetFeaturesOutput>, SerializerRegistryInjector {
 
-    @SuppressWarnings("unused")
-    private SerializerRegistry registry;
     private static final byte MESSAGE_TYPE = 6;
     private static final byte PADDING = 2;
 
@@ -45,7 +43,6 @@ public class GetFeaturesOutputFactory implements OFSerializer<GetFeaturesOutput>
 
     @Override
     public void injectSerializerRegistry(final SerializerRegistry serializerRegistry) {
-        this.registry = serializerRegistry;
     }
 
     private static void writeCapabilities(Capabilities capabilities, ByteBuf outBuffer) {
index 53dee4b3d6e915678e17aa2a15df5ce5e27d1f00..16d24ef17946289179133c39ebc965bb53f32707 100644 (file)
@@ -7,11 +7,14 @@
  */
 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.UnpooledByteBufAllocator;
+import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
@@ -56,7 +59,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.MultipartReplyBody;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyAggregateCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyDescCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyExperimenterCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyFlowCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupDescCase;
@@ -71,7 +73,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyTableFeaturesCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.aggregate._case.MultipartReplyAggregate;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.desc._case.MultipartReplyDesc;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.experimenter._case.MultipartReplyExperimenter;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.flow._case.MultipartReplyFlow;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.flow._case.multipart.reply.flow.FlowStats;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.MultipartReplyGroup;
@@ -104,10 +105,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
  *
  * @author giuseppex.petralia@intel.com
  */
+@SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
 public class MultipartReplyMessageFactory implements OFSerializer<MultipartReplyMessage>, SerializerRegistryInjector {
 
     private static final byte MESSAGE_TYPE = 19;
-    private SerializerRegistry registry;
     private static final byte PADDING = 4;
     private static final byte PORT_DESC_PADDING_1 = 4;
     private static final byte PORT_DESC_PADDING_2 = 2;
@@ -146,6 +147,8 @@ public class MultipartReplyMessageFactory implements OFSerializer<MultipartReply
     private static final byte APPLY_SETFIELD_CODE = 14;
     private static final byte APPLY_SETFIELD_MISS_CODE = 15;
 
+    private SerializerRegistry registry;
+
     @Override
     public void injectSerializerRegistry(final SerializerRegistry serializerRegistry) {
         this.registry = serializerRegistry;
@@ -153,6 +156,8 @@ public class MultipartReplyMessageFactory implements OFSerializer<MultipartReply
 
     @Override
     public void serialize(final MultipartReplyMessage message, final ByteBuf outBuffer) {
+        Objects.requireNonNull(registry);
+
         ByteBufUtils.writeOFHeader(MESSAGE_TYPE, message, outBuffer, EncodeConstants.EMPTY_LENGTH);
         outBuffer.writeShort(message.getType().getIntValue());
         writeFlags(message.getFlags(), outBuffer);
@@ -210,8 +215,8 @@ public class MultipartReplyMessageFactory implements OFSerializer<MultipartReply
     }
 
     private void serializeExperimenterBody(final MultipartReplyBody body, final ByteBuf outBuffer) {
-        MultipartReplyExperimenterCase experimenterCase = (MultipartReplyExperimenterCase) body;
-        MultipartReplyExperimenter experimenterBody = experimenterCase.getMultipartReplyExperimenter();
+//        MultipartReplyExperimenterCase experimenterCase = (MultipartReplyExperimenterCase) body;
+//        MultipartReplyExperimenter experimenterBody = experimenterCase.getMultipartReplyExperimenter();
         // TODO: experimenterBody does not have get methods
     }
 
@@ -283,8 +288,6 @@ public class MultipartReplyMessageFactory implements OFSerializer<MultipartReply
                         writeOxmRelatedTableProperty(tableFeatureBuff, tableFeatureProp, APPLY_SETFIELD_MISS_CODE);
                         break;
                     case OFPTFPTEXPERIMENTER:
-                        writeExperimenterRelatedTableProperty(tableFeatureBuff, tableFeatureProp);
-                        break;
                     case OFPTFPTEXPERIMENTERMISS:
                         writeExperimenterRelatedTableProperty(tableFeatureBuff, tableFeatureProp);
                         break;
@@ -647,7 +650,7 @@ public class MultipartReplyMessageFactory implements OFSerializer<MultipartReply
         for (FlowStats flowStats : flow.getFlowStats()) {
             ByteBuf flowStatsBuff = UnpooledByteBufAllocator.DEFAULT.buffer();
             flowStatsBuff.writeShort(EncodeConstants.EMPTY_LENGTH);
-            flowStatsBuff.writeByte(new Long(flowStats.getTableId()).byteValue());
+            flowStatsBuff.writeByte((byte)flowStats.getTableId().longValue());
             flowStatsBuff.writeZero(FLOW_STATS_PADDING_1);
             flowStatsBuff.writeInt(flowStats.getDurationSec().intValue());
             flowStatsBuff.writeInt(flowStats.getDurationNsec().intValue());
@@ -680,7 +683,7 @@ public class MultipartReplyMessageFactory implements OFSerializer<MultipartReply
     }
 
     private void write256String(final String toWrite, final ByteBuf outBuffer) {
-        byte[] nameBytes = toWrite.getBytes();
+        byte[] nameBytes = toWrite.getBytes(StandardCharsets.UTF_8);
         if (nameBytes.length < 256) {
             byte[] nameBytesPadding = new byte[256];
             int index = 0;
@@ -698,7 +701,7 @@ public class MultipartReplyMessageFactory implements OFSerializer<MultipartReply
     }
 
     private void write32String(final String toWrite, final ByteBuf outBuffer) {
-        byte[] nameBytes = toWrite.getBytes();
+        byte[] nameBytes = toWrite.getBytes(StandardCharsets.UTF_8);
         if (nameBytes.length < 32) {
             byte[] nameBytesPadding = new byte[32];
             int index = 0;
@@ -737,7 +740,7 @@ public class MultipartReplyMessageFactory implements OFSerializer<MultipartReply
     }
 
     private void writeName(final String name, final ByteBuf outBuffer) {
-        byte[] nameBytes = name.getBytes();
+        byte[] nameBytes = name.getBytes(StandardCharsets.UTF_8);
         if (nameBytes.length < 16) {
             byte[] nameBytesPadding = new byte[16];
             int index = 0;
index acfdb157f02f02f0aad2853c8579b212cfc08da7..1a7a115bb988a13fa67e738a1286eac97baa0ab3 100644 (file)
@@ -9,6 +9,7 @@
 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
 
 import io.netty.buffer.ByteBuf;
+import java.nio.charset.StandardCharsets;
 import java.util.List;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
@@ -263,8 +264,9 @@ public class MultipartRequestInputFactory implements OFSerializer<MultipartReque
                     output.writeShort(EncodeConstants.EMPTY_LENGTH);
                     output.writeByte(currTableFeature.getTableId());
                     output.writeZero(PADDING_IN_MULTIPART_REQUEST_TABLE_FEATURES_BODY);
-                    output.writeBytes(currTableFeature.getName().getBytes());
-                    output.writeZero(32 - currTableFeature.getName().getBytes().length);
+                    final byte[] nameBytes = currTableFeature.getName().getBytes(StandardCharsets.UTF_8);
+                    output.writeBytes(nameBytes);
+                    output.writeZero(32 - nameBytes.length);
                     output.writeLong(currTableFeature.getMetadataMatch().longValue());
                     output.writeLong(currTableFeature.getMetadataWrite().longValue());
                     output.writeInt(createTableConfigBitmask(currTableFeature.getConfig()));
index 7bdff7562d1808d4b2e12bfef80e50d92aaae07b..d5934b0c1d2f571fe7d47b20dfae3b352b65618e 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
 
 import io.netty.buffer.ByteBuf;
+import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.Map;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
@@ -123,7 +124,7 @@ public class OF10FeaturesReplyMessageFactory implements OFSerializer<GetFeatures
     }
 
     private void writeName(final String name, final ByteBuf outBuffer) {
-        byte[] nameBytes = name.getBytes();
+        byte[] nameBytes = name.getBytes(StandardCharsets.UTF_8);
         if (nameBytes.length < 16) {
             byte[] nameBytesPadding = new byte[16];
             int index = 0;
index f658589894a3a5117fcc1097b1fb2b32ac937c18..57adef5ff672fc591cd2d0c1dca1b8ec350f79fe 100644 (file)
@@ -8,7 +8,9 @@
 
 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
@@ -36,7 +38,10 @@ public class OF10FlowModInputMessageFactory implements OFSerializer<FlowModInput
     private SerializerRegistry registry;
 
     @Override
+    @SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
     public void serialize(final FlowModInput message, final ByteBuf outBuffer) {
+        Objects.requireNonNull(registry);
+
         ByteBufUtils.writeOFHeader(MESSAGE_TYPE, message, outBuffer, EncodeConstants.EMPTY_LENGTH);
         OFSerializer<MatchV10> matchSerializer = registry.getSerializer(new MessageTypeKey<>(
                 message.getVersion(), MatchV10.class));
index 81519758973a69b9b0237fa476349e03fa6026d0..0d5219c9d3bd33ab78c3786e97fc0bc1330407e3 100644 (file)
@@ -7,7 +7,9 @@
  */
 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
@@ -34,7 +36,10 @@ public class OF10FlowRemovedMessageFactory implements OFSerializer<FlowRemovedMe
     }
 
     @Override
+    @SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
     public void serialize(FlowRemovedMessage message, ByteBuf outBuffer) {
+        Objects.requireNonNull(registry);
+
         ByteBufUtils.writeOFHeader(MESSAGE_TYPE, message, outBuffer, EncodeConstants.EMPTY_LENGTH);
 
         OFSerializer<MatchV10> matchSerializer = registry
index a9d1560b6fb0aa8c673dd7a54f5dd4dce334cb25..5d7de896b5245150a40243d6cc9038c8742c9b60 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
 
 import io.netty.buffer.ByteBuf;
+import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.Map;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
@@ -92,7 +93,7 @@ public class OF10PortStatusMessageFactory implements OFSerializer<PortStatusMess
     }
 
     private void writeName(final String name, final ByteBuf outBuffer) {
-        byte[] nameBytes = name.getBytes();
+        byte[] nameBytes = name.getBytes(StandardCharsets.UTF_8);
         if (nameBytes.length < 16) {
             byte[] nameBytesPadding = new byte[16];
             int index = 0;
index 68f8e31a4b79c0395e931835f1f1f576e31fee14..3a315b6cd5284b47871f02e69c0a62af82e87dc2 100644 (file)
@@ -7,10 +7,13 @@
  */
 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.UnpooledByteBufAllocator;
+import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
@@ -28,14 +31,12 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.MultipartReplyBody;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyAggregateCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyDescCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyExperimenterCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyFlowCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyPortStatsCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyQueueCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyTableCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.aggregate._case.MultipartReplyAggregate;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.desc._case.MultipartReplyDesc;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.experimenter._case.MultipartReplyExperimenter;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.flow._case.MultipartReplyFlow;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.flow._case.multipart.reply.flow.FlowStats;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.stats._case.MultipartReplyPortStats;
@@ -50,6 +51,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
  *
  * @author giuseppex.petralia@intel.com
  */
+@SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
 public class OF10StatsReplyMessageFactory implements OFSerializer<MultipartReplyMessage>, SerializerRegistryInjector {
 
     private SerializerRegistry registry;
@@ -72,6 +74,8 @@ public class OF10StatsReplyMessageFactory implements OFSerializer<MultipartReply
 
     @Override
     public void serialize(MultipartReplyMessage message, ByteBuf outBuffer) {
+        Objects.requireNonNull(registry);
+
         ByteBufUtils.writeOFHeader(MESSAGE_TYPE, message, outBuffer, EncodeConstants.EMPTY_LENGTH);
         outBuffer.writeShort(message.getType().getIntValue());
         writeFlags(message.getFlags(), outBuffer);
@@ -104,8 +108,8 @@ public class OF10StatsReplyMessageFactory implements OFSerializer<MultipartReply
     }
 
     private void serializeExperimenterBody(MultipartReplyBody body, ByteBuf outBuffer) {
-        MultipartReplyExperimenterCase experimenterCase = (MultipartReplyExperimenterCase) body;
-        MultipartReplyExperimenter experimenterBody = experimenterCase.getMultipartReplyExperimenter();
+//        MultipartReplyExperimenterCase experimenterCase = (MultipartReplyExperimenterCase) body;
+//        MultipartReplyExperimenter experimenterBody = experimenterCase.getMultipartReplyExperimenter();
         // TODO: experimenterBody does not have get methods
     }
 
@@ -192,7 +196,7 @@ public class OF10StatsReplyMessageFactory implements OFSerializer<MultipartReply
         for (FlowStats flowStats : flow.getFlowStats()) {
             ByteBuf flowStatsBuff = UnpooledByteBufAllocator.DEFAULT.buffer();
             flowStatsBuff.writeShort(EncodeConstants.EMPTY_LENGTH);
-            flowStatsBuff.writeByte(new Long(flowStats.getTableId()).byteValue());
+            flowStatsBuff.writeByte((byte)flowStats.getTableId().longValue());
             flowStatsBuff.writeZero(FLOW_STATS_PADDING_1);
             OFSerializer<MatchV10> matchSerializer = registry
                     .getSerializer(new MessageTypeKey<>(message.getVersion(), MatchV10.class));
@@ -230,7 +234,7 @@ public class OF10StatsReplyMessageFactory implements OFSerializer<MultipartReply
     }
 
     private void write256String(String toWrite, ByteBuf outBuffer) {
-        byte[] nameBytes = toWrite.getBytes();
+        byte[] nameBytes = toWrite.getBytes(StandardCharsets.UTF_8);
         if (nameBytes.length < 256) {
             byte[] nameBytesPadding = new byte[256];
             int index = 0;
@@ -248,7 +252,7 @@ public class OF10StatsReplyMessageFactory implements OFSerializer<MultipartReply
     }
 
     private void write16String(String toWrite, ByteBuf outBuffer) {
-        byte[] nameBytes = toWrite.getBytes();
+        byte[] nameBytes = toWrite.getBytes(StandardCharsets.UTF_8);
         if (nameBytes.length < 16) {
             byte[] nameBytesPadding = new byte[16];
             int index = 0;
@@ -266,7 +270,7 @@ public class OF10StatsReplyMessageFactory implements OFSerializer<MultipartReply
     }
 
     private void write32String(String toWrite, ByteBuf outBuffer) {
-        byte[] nameBytes = toWrite.getBytes();
+        byte[] nameBytes = toWrite.getBytes(StandardCharsets.UTF_8);
         if (nameBytes.length < 32) {
             byte[] nameBytesPadding = new byte[32];
             int index = 0;
index 991139e8e5d72810e2b13d828a26eb89ab866b07..bba32fd9fef35aed287351be3f8776cf5c70b736 100644 (file)
@@ -8,7 +8,9 @@
 
 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
@@ -39,6 +41,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
  *
  * @author michal.polkorab
  */
+@SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
 public class OF10StatsRequestInputFactory implements OFSerializer<MultipartRequestInput>, SerializerRegistryInjector {
 
     private static final byte MESSAGE_TYPE = 16;
@@ -51,6 +54,8 @@ public class OF10StatsRequestInputFactory implements OFSerializer<MultipartReque
 
     @Override
     public void serialize(final MultipartRequestInput message, final ByteBuf outBuffer) {
+        Objects.requireNonNull(registry);
+
         ByteBufUtils.writeOFHeader(MESSAGE_TYPE, message, outBuffer, EncodeConstants.OFHEADER_SIZE);
         outBuffer.writeShort(message.getType().getIntValue());
         outBuffer.writeShort(createMultipartRequestFlagsBitmask(message.getFlags()));
index 929253a017c8623fa0a8be5c5fa226d2e1510acd..9ac36b671a62023bad902623155e4a9e4e53f040 100644 (file)
@@ -7,7 +7,9 @@
  */
 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
@@ -26,7 +28,10 @@ public class PacketInMessageFactory implements OFSerializer<PacketInMessage>, Se
     private SerializerRegistry registry;
 
     @Override
+    @SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
     public void serialize(PacketInMessage message, ByteBuf outBuffer) {
+        Objects.requireNonNull(registry);
+
         ByteBufUtils.writeOFHeader(MESSAGE_TYPE, message, outBuffer, EncodeConstants.EMPTY_LENGTH);
         outBuffer.writeInt(message.getBufferId().intValue());
         outBuffer.writeShort(message.getTotalLen().intValue());
index c2ff2de2ae27b315491c2ae1f8f1be24918d9586..ba6df1e78d7a5cb6ac01e3c7f153b494fecdf263 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
 
 import io.netty.buffer.ByteBuf;
+import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.Map;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
@@ -63,7 +64,7 @@ public class PortStatusMessageFactory implements OFSerializer<PortStatusMessage>
     }
 
     private void writeName(final String name, final ByteBuf outBuffer) {
-        byte[] nameBytes = name.getBytes();
+        byte[] nameBytes = name.getBytes(StandardCharsets.UTF_8);
         if (nameBytes.length < 16) {
             byte[] nameBytesPadding = new byte[16];
             int index = 0;
index ba98bcf8640739bb97ed3b0bdce1f2ca8bd23613..df28600025ef83affe19adbaec5f09ce09e65831 100644 (file)
@@ -53,8 +53,6 @@ public class QueueGetConfigReplyMessageFactory implements OFSerializer<GetQueueC
                 propertyBuff.writeZero(PROPERTY_HEADER_PADDING);
                 switch (property.getProperty()) {
                     case OFPQTMINRATE:
-                        serializeRateBody(property.getAugmentation(RateQueueProperty.class), propertyBuff);
-                        break;
                     case OFPQTMAXRATE:
                         serializeRateBody(property.getAugmentation(RateQueueProperty.class), propertyBuff);
                         break;
index d1faee4422c97d11cff32d6a2140619f34c3e81f..8fabaf7cada13a55668217b3a6357d01bf4ddc87 100644 (file)
@@ -8,7 +8,9 @@
 
 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
+import java.util.Objects;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
@@ -28,7 +30,10 @@ public class VendorInputMessageFactory implements OFSerializer<ExperimenterOfMes
     private SerializerRegistry registry;
 
     @Override
+    @SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
     public void serialize(ExperimenterOfMessage message, ByteBuf outBuffer) {
+        Objects.requireNonNull(registry);
+
         long expId = message.getExperimenter().getValue();
         OFSerializer<ExperimenterDataOfChoice> serializer = registry.getSerializer(
                 ExperimenterSerializerKeyFactory.createExperimenterMessageSerializerKey(
index 32bff8503315df98fd29ac42c058b59f5429bb31..5423b95ece4420e480d4108168c84e9f95f6bdc4 100644 (file)
@@ -29,8 +29,7 @@ public class DeserializationFactoryTest {
     public void test() {
         DeserializerRegistryImpl registry = new DeserializerRegistryImpl();
         registry.init();
-        DeserializationFactory factory = new DeserializationFactory();
-        factory.setRegistry(registry);
+        final DeserializationFactory factory = new DeserializationFactory(registry);
         ByteBuf buffer = PooledByteBufAllocator.DEFAULT.buffer();
         buffer.writeByte(0);
         buffer.writeShort(EncodeConstants.OFHEADER_SIZE);
@@ -46,8 +45,7 @@ public class DeserializationFactoryTest {
     public void testNotExistingDeserializer() {
         DeserializerRegistryImpl registry = new DeserializerRegistryImpl();
         registry.init();
-        DeserializationFactory factory = new DeserializationFactory();
-        factory.setRegistry(registry);
+        final DeserializationFactory factory = new DeserializationFactory(registry);
         ByteBuf buffer = PooledByteBufAllocator.DEFAULT.buffer();
         buffer.writeByte(0);
         buffer.writeShort(EncodeConstants.OFHEADER_SIZE);
index e5ba2d89d2af7b0ad19a586a0eba06a89eab8bc3..babe84bc4df73a411532070ba835098637f57aaf 100644 (file)
@@ -42,6 +42,8 @@ public class ErrorMessageFactoryTest {
     @Before
     public void startUp() {
         errorFactory = new ErrorMessageFactory();
+        Mockito.when(registry.getDeserializer(Matchers.any(MessageCodeKey.class))).thenReturn(deserializer);
+        errorFactory.injectDeserializerRegistry(registry);
     }
 
     /**
@@ -390,8 +392,6 @@ public class ErrorMessageFactoryTest {
      */
     @Test
     public void testExperimenterError() {
-        Mockito.when(registry.getDeserializer(Matchers.any(MessageCodeKey.class))).thenReturn(deserializer);
-        errorFactory.injectDeserializerRegistry(registry);
         ByteBuf bb = BufferHelper.buildBuffer("FF FF 00 00 00 01");
         BufferHelper.deserialize(errorFactory, bb);
 
index 490f5adee78b70ee03bd9faeb0d6735a458b4b15..7aefadc0e2a99058ba07066180695cc3ca938478 100644 (file)
@@ -31,8 +31,7 @@ public class SerializationFactoryTest {
     public void test() {
         SerializerRegistry registry = new SerializerRegistryImpl();
         registry.init();
-        SerializationFactory factory = new SerializationFactory();
-        factory.setSerializerTable(registry);
+        final SerializationFactory factory = new SerializationFactory(registry);
         final ByteBuf buffer = PooledByteBufAllocator.DEFAULT.buffer();
         HelloInputBuilder helloBuilder = new HelloInputBuilder();
         helloBuilder.setVersion((short) EncodeConstants.OF10_VERSION_ID);
@@ -49,8 +48,7 @@ public class SerializationFactoryTest {
     public void testNotExistingSerializer() {
         SerializerRegistry registry = new SerializerRegistryImpl();
         registry.init();
-        SerializationFactory factory = new SerializationFactory();
-        factory.setSerializerTable(registry);
+        final SerializationFactory factory = new SerializationFactory(registry);
         final ByteBuf buffer = PooledByteBufAllocator.DEFAULT.buffer();
         HelloInputBuilder helloBuilder = new HelloInputBuilder();
         helloBuilder.setVersion((short) EncodeConstants.OF10_VERSION_ID);
index 79ccb1704789ff73c4278964b8e544772abcc815..a21eb5fcc0370fd694e38b29ff4b57f8db95398c 100644 (file)
@@ -16,6 +16,7 @@ import io.netty.buffer.ByteBuf;
 import io.netty.buffer.UnpooledByteBufAllocator;
 import java.io.IOException;
 import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -335,7 +336,7 @@ public abstract class ByteBufUtils {
     public static String decodeNullTerminatedString(final ByteBuf rawMessage, final int length) {
         byte[] name = new byte[length];
         rawMessage.readBytes(name);
-        return new String(name).trim();
+        return new String(name, StandardCharsets.UTF_8).trim();
     }
 
     /**
index 6d15944550bd2b9202f51a69ecf78fd2d01688ee..11f1e92f2ebfb8b0d6db9eb02b2ca3f960a85dde 100644 (file)
@@ -37,8 +37,7 @@ public abstract class AbstractDeserializerTest {
     public void setUp() throws Exception {
         registry = new DeserializerRegistryImpl();
         registry.init();
-        factory = new DeserializationFactory();
-        factory.setRegistry(registry);
+        factory = new DeserializationFactory(registry);
         provider = new DeserializerExtensionProviderImpl(registry, factory);
         DeserializerInjector.injectDeserializers(provider);
         MessageDeserializerInjector.injectLegacyDeserializers(provider);