docs: @Override
      public void handle(Callback[] callbacks) throws IOException,
                      UnsupportedCallbackException {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.entry(tc, "handle");
          }
          if (callbacks == null || callbacks.length == 0) {
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
                  Tr.exit(tc, "handle", "No Callbacks received, do nothing.");
              }
              return;
          }
          arrangeCallbacks(callbacks); // 675924
          try {
  
              for (Callback callback : callbacks) {
                  if (callback instanceof CallerPrincipalCallback) {
                      J2CSecurityHelper.handleCallerPrincipalCallback((CallerPrincipalCallback) callback, _executionSubject, _addedCred, _realmName, _unauthenticated, _invocations);
                      // TODO Mapping to principals in the same domain in case the inflown
                      // principal is not in the same security domain as the application server.
                  } else if (callback instanceof GroupPrincipalCallback) {
                      // Names of group principals to be added to the subject
                      J2CSecurityHelper.handleGroupPrincipalCallback((GroupPrincipalCallback) callback, _executionSubject, _addedCred, _realmName, _invocations);
                  } else if (callback instanceof PasswordValidationCallback) {
                      J2CSecurityHelper.handlePasswordValidationCallback((PasswordValidationCallback) callback, _executionSubject, _addedCred, _realmName, _invocations);
                  } else {
                      throw new UnsupportedCallbackException(callback);
                  }
              }
              J2CSecurityHelper.addSubjectCustomData(_executionSubject, _addedCred);
  
          } catch (Exception ex) {
              Tr.error(tc, "ERROR_HANDLING_CALLBACK_J2CA0672", new Object[] { ex.getClass().getName(), ex.getMessage() });
              FFDCFilter.processException(ex, getClass().getName() + ".handle", "153");
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "The exception is " + ex);
                  //ex.printStackTrace(System.out);
              }
              if (ex instanceof IOException) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
                      Tr.exit(tc, "handle");
                  }
                  throw (IOException) ex;
              } else if (ex instanceof UnsupportedCallbackException) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
                      Tr.exit(tc, "handle");
                  }
                  throw (UnsupportedCallbackException) ex;
              } else {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
                      Tr.exit(tc, "handle");
                  }
                  throw new IOException(ex);
              }
          }
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.exit(tc, "handle");
          }
      }