private void doRequest()

in kerby-kerb/kerb-client/src/main/java/org/apache/kerby/kerberos/kerb/client/impl/DefaultInternalKrbClient.java [65:107]


    private void doRequest(KdcRequest request) throws KrbException {    //NOPMD

        String realm = getSetting().getKdcRealm();
        PrincipalName serverPrincipalName = request.getServerPrincipal();
        if (serverPrincipalName != null && serverPrincipalName.getRealm() != null) {
            realm = serverPrincipalName.getRealm();
        }
        List<String> kdcList = ClientUtil.getKDCList(realm, getSetting());

        // tempKdc may include the port number
        Iterator<String> tempKdc = kdcList.iterator();
        if (!tempKdc.hasNext()) {
            throw new KrbException("Cannot get kdc for realm " + getSetting().getKdcRealm());
        }

        try {
            sendIfPossible(request, tempKdc.next(), getSetting(), false);
            LOG.info("Send to kdc success.");
        } catch (Exception first) {
            boolean ok = false;
            while (tempKdc.hasNext()) {
                try {
                    sendIfPossible(request, tempKdc.next(), getSetting(), true);
                    ok = true;
                    LOG.info("Send to kdc success.");
                    break;
                } catch (Exception ignore) {
                    LOG.info("ignore this kdc");
                }
            }
            if (!ok) {
                if (first instanceof KrbException) {
                    throw (KrbException) first;
                }
                throw new KrbException("The request failed " + first.getMessage(), first);
            }
        } finally {
            if (transport != null) {
                transport.release();
            }
        }

    }