code: @Override
      public void process(Exchange exchange) throws Exception {
          if (log.isTraceEnabled()) {
              log.trace(exchange.toString());
          }
  
          if (pin.isOpen()) {
  
              KuraGPIOAction messageAction = exchange.getIn().getHeader(KuraGPIOConstants.CAMEL_KURA_GPIO_ACTION,
                      getAction(), KuraGPIOAction.class);
  
              if (messageAction == null) {
                  log.trace("No action pick up body");
                  output(exchange);
              } else {
                  log.trace("action= {} ", action);
                  switch (messageAction) {
  
                  case TOGGLE:
                      pin.setValue(!pin.getValue());
                      break;
  
                  case LOW:
                      pin.setValue(false);
                      break;
  
                  case HIGH:
                      pin.setValue(true);
                      break;
  
                  case BLINK:
  
                      pool.submit(new Runnable() {
  
                          @Override
                          public void run() {
                              try {
                                  Thread.sleep(getEndpoint().getDelay());
                                  pin.setValue(!pin.getValue());
                                  Thread.sleep(getEndpoint().getDuration());
                                  pin.setValue(!pin.getValue());
                              } catch (Exception e) {
                                  log.error("Thread interruption into BLINK sequence", e);
                              }
                          }
                      });
  
                      break;
  
                  default:
                      log.error("Any action set found");
                      break;
                  }
              }
          } else {
              log.warn("Pin {} is close", pin.getIndex());
          }
      }
docs: Process the message