+/*
+ * Copyright (C) 2013 EBay Software Foundation
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Authors : Ashwin Raveendran, Madhu Venugopal
+ */
package org.opendaylight.ovsdb.lib.jsonrpc;
+import io.netty.channel.Channel;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import org.opendaylight.controller.sal.core.Node;
+import org.opendaylight.ovsdb.lib.message.OvsdbRPC;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.JsonNode;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.SettableFuture;
-import org.opendaylight.controller.sal.core.Node;
-import org.opendaylight.ovsdb.lib.message.OvsdbRPC;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import io.netty.channel.Channel;
-
public class JsonRpcEndpoint {
protected static final Logger logger = LoggerFactory.getLogger(JsonRpcEndpoint.class);
}
String s = objectMapper.writeValueAsString(request);
- logger.debug("{}", s);
+ logger.trace("{}", s);
SettableFuture<Object> sf = SettableFuture.create();
methodContext.put(request.getId(), new CallContext(request, method, sf));
public void processResult(JsonNode response) throws NoSuchMethodException {
+ logger.trace("Response : {}", response.toString());
CallContext returnCtxt = methodContext.get(response.get("id").asText());
if (returnCtxt == null) return;
JavaType javaType = TypeFactory.defaultInstance().constructType (retType.getType());
JsonNode result = response.get("result");
- logger.debug("Response : {}", result.toString());
+ logger.trace("Result : {}", result.toString());
Object result1 = objectMapper.convertValue(result, javaType);
JsonNode error = response.get("error");
- if (error != null) {
- logger.debug("Error : {}", error.toString());
+ if (error != null && !error.isNull()) {
+ logger.error("Error : {}", error.toString());
}
returnCtxt.getFuture().set(result1);
public void processRequest(Node node, JsonNode requestJson) {
JsonRpc10Request request = new JsonRpc10Request(requestJson.get("id").asText());
request.setMethod(requestJson.get("method").asText());
- logger.debug("Request : {} {}", requestJson.get("method"), requestJson.get("params"));
+ logger.trace("Request : {} {}", requestJson.get("method"), requestJson.get("params"));
OvsdbRPC.Callback callback = requestCallbacks.get(node);
if (callback != null) {
Method[] methods = callback.getClass().getDeclaredMethods();
Object param = objectMapper.convertValue(params, parameters[1]);
try {
m.invoke(callback, node, param);
- } catch (Exception e) {
- e.printStackTrace();
+ } catch (IllegalAccessException | InvocationTargetException e) {
+ logger.error("Unable to invoke callback " + m.getName(), e);
}
return;
}
if (request.getMethod().equals("echo")) {
JsonRpc10Response response = new JsonRpc10Response(request.getId());
response.setError(null);
+ String s = null;
try {
- String s = objectMapper.writeValueAsString(response);
+ s = objectMapper.writeValueAsString(response);
nettyChannel.writeAndFlush(s);
} catch (JsonProcessingException e) {
- e.printStackTrace();
+ logger.error("Exception while processing JSON string " + s, e );
}
return;
}