protected void onCommand()

in provider/fastbin/src/main/java/org/apache/aries/rsa/provider/fastbin/tcp/ServerInvokerImpl.java [231:274]


    protected void onCommand(final Transport transport, Object data) {
        try {
            final DataByteArrayInputStream bais = new DataByteArrayInputStream((Buffer) data);
            final int size = bais.readInt();
            final long correlation = bais.readVarLong();

            // Use UTF8Buffer instead of string to avoid encoding/decoding UTF-8 strings
            // for every request.
            final UTF8Buffer service = readBuffer(bais).utf8();
            final Buffer encoded_method = readBuffer(bais);

            final ServiceFactoryHolder holder = holders.get(service);
            Runnable task = null;
            if(holder==null) {
                String message = "The requested service {"+service+"} is not available";
                LOGGER.warn(message);
                task = new SendTask(bais, correlation, transport, message);
            }
            final Object svc = holder==null ? null : holder.factory.get();
            if(holder!=null) {
                try {
                    final MethodData methodData = holder.getMethodData(encoded_method);
                    task = new SendTask(svc, bais, holder, correlation, methodData, transport);
                }
                catch (ReflectiveOperationException reflectionEx) {
                    final String methodName = encoded_method.utf8().toString();
                    String message = "The requested method {"+methodName+"} is not available";
                    LOGGER.warn(message);
                    task = new SendTask(bais, correlation, transport, message);
                }
            }

            Executor executor;
            if( svc instanceof Dispatched ) {
                executor = ((Dispatched)svc).queue();
            } else {
                executor = blockingExecutor;
            }
            executor.execute(task);

        } catch (Exception e) {
            LOGGER.info("Error while reading request", e);
        }
    }