code: @Override
      public AttributeValue[] read_attributes(final String[] attributeNames) throws DevFailed {
          MDC.setContextMap(contextMap);
          xlogger.entry();
          if (attributeNames.length != 1 || !attributeNames[0].equalsIgnoreCase(DeviceImpl.STATE_NAME)
                  && !attributeNames[0].equalsIgnoreCase(DeviceImpl.STATUS_NAME)) {
              checkInitialization();
          }
          deviceMonitoring.startRequest("read_attributes");
          clientIdentity.set(null);
          if (attributeNames.length == 0) {
              throw DevFailedUtils.newDevFailed(READ_ERROR, READ_ASKED_FOR_0_ATTRIBUTES);
          }
          AttributeValue[] result = null;
          try {
              result = AttributeGetterSetter.getAttributesValues(name, attributeNames, pollingManager, attributeList,
                      aroundInvokeImpl, DevSource.CACHE_DEV, deviceLock, null);
          } catch (final Exception e) {
              deviceMonitoring.addError();
              if (e instanceof DevFailed) {
                  throw (DevFailed) e;
              } else {
                  // with CORBA, the stack trace is not visible by the client if
                  // not inserted in DevFailed.
                  throw DevFailedUtils.newDevFailed(e);
              }
          }
          return result;
      }
docs: Read some attributes. IDL 1 version.
  
  @param attributeNames The attributes names
  @return The read results.
  @throws DevFailed