@Override public Message deserializeMessage(final BasicRuntime runtime, final InputStream inputStream) throws Exception { ensureInit(runtime); try { final Message message = mapper.readValue(inputStream, Message.class); // decode payload parameters according to the interface/method if (message.getPayload() != null && (message.getMessageType() == MessageDefinitions.ONE_WAY_MESSAGE || message.getMessageType() == MessageDefinitions.REQUEST_MESSAGE)) { final ObjectInvoker invoker = runtime.getInvoker(message.getInterfaceId()); final Method method = invoker.getMethod(message.getMethodId()); final Object[] args = castArgs(method.getGenericParameterTypes(), message.getPayload()); message.setPayload(args); } return message; } catch (Exception ex) { throw ex; } }
@Override public void serializeMessage(final BasicRuntime runtime, final OutputStream out, final Message message) throws Exception { ensureInit(runtime); if (message.getPayload() instanceof Throwable && message.getMessageType() == MessageDefinitions.RESPONSE_ERROR) { final StringWriter sw = new StringWriter(); try (PrintWriter pw = new PrintWriter(sw)) { ((Throwable) message.getPayload()).printStackTrace(pw); pw.flush(); } message.withPayload(sw.toString()); } if (message.getHeaders() != null && message.getHeaders().size() == 0) { message.setHeaders(null); } mapper.writeValue(out, message); }
private void logMessage(final Message message, boolean in) long messageId = message.getMessageId(); String from = message.getFromNode() != null ? String.valueOf(message.getFromNode().asUUID().getLeastSignificantBits()) : in ? "IN" : "OUT"; String to = message.getToNode() != null ? String.valueOf(message.getToNode().asUUID().getLeastSignificantBits()) : in ? "OUT" : "IN"; final Object payload = message.getPayload(); if (payload instanceof Object[]) if (message.getInterfaceId() != 0) Class clazz = DefaultClassDictionary.get().getClassById(message.getInterfaceId()); if (clazz != null) final Method method = DefaultDescriptorFactory.get().getInvoker(clazz).getMethod(message.getMethodId()); strTarget = clazz.getSimpleName() + ":" + message.getObjectId() + "." + method.getName();
@Override public void onRead(final HandlerContext ctx, final Object msg) throws Exception { Message message = (Message) msg; final Class<?> clazz = DefaultClassDictionary.get().getClassById(message.getInterfaceId()); // TODO: check method access, check object access } }
private void logMessage(final Message message, boolean in) long messageId = message.getMessageId(); String from = message.getFromNode() != null ? String.valueOf(message.getFromNode().asUUID().getLeastSignificantBits()) : in ? "IN" : "OUT"; String to = message.getToNode() != null ? String.valueOf(message.getToNode().asUUID().getLeastSignificantBits()) : in ? "OUT" : "IN"; final Object payload = message.getPayload(); if (payload instanceof Object[]) if (message.getInterfaceId() != 0) Class clazz = DefaultClassDictionary.get().getClassById(message.getInterfaceId()); if (clazz != null) final Method method = DefaultDescriptorFactory.get().getInvoker(clazz).getMethod(message.getMethodId()); strTarget = clazz.getSimpleName() + ":" + message.getObjectId() + "." + method.getName();
@Override public Message deserializeMessage(final BasicRuntime runtime, final InputStream inputStream) throws Exception { ensureInit(runtime); try { final Message message = mapper.readValue(inputStream, Message.class); // decode payload parameters according to the interface/method if (message.getPayload() != null && (message.getMessageType() == MessageDefinitions.ONE_WAY_MESSAGE || message.getMessageType() == MessageDefinitions.REQUEST_MESSAGE)) { final ObjectInvoker invoker = runtime.getInvoker(message.getInterfaceId()); final Method method = invoker.getMethod(message.getMethodId()); final Object[] args = castArgs(method.getGenericParameterTypes(), message.getPayload()); message.setPayload(args); } return message; } catch (Exception ex) { throw ex; } }
@Override public void serializeMessage(final BasicRuntime runtime, final OutputStream out, final Message message) throws Exception { ensureInit(runtime); if (message.getPayload() instanceof Throwable && message.getMessageType() == MessageDefinitions.RESPONSE_ERROR) { final StringWriter sw = new StringWriter(); try (PrintWriter pw = new PrintWriter(sw)) { ((Throwable) message.getPayload()).printStackTrace(pw); pw.flush(); } message.withPayload(sw.toString()); } if (message.getHeaders() != null && message.getHeaders().size() == 0) { message.setHeaders(null); } mapper.writeValue(out, message); }