class CasOAuthWrapperClient extends OAuth20Client {

    /**
     * The CAS OAuth server url (without a trailing slash).
     * For example: http://localhost:8080/cas/oauth2.0
     */
    private String casOAuthUrl;

    private String casLogoutUrl;

    // can be false for older CAS server versions
    private boolean isJsonTokenExtractor = true;

    // can be Verb.PUT for older CAS server versions
    private Verb accessTokenVerb = Verb.POST;

    private boolean implicitFlow = false;

    /**
     * <p>Constructor for CasOAuthWrapperClient.</p>
     */
    public CasOAuthWrapperClient() {
    }

    /**
     * <p>Constructor for CasOAuthWrapperClient.</p>
     *
     * @param key a {@link String} object
     * @param secret a {@link String} object
     * @param casOAuthUrl a {@link String} object
     */
    public CasOAuthWrapperClient(final String key, final String secret, final String casOAuthUrl) {
        setKey(key);
        setSecret(secret);
        setCasOAuthUrl(casOAuthUrl);
    }

    /** {@inheritDoc} */
    @Override
    protected void internalInit(final boolean forceReinit) {
        CommonHelper.assertNotBlank("casOAuthUrl", this.casOAuthUrl);
        configuration.setApi(new CasOAuthWrapperApi20(this.casOAuthUrl, this.isJsonTokenExtractor, this.accessTokenVerb));
        configuration.setProfileDefinition(new CasOAuthWrapperProfileDefinition());
        if (this.implicitFlow) {
            configuration.setResponseType("token");
        } else {
            configuration.setResponseType("code");
        }
        setLogoutActionBuilderIfUndefined(new CasLogoutActionBuilder(casLogoutUrl, "service"));

        super.internalInit(forceReinit);
    }


    /**
     * <p>Setter for the field <code>casOAuthUrl</code>.</p>
     *
     * @param casOAuthUrl a {@link String} object
     */
    public void setCasOAuthUrl(final String casOAuthUrl) {<FILL_FUNCTION_BODY>}
}

        CommonHelper.assertNotBlank("casOAuthUrl", casOAuthUrl);
        if (casOAuthUrl.endsWith("/")) {
            this.casOAuthUrl = casOAuthUrl.substring(0, casOAuthUrl.length() - 1);
        } else {
            this.casOAuthUrl = casOAuthUrl;
        }
    
<methods>public non-sealed void <init>() ,public java.lang.String getKey() ,public java.lang.String getSecret() ,public void setKey(java.lang.String) ,public void setSecret(java.lang.String) <variables>protected org.pac4j.oauth.config.OAuth20Configuration configuration