Integrate netconf-mapping-api into netconf-server
[netconf.git] / protocol / netconf-server / src / main / java / org / opendaylight / netconf / server / NetconfServerSessionListener.java
index 4fe0d1aa2e5e19a16da4250dae4e39a05c71f2e6..b3737161654228061e7a67072bc9e1681b2cc287 100644 (file)
@@ -7,20 +7,22 @@
  */
 package org.opendaylight.netconf.server;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableMap;
 import org.opendaylight.netconf.api.DocumentedException;
 import org.opendaylight.netconf.api.NetconfMessage;
 import org.opendaylight.netconf.api.NetconfSessionListener;
 import org.opendaylight.netconf.api.NetconfTerminationReason;
+import org.opendaylight.netconf.api.messages.NotificationMessage;
 import org.opendaylight.netconf.api.monitoring.NetconfMonitoringService;
 import org.opendaylight.netconf.api.monitoring.SessionEvent;
 import org.opendaylight.netconf.api.monitoring.SessionListener;
 import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
 import org.opendaylight.netconf.api.xml.XmlUtil;
-import org.opendaylight.netconf.notifications.NetconfNotification;
-import org.opendaylight.netconf.server.osgi.NetconfOperationRouter;
-import org.opendaylight.netconf.util.messages.SubtreeFilter;
+import org.opendaylight.netconf.server.osgi.NetconfOperationRouterImpl;
+import org.opendaylight.netconf.server.spi.SubtreeFilter;
 import org.opendaylight.yangtools.yang.common.ErrorSeverity;
 import org.opendaylight.yangtools.yang.common.ErrorTag;
 import org.opendaylight.yangtools.yang.common.ErrorType;
@@ -34,13 +36,12 @@ public class NetconfServerSessionListener implements NetconfSessionListener<Netc
     private static final Logger LOG = LoggerFactory.getLogger(NetconfServerSessionListener.class);
 
     private final SessionListener monitoringSessionListener;
-    private final NetconfOperationRouter operationRouter;
+    private final NetconfOperationRouterImpl operationRouter;
     private final AutoCloseable onSessionDownCloseable;
 
-    public NetconfServerSessionListener(final NetconfOperationRouter operationRouter,
-                                        final NetconfMonitoringService monitoringService,
-                                        final AutoCloseable onSessionDownCloseable) {
-        this.operationRouter = operationRouter;
+    NetconfServerSessionListener(final NetconfOperationRouterImpl operationRouter,
+            final NetconfMonitoringService monitoringService, final AutoCloseable onSessionDownCloseable) {
+        this.operationRouter = requireNonNull(operationRouter);
         monitoringSessionListener = monitoringService.getSessionListener();
         this.onSessionDownCloseable = onSessionDownCloseable;
     }
@@ -87,8 +88,7 @@ public class NetconfServerSessionListener implements NetconfSessionListener<Netc
 
             Preconditions.checkState(operationRouter != null, "Cannot handle message, session up was not yet received");
             // there is no validation since the document may contain yang schemas
-            final NetconfMessage message = processDocument(netconfMessage,
-                    session);
+            final NetconfMessage message = processDocument(netconfMessage, session);
             LOG.debug("Responding with message {}", message);
             session.sendMessage(message);
             monitoringSessionListener.onSessionEvent(SessionEvent.inRpcSuccess(session));
@@ -108,7 +108,14 @@ public class NetconfServerSessionListener implements NetconfSessionListener<Netc
         }
     }
 
-    public void onNotification(final NetconfServerSession session, final NetconfNotification notification) {
+    @Override
+    public void onError(final NetconfServerSession session, final Exception failure) {
+        session.onIncommingRpcFail();
+        monitoringSessionListener.onSessionEvent(SessionEvent.inRpcFail(session));
+        throw new IllegalStateException("Unable to process incoming message", failure);
+    }
+
+    public void onNotification(final NetconfServerSession session, final NotificationMessage notification) {
         monitoringSessionListener.onSessionEvent(SessionEvent.notification(session));
     }