org.jboss.teiid.quickstart.PortfolioClient.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.teiid.quickstart.PortfolioClient.java

Source

/*
 * JBoss, Home of Professional Open Source.
 * See the COPYRIGHT.txt file distributed with this work for information
 * regarding copyright ownership.  Some portions may be licensed
 * to Red Hat, Inc. under one or more contributor license agreements.
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 * 
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 * 02110-1301 USA.
 */
package org.jboss.teiid.quickstart;

import java.io.UnsupportedEncodingException;
import java.net.URISyntaxException;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import org.apache.commons.codec.binary.Base64;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.AuthCache;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.HttpClient;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.auth.BasicScheme;
import org.apache.http.impl.client.BasicAuthCache;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.HttpClientBuilder;
import org.jboss.resteasy.client.jaxrs.ResteasyClient;
import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;
import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget;
import org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine;

public class PortfolioClient {

    static String HOSTNAME = "localhost";
    static String HOSTPORT = "8080";
    static String USERNAME = "restUser";
    static String PASSWORD = "password1!";

    static String[] apilist = { "http://${hostname}:${port}/PortfolioRest_1/Rest/foo/1",
            "http://${hostname}:${port}/PortfolioRest_1/Rest/getAllStocks",
            "http://${hostname}:${port}/PortfolioRest_1/Rest/getAllStockById/1007",
            "http://${hostname}:${port}/PortfolioRest_1/Rest/getAllStockBySymbol/IBM" };
    static String[] apis = new String[apilist.length];

    /**
     * JAX-RS 2.0 Client API
     */
    public void jaxrsClient() {

        System.out.println("JAX-RS 2.0 Client API");

        Client client = ClientBuilder.newBuilder().build();
        String authString = getBasicAuthentication();

        for (String api : apis) {
            WebTarget target = client.target(api);
            Response response = target.request().header(HttpHeaders.ACCEPT, MediaType.APPLICATION_XML)
                    .header(HttpHeaders.AUTHORIZATION, authString).get();
            if (response.getStatus() == 200) {
                String value = response.readEntity(String.class);
                System.out.println(value);
                response.close();
            } else {
                handleError(response);
            }

        }

    }

    private void handleError(Response response) {
        System.out.println(response.getStatus() + ", " + response.getStatusInfo());
        response.close();
    }

    /**
    * Resteasy Client API with JAX-RS 2.0 Client API
    */
    public void resteasyClient() {

        System.out.println("\nResteasy Client API with JAX-RS 2.0 Client API");

        ResteasyClient client = new ResteasyClientBuilder().build();
        String authString = getBasicAuthentication();

        for (String api : apis) {
            ResteasyWebTarget target = client.target(api);
            Response response = target.request().header(HttpHeaders.ACCEPT, MediaType.APPLICATION_XML)
                    .header(HttpHeaders.AUTHORIZATION, authString).get();
            if (response.getStatus() == 200) {
                String value = response.readEntity(String.class);
                System.out.println(value);
                response.close();
            } else {
                handleError(response);
            }
        }
    }

    public void resteasyHttpBackendClient() {

        System.out.println("\nResteasy Client API with HTTP client as engine");

        HttpHost targetHost = new HttpHost("localhost", 8080, "http");

        // 1. Create AuthCache instance
        AuthCache authCache = new BasicAuthCache();

        // 2. Generate BASIC scheme object and add it to the local auth cache
        BasicScheme basicAuth = new BasicScheme();
        authCache.put(targetHost, basicAuth);

        // 3. Add AuthCache to the execution context
        HttpClientContext localContext = HttpClientContext.create();
        localContext.setAuthCache(authCache);

        // 4. Create client executor and proxy
        HttpClientBuilder builder = HttpClientBuilder.create();
        CredentialsProvider credsProvider = new BasicCredentialsProvider();
        AuthScope scope = new AuthScope(targetHost.getHostName(), targetHost.getPort());
        UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(USERNAME, PASSWORD);
        credsProvider.setCredentials(scope, credentials);
        builder.setDefaultCredentialsProvider(credsProvider);
        HttpClient httpClient = builder.build();

        // 5. Create ResteasyClient with http client as engine
        ApacheHttpClient4Engine engine = new ApacheHttpClient4Engine(httpClient, localContext);
        ResteasyClient client = new ResteasyClientBuilder().httpEngine(engine).build();

        // 6. Execute Rest call via ResteasyClient
        String authString = getBasicAuthentication();
        for (String api : apis) {
            ResteasyWebTarget target = client.target(api);
            Response response = target.request().header(HttpHeaders.ACCEPT, MediaType.APPLICATION_XML)
                    .header(HttpHeaders.AUTHORIZATION, authString).get();
            if (response.getStatus() == 200) {
                String value = response.readEntity(String.class);
                System.out.println(value);
                response.close();
            } else {
                handleError(response);
            }
        }
    }

    private String getBasicAuthentication() {

        String token = USERNAME + ":" + PASSWORD;
        String base64encoded = Base64.encodeBase64String(token.getBytes());
        return "Basic " + base64encoded;
    }

    public static void main(String[] args) throws URISyntaxException, UnsupportedEncodingException {

        if (args.length == 4) {
            HOSTNAME = args[0];
            HOSTPORT = args[1];
            USERNAME = args[2];
            PASSWORD = args[3];
        }

        for (int i = 0; i < apilist.length; i++) {
            String api = apilist[i];
            api = api.replace("${hostname}", HOSTNAME);
            api = api.replace("${port}", HOSTPORT);
            apis[i] = api;
        }

        PortfolioClient client = new PortfolioClient();

        client.jaxrsClient();

        client.resteasyClient();

        client.resteasyHttpBackendClient();
    }

}