RESTClient.java

package org.jbehave.core.io.rest;

import static java.text.MessageFormat.format;

import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.client.ClientResponse;
import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;

import jakarta.ws.rs.client.Client;
import jakarta.ws.rs.client.ClientBuilder;
import jakarta.ws.rs.client.Entity;

/**
 * Provides access to REST resources
 */
@SuppressWarnings("checkstyle:AbbreviationAsWordInName")
public class RESTClient {

    public enum Type {
        JSON, XML
    }

    private static final String APPLICATION_TYPE = "application/{0}";
    private String username;
    private String password;
    private Type type;

    public RESTClient(Type type) {
        this(type, null, null);
    }

    public RESTClient(Type type, String username, String password) {
        this.type = type;
        this.username = username;
        this.password = password;
    }

    public Type getType() {
        return type;
    }

    public String get(String uri) {
        return client().target(uri).request(mediaType(type))
                .get(ClientResponse.class).getEntity().toString();
    }

    public void put(String uri, String entity) {
        client().target(uri).request(mediaType(type))
                .put(Entity.entity(entity, mediaType(type)));
    }

    private String mediaType(Type type) {
        return format(APPLICATION_TYPE, type.name().toLowerCase());
    }

    private Client client() {
        ClientConfig clientConfig = new ClientConfig();
        if (username != null) {
            clientConfig.register(HttpAuthenticationFeature.basic(username, password));
        }
        return ClientBuilder.newClient(clientConfig);
    }

}