static int mergeExplicitPolicy(int explicitPolicy, X509CertImpl currCert,
        boolean finalCert) throws CertPathValidatorException
    {
        if ((explicitPolicy > 0) && !X509CertImpl.isSelfIssued(currCert)) {
            explicitPolicy--;
        }

        try {
            PolicyConstraintsExtension polConstExt
                = currCert.getPolicyConstraintsExtension();
            if (polConstExt == null)
                return explicitPolicy;
            int require =
                polConstExt.get(PolicyConstraintsExtension.REQUIRE).intValue();
            if (debug != null) {
                debug.println("PolicyChecker.mergeExplicitPolicy() "
                   + "require Index from cert = " + require);
            }
            if (!finalCert) {
                if (require != -1) {
                    if ((explicitPolicy == -1) || (require < explicitPolicy)) {
                        explicitPolicy = require;
                    }
                }
            } else {
                if (require == 0)
                    explicitPolicy = require;
            }
        } catch (IOException e) {
            if (debug != null) {
                debug.println("PolicyChecker.mergeExplicitPolicy "
                              + "unexpected exception");
                e.printStackTrace();
            }
            throw new CertPathValidatorException(e);
        }

        return explicitPolicy;
    }
static int mergeExplicitPolicy ( int explicitPolicy , X509CertImpl currCert , boolean finalCert ) throws CertPathValidatorException { if ( ( explicitPolicy > 0 ) && ! X509CertImpl . isSelfIssued ( currCert ) ) { explicitPolicy -- ; } try { PolicyConstraintsExtension polConstExt = currCert . getPolicyConstraintsExtension ( ) ; if ( polConstExt == null ) return explicitPolicy ; int require = polConstExt . get ( PolicyConstraintsExtension . REQUIRE ) . intValue ( ) ; if ( debug != null ) { debug . println ( "PolicyChecker.mergeExplicitPolicy() " + "require Index from cert = " + require ) ; } if ( ! finalCert ) { if ( require != - 1 ) { if ( ( explicitPolicy == - 1 ) || ( require < explicitPolicy ) ) { explicitPolicy = require ; } } } else { if ( require == 0 ) explicitPolicy = require ; } } catch ( IOException e ) { if ( debug != null ) { debug . println ( "PolicyChecker.mergeExplicitPolicy " + "unexpected exception" ) ; e . printStackTrace ( ) ; } throw new CertPathValidatorException ( e ) ; } return explicitPolicy ; }
Merges the specified explicitPolicy value with the
requireExplicitPolicy field of the <code>PolicyConstraints</code>
extension obtained from the certificate. An explicitPolicy
value of -1 implies no constraint.

@param explicitPolicy an integer which indicates if a non-null
valid policy tree is required
@param currCert the Certificate to be processed
@param finalCert a boolean indicating whether currCert is
the final cert in the cert path
@return returns the new explicitPolicy value
@exception CertPathValidatorException Exception thrown if an error
occurs