class OAuthProfileDefinition extends CommonProfileDefinition {

    /**
     * <p>Constructor for OAuthProfileDefinition.</p>
     */
    public OAuthProfileDefinition() {
        super();
    }

    /**
     * <p>Constructor for OAuthProfileDefinition.</p>
     *
     * @param profileFactory a {@link ProfileFactory} object
     */
    public OAuthProfileDefinition(final ProfileFactory profileFactory) {
        super(profileFactory);
    }

    /**
     * Get HTTP Method to request profile.
     *
     * @return http verb
     */
    public Verb getProfileVerb() {
        return Verb.GET;
    }

    /**
     * Retrieve the url of the profile of the authenticated user for the provider.
     *
     * @param accessToken only used when constructing dynamic urls from data in the token
     * @param configuration the current configuration
     * @return the url of the user profile given by the provider
     */
    public abstract String getProfileUrl(Token accessToken, OAuthConfiguration configuration);

    /**
     * Extract the user profile from the response (JSON, XML...) of the profile url.
     *
     * @param body the response body
     * @return the returned profile
     */
    public abstract CommonProfile extractUserProfile(String body);

    /**
     * Throws a {@link TechnicalException} to indicate that user profile extraction has failed.
     *
     * @param body the request body that the user profile should be have been extracted from
     * @param missingNode the name of a JSON node that was found missing. may be omitted
     */
    protected void raiseProfileExtractionJsonError(String body, String missingNode) {
        logger.error("Unable to extract user profile as no JSON node '{}' was found in body: {}", missingNode, body);
        throw new TechnicalException("No JSON node '" + missingNode + "' to extract user profile from");
    }

    /**
     * Throws a {@link TechnicalException} to indicate that user profile extraction has failed.
     *
     * @param body the request body that the user profile should have been extracted from
     */
    protected void raiseProfileExtractionJsonError(String body) {<FILL_FUNCTION_BODY>}

    /**
     * Throws a {@link TechnicalException} to indicate that user profile extraction has failed.
     *
     * @param body the request body that the user profile should have been extracted from
     */
    protected void raiseProfileExtractionError(String body) {
        logger.error("Unable to extract user profile from body: {}", body);
        throw new TechnicalException("Unable to extract user profile");
    }

}

        logger.error("Unable to extract user profile as no JSON node was found in body: {}", body);
        throw new TechnicalException("No JSON node to extract user profile from");
    
<methods>public void <init>() ,public void <init>(org.pac4j.core.profile.factory.ProfileFactory) <variables>public static final java.lang.String DISPLAY_NAME,public static final java.lang.String EMAIL,public static final java.lang.String FAMILY_NAME,public static final java.lang.String FIRST_NAME,public static final java.lang.String GENDER,public static final java.lang.String LOCALE,public static final java.lang.String LOCATION,public static final java.lang.String PICTURE_URL,public static final java.lang.String PROFILE_URL