Fix findbugs violations in restconf-nb-bierman02 56/68556/4
authorTom Pantelis <tompantelis@gmail.com>
Fri, 23 Feb 2018 16:55:18 +0000 (11:55 -0500)
committerJakubToth <jakub.toth@pantheon.tech>
Tue, 27 Feb 2018 20:34:44 +0000 (20:34 +0000)
- Possible null pointer dereference
- Method call passes null for non-null parameter
- Nullcheck of value previously dereferenced
- Consider using Locale parameterized version of invoked method
- Reliance on default encoding
- Inefficient use of keySet iterator instead of entrySet iterator
- Private method is never called
- Boxing/unboxing to parse a primitive
- Method concatenates strings using + in a loop
- Unchecked/unconfirmed cast of return value from method
- Method uses the same code for two switch clauses
- Parameter must be non-null but is marked as nullable
- Redundant nullcheck of value known to be non-null
- Exception is caught when Exception is not thrown
- Useless control flow

Change-Id: Ifd737d8c54532d98dd162db8d2a5915e38b13ff1
Signed-off-by: Tom Pantelis <tompantelis@gmail.com>
12 files changed:
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/JsonNormalizedNodeBodyReader.java
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/JsonToPatchBodyReader.java
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/RestconfDocumentedExceptionMapper.java
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/XmlToPatchBodyReader.java
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BatchedExistenceCheck.java
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BrokerFacade.java
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/JSONRestconfServiceImpl.java
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/QueryParametersParser.java
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestCodec.java
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestconfImpl.java
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/streams/listeners/ListenerAdapter.java
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/streams/websockets/WebSocketServerHandler.java

index ffc3e5cd977c1f76c11b6ae80d697a0c49bed105..f684af7dec8cdb3d5bbf6b80ce7797e8a2aba71c 100644 (file)
@@ -14,6 +14,7 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
@@ -119,7 +120,8 @@ public class JsonNormalizedNodeBodyReader
 
         final JsonParserStream jsonParser = JsonParserStream.create(writer,
             JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(path.getSchemaContext()), parentSchema);
-        final JsonReader reader = new JsonReader(new InputStreamReader(nonEmptyInputStreamOptional.get()));
+        final JsonReader reader = new JsonReader(new InputStreamReader(nonEmptyInputStreamOptional.get(),
+                StandardCharsets.UTF_8));
         jsonParser.parse(reader);
 
         NormalizedNode<?, ?> result = resultHolder.getResult();
index 1524fa77216d0fa4895f5ba5a1c47e8e386ea734..9ed1d045bcb13525879dcde7b9509cf267ecbc9e 100644 (file)
@@ -17,8 +17,10 @@ import java.io.InputStreamReader;
 import java.io.StringReader;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Locale;
 import java.util.Optional;
 import javax.annotation.Nonnull;
 import javax.ws.rs.Consumes;
@@ -103,7 +105,8 @@ public class JsonToPatchBodyReader extends AbstractIdentifierAwareJaxRsProvider
             return new PatchContext(path, null, null);
         }
 
-        final JsonReader jsonReader = new JsonReader(new InputStreamReader(nonEmptyInputStreamOptional.get()));
+        final JsonReader jsonReader = new JsonReader(new InputStreamReader(nonEmptyInputStreamOptional.get(),
+                StandardCharsets.UTF_8));
         final List<PatchEntity> resultList = read(jsonReader, path);
         jsonReader.close();
 
@@ -231,7 +234,7 @@ public class JsonToPatchBodyReader extends AbstractIdentifierAwareJaxRsProvider
                     edit.setId(in.nextString());
                     break;
                 case "operation" :
-                    edit.setOperation(PatchEditOperation.valueOf(in.nextString().toUpperCase()));
+                    edit.setOperation(PatchEditOperation.valueOf(in.nextString().toUpperCase(Locale.ROOT)));
                     break;
                 case "target" :
                     // target can be specified completely in request URI
index 25622c9b52f01934f41be5002bceb65904a41cf8..430f36641229e4e6bf70abfba2627a6e6dcbd858 100644 (file)
@@ -15,6 +15,7 @@ import com.google.gson.stream.JsonWriter;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
 import java.net.URI;
 import java.nio.charset.StandardCharsets;
 import java.util.Iterator;
@@ -93,7 +94,9 @@ public class RestconfDocumentedExceptionMapper implements ExceptionMapper<Restco
         LOG.debug("In toResponse: {}", exception.getMessage());
 
         final List<MediaType> accepts = headers.getAcceptableMediaTypes();
-        accepts.remove(MediaType.WILDCARD_TYPE);
+        if (accepts != null) {
+            accepts.remove(MediaType.WILDCARD_TYPE);
+        }
 
         LOG.debug("Accept headers: {}", accepts);
 
@@ -274,8 +277,12 @@ public class RestconfDocumentedExceptionMapper implements ExceptionMapper<Restco
             LOG.warn("Error writing error response body", e);
         }
 
-        return outStream.toString();
-
+        try {
+            return outStream.toString(StandardCharsets.UTF_8.name());
+        } catch (UnsupportedEncodingException e) {
+            // Shouldn't happen
+            return "Failure encoding error response: " + e;
+        }
     }
 
     private static Object toXMLResponseBody(final NormalizedNodeContext errorsNode,
@@ -350,7 +357,12 @@ public class RestconfDocumentedExceptionMapper implements ExceptionMapper<Restco
             LOG.warn("Error writing error response body.", e);
         }
 
-        return outStream.toString();
+        try {
+            return outStream.toString(StandardCharsets.UTF_8.name());
+        } catch (UnsupportedEncodingException e) {
+            // Shouldn't happen
+            return "Failure encoding error response: " + e;
+        }
     }
 
     private static void writeRootElement(final XMLStreamWriter xmlWriter, final NormalizedNodeWriter nnWriter,
index fdc2896fb0bac80f6dc7e18b55a503c04851066a..965bdf5fb0145e7b2ad1cd2f5616c63351654f82 100644 (file)
@@ -19,6 +19,7 @@ import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Optional;
 import javax.annotation.Nonnull;
 import javax.ws.rs.Consumes;
@@ -121,7 +122,7 @@ public class XmlToPatchBodyReader extends AbstractIdentifierAwareJaxRsProvider i
             DataSchemaNode schemaNode = (DataSchemaNode) pathContext.getSchemaNode();
             final Element element = (Element) editNodes.item(i);
             final String operation = element.getElementsByTagName("operation").item(0).getFirstChild().getNodeValue();
-            final PatchEditOperation oper = PatchEditOperation.valueOf(operation.toUpperCase());
+            final PatchEditOperation oper = PatchEditOperation.valueOf(operation.toUpperCase(Locale.ROOT));
 
             final String editId = element.getElementsByTagName("edit-id").item(0).getFirstChild().getNodeValue();
             final String target = element.getElementsByTagName("target").item(0).getFirstChild().getNodeValue();
index f36caa0d2dc46a965b1644b16f0359dc3f40627f..132e02256c5e3c824aed6ecbdab2f6fbad97033f 100644 (file)
@@ -12,11 +12,13 @@ import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
 import com.google.common.util.concurrent.SettableFuture;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.AbstractMap.SimpleImmutableEntry;
 import java.util.Collection;
 import java.util.Map.Entry;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
+import javax.annotation.Nonnull;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataReadTransaction;
@@ -45,11 +47,12 @@ final class BatchedExistenceCheck {
             final ListenableFuture<Boolean> f = readTx.exists(datastore, path);
             Futures.addCallback(f, new FutureCallback<Boolean>() {
                 @Override
-                public void onSuccess(final Boolean result) {
+                public void onSuccess(@Nonnull final Boolean result) {
                     ret.complete(path, result.booleanValue());
                 }
 
                 @Override
+                @SuppressFBWarnings("BC_UNCONFIRMED_CAST_OF_RETURN_VALUE")
                 public void onFailure(final Throwable throwable) {
                     final Exception e;
                     if (throwable instanceof Exception) {
index 1e3379cabc64edaee576662bdc5c2ec545379e66..2aa300f00eeec7c4781f0a1ca6cda166f3b9658f 100644 (file)
@@ -377,23 +377,6 @@ public class BrokerFacade {
                     }
                     break;
                 case DELETE:
-                    if (withoutError) {
-                        try {
-                            deleteDataWithinTransaction(patchTransaction, CONFIGURATION, patchEntity
-                                    .getTargetNode());
-                            editCollection.add(new PatchStatusEntity(patchEntity.getEditId(), true, null));
-                        } catch (final RestconfDocumentedException e) {
-                            LOG.error("Error call http Patch operation {} on target {}",
-                                    operation,
-                                    patchEntity.getTargetNode().toString());
-
-                            editErrors = new ArrayList<>();
-                            editErrors.addAll(e.getErrors());
-                            editCollection.add(new PatchStatusEntity(patchEntity.getEditId(), false, editErrors));
-                            withoutError = false;
-                        }
-                    }
-                    break;
                 case REMOVE:
                     if (withoutError) {
                         try {
index ec7b33dc09bf8e6f12e0fd296969282ee6e5b4e4..1f5b5744e0de44381fedadb3a4ebb6db88f305db 100644 (file)
@@ -162,7 +162,7 @@ public class JSONRestconfServiceImpl implements JSONRestconfService, AutoCloseab
             if (outputContext.getData() != null) {
                 output = toJson(outputContext);
             }
-        } catch (final Exception e) {
+        } catch (final RuntimeException | IOException e) {
             propagateExceptionAs(uriPath, e, "RPC");
         }
 
index 7e878591a1fa791fe821f9864d43c0df4eb70188..8dabbf7cde5c3b24d15b4f453e6cf58e7e951a00 100644 (file)
@@ -53,7 +53,7 @@ public final class QueryParametersParser {
         String param = info.getQueryParameters(false).getFirst(UriParameters.DEPTH.toString());
         if (!Strings.isNullOrEmpty(param) && !"unbounded".equals(param)) {
             try {
-                final int depth = Integer.valueOf(param);
+                final int depth = Integer.parseInt(param);
                 if (depth < 1) {
                     throw new RestconfDocumentedException(
                             new RestconfError(RestconfError.ErrorType.PROTOCOL, RestconfError.ErrorTag.INVALID_VALUE,
index eba00424143789da66403b00f9ad301195e53e7d..dbf87cbaf5106eaeb1a50ebff0c8ffb77e655a7c 100644 (file)
@@ -12,6 +12,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint;
 import org.opendaylight.netconf.sal.rest.impl.StringModuleInstanceIdentifierCodec;
 import org.opendaylight.restconf.common.util.IdentityValuesDTO;
@@ -305,8 +306,9 @@ public final class RestCodec {
 
         private static List<Predicate> keyValuesToPredicateList(final Map<QName, Object> keyValues) {
             final List<Predicate> result = new ArrayList<>();
-            for (final QName qualifiedName : keyValues.keySet()) {
-                final Object value = keyValues.get(qualifiedName);
+            for (final Entry<QName, Object> entry : keyValues.entrySet()) {
+                final QName qualifiedName = entry.getKey();
+                final Object value = entry.getValue();
                 result.add(new Predicate(qNameToIdentityValue(qualifiedName), String.valueOf(value)));
             }
             return result;
index 4dc8702f497c570d8530592ada6b9169f31fd141..5576469c14f1c71c7208c382329a1c3c0b15645e 100644 (file)
@@ -100,7 +100,6 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNo
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafNodeBuilder;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.FeatureDefinition;
 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
@@ -468,9 +467,12 @@ public final class RestconfImpl implements RestconfService {
         final DOMRpcResult result = checkRpcResponse(response);
 
         RpcDefinition resultNodeSchema = null;
-        final NormalizedNode<?, ?> resultData = result.getResult();
+        final NormalizedNode<?, ?> resultData;
         if (result != null && result.getResult() != null) {
+            resultData = result.getResult();
             resultNodeSchema = (RpcDefinition) payload.getInstanceIdentifierContext().getSchemaNode();
+        } else {
+            resultData = null;
         }
 
         return new NormalizedNodeContext(
@@ -553,7 +555,7 @@ public final class RestconfImpl implements RestconfService {
         }
         try {
             final DOMRpcResult retValue = response.get();
-            if (retValue.getErrors() == null || retValue.getErrors().isEmpty()) {
+            if (retValue.getErrors().isEmpty()) {
                 return retValue;
             }
             LOG.debug("RpcError message", retValue.getErrors());
@@ -699,11 +701,11 @@ public final class RestconfImpl implements RestconfService {
         }
         boolean tagged = false;
         if (withDefaUsed) {
-            if (withDefa.equals("report-all-tagged")) {
+            if ("report-all-tagged".equals(withDefa)) {
                 tagged = true;
                 withDefa = null;
             }
-            if (withDefa.equals("report-all")) {
+            if ("report-all".equals(withDefa)) {
                 withDefa = null;
             }
         }
@@ -933,26 +935,28 @@ public final class RestconfImpl implements RestconfService {
         String insert = null;
         String point = null;
 
-        for (final Entry<String, List<String>> entry : uriInfo.getQueryParameters().entrySet()) {
-            switch (entry.getKey()) {
-                case "insert":
-                    if (!insertUsed) {
-                        insertUsed = true;
-                        insert = entry.getValue().iterator().next();
-                    } else {
-                        throw new RestconfDocumentedException("Insert parameter can be used only once.");
-                    }
-                    break;
-                case "point":
-                    if (!pointUsed) {
-                        pointUsed = true;
-                        point = entry.getValue().iterator().next();
-                    } else {
-                        throw new RestconfDocumentedException("Point parameter can be used only once.");
-                    }
-                    break;
-                default:
-                    throw new RestconfDocumentedException("Bad parameter for post: " + entry.getKey());
+        if (uriInfo != null) {
+            for (final Entry<String, List<String>> entry : uriInfo.getQueryParameters().entrySet()) {
+                switch (entry.getKey()) {
+                    case "insert":
+                        if (!insertUsed) {
+                            insertUsed = true;
+                            insert = entry.getValue().iterator().next();
+                        } else {
+                            throw new RestconfDocumentedException("Insert parameter can be used only once.");
+                        }
+                        break;
+                    case "point":
+                        if (!pointUsed) {
+                            pointUsed = true;
+                            point = entry.getValue().iterator().next();
+                        } else {
+                            throw new RestconfDocumentedException("Point parameter can be used only once.");
+                        }
+                        break;
+                    default:
+                        throw new RestconfDocumentedException("Bad parameter for post: " + entry.getKey());
+                }
             }
         }
 
@@ -993,37 +997,6 @@ public final class RestconfImpl implements RestconfService {
         return responseBuilder.build();
     }
 
-    // FIXME create RestconfIdetifierHelper and move this method there
-    private static YangInstanceIdentifier checkConsistencyOfNormalizedNodeContext(final NormalizedNodeContext payload) {
-        Preconditions.checkArgument(payload != null);
-        Preconditions.checkArgument(payload.getData() != null);
-        Preconditions.checkArgument(payload.getData().getNodeType() != null);
-        Preconditions.checkArgument(payload.getInstanceIdentifierContext() != null);
-        Preconditions.checkArgument(payload.getInstanceIdentifierContext().getInstanceIdentifier() != null);
-
-        final QName payloadNodeQname = payload.getData().getNodeType();
-        final YangInstanceIdentifier yangIdent = payload.getInstanceIdentifierContext().getInstanceIdentifier();
-        if (payloadNodeQname.compareTo(yangIdent.getLastPathArgument().getNodeType()) > 0) {
-            return yangIdent;
-        }
-        final InstanceIdentifierContext<?> parentContext = payload.getInstanceIdentifierContext();
-        final SchemaNode parentSchemaNode = parentContext.getSchemaNode();
-        if (parentSchemaNode instanceof DataNodeContainer) {
-            final DataNodeContainer cast = (DataNodeContainer) parentSchemaNode;
-            for (final DataSchemaNode child : cast.getChildNodes()) {
-                if (payloadNodeQname.compareTo(child.getQName()) == 0) {
-                    return YangInstanceIdentifier.builder(yangIdent).node(child.getQName()).build();
-                }
-            }
-        }
-        if (parentSchemaNode instanceof RpcDefinition) {
-            return yangIdent;
-        }
-        final String errMsg = "Error parsing input: DataSchemaNode has not children ";
-        LOG.info(errMsg + yangIdent);
-        throw new RestconfDocumentedException(errMsg, ErrorType.PROTOCOL, ErrorTag.MALFORMED_MESSAGE);
-    }
-
     @SuppressWarnings("checkstyle:IllegalCatch")
     private URI resolveLocation(final UriInfo uriInfo, final String uriBehindBase, final DOMMountPoint mountPoint,
             final YangInstanceIdentifier normalizedII) {
@@ -1526,6 +1499,7 @@ public final class RestconfImpl implements RestconfService {
         final List<SchemaPath> paths = new ArrayList<>();
         String streamName = CREATE_NOTIFICATION_STREAM + "/";
 
+        StringBuilder streamNameBuilder = new StringBuilder(streamName);
         final Iterator<LeafSetEntryNode> iterator = entryNodes.iterator();
         while (iterator.hasNext()) {
             final QName valueQName = QName.create((String) iterator.next().getValue());
@@ -1544,12 +1518,14 @@ public final class RestconfImpl implements RestconfService {
             Preconditions.checkNotNull(notifiDef,
                     "Notification " + valueQName + "doesn't exist in module " + moduleName);
             paths.add(notifiDef.getPath());
-            streamName = streamName + moduleName + ":" + valueQName.getLocalName();
+            streamNameBuilder.append(moduleName).append(':').append(valueQName.getLocalName());
             if (iterator.hasNext()) {
-                streamName = streamName + ",";
+                streamNameBuilder.append(',');
             }
         }
 
+        streamName = streamNameBuilder.toString();
+
         final QName rpcQName = payload.getInstanceIdentifierContext().getSchemaNode().getQName();
         final QName outputQname = QName.create(rpcQName, "output");
         final QName streamNameQname = QName.create(rpcQName, "notification-stream-identifier");
index 2775cce13429085f1000fe0f0ebf2883473e85a5..f67bd749da03c6ee55768eba41f47708f9cb1c30 100644 (file)
@@ -11,6 +11,7 @@ import com.google.common.base.Preconditions;
 import java.io.IOException;
 import java.util.Collection;
 import java.util.Map;
+import java.util.Map.Entry;
 import javax.annotation.Nonnull;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.transform.dom.DOMResult;
@@ -311,8 +312,9 @@ public class ListenerAdapter extends AbstractCommonSubscriber implements Cluster
             writeIdentifierWithNamespacePrefix(element, textContent, pathArgument.getNodeType());
             if (pathArgument instanceof NodeIdentifierWithPredicates) {
                 final Map<QName, Object> predicates = ((NodeIdentifierWithPredicates) pathArgument).getKeyValues();
-                for (final QName keyValue : predicates.keySet()) {
-                    final String predicateValue = String.valueOf(predicates.get(keyValue));
+                for (final Entry<QName, Object> entry : predicates.entrySet()) {
+                    final QName keyValue = entry.getKey();
+                    final String predicateValue = String.valueOf(entry.getValue());
                     textContent.append("[");
                     writeIdentifierWithNamespacePrefix(element, textContent, keyValue);
                     textContent.append("='");
index 1f69dca632f78a47eca1d36c52f4ebf4e8be977f..a11d7bf803ba2829c0e8a43c649658e031d3cdc3 100755 (executable)
@@ -95,7 +95,7 @@ public class WebSocketServerHandler extends SimpleChannelInboundHandler<Object>
             }
         } else if (streamName.contains(RestconfImpl.NOTIFICATION_STREAM)) {
             final List<NotificationListenerAdapter> listeners = Notificator.getNotificationListenerFor(streamName);
-            if (!listeners.isEmpty() && (listeners != null)) {
+            if (listeners != null && !listeners.isEmpty()) {
                 for (final NotificationListenerAdapter listener : listeners) {
                     listener.addSubscriber(ctx.channel());
                     LOG.debug("Subscriber successfully registered.");
@@ -141,7 +141,7 @@ public class WebSocketServerHandler extends SimpleChannelInboundHandler<Object>
 
         // Send the response and close the connection if necessary.
         final ChannelFuture f = ctx.channel().writeAndFlush(res);
-        if (!isKeepAlive(req) || (res.getStatus().code() != 200)) {
+        if (!isKeepAlive(req) || res.getStatus().code() != 200) {
             f.addListener(ChannelFutureListener.CLOSE);
         }
     }
@@ -163,11 +163,12 @@ public class WebSocketServerHandler extends SimpleChannelInboundHandler<Object>
                 if (listener != null) {
                     listener.removeSubscriber(ctx.channel());
                     LOG.debug("Subscriber successfully registered.");
+
+                    Notificator.removeListenerIfNoSubscriberExists(listener);
                 }
-                Notificator.removeListenerIfNoSubscriberExists(listener);
             } else if (streamName.contains(RestconfImpl.NOTIFICATION_STREAM)) {
                 final List<NotificationListenerAdapter> listeners = Notificator.getNotificationListenerFor(streamName);
-                if (!listeners.isEmpty() && (listeners != null)) {
+                if (listeners != null && !listeners.isEmpty()) {
                     for (final NotificationListenerAdapter listener : listeners) {
                         listener.removeSubscriber(ctx.channel());
                     }
@@ -182,9 +183,6 @@ public class WebSocketServerHandler extends SimpleChannelInboundHandler<Object>
 
     @Override
     public void exceptionCaught(final ChannelHandlerContext ctx, final Throwable cause) throws Exception {
-        if (!(cause instanceof java.nio.channels.ClosedChannelException)) {
-            // LOG.info("Not expected error cause: ", cause.toString());
-        }
         ctx.close();
     }