Java tutorial
/* * Copyright (c) 2012 Brown Bag Consulting. * This file is part of the ExpressUI project. * Author: Juan Osuna * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License Version 3 * as published by the Free Software Foundation with the addition of the * following permission added to Section 15 as permitted in Section 7(a): * FOR ANY PART OF THE COVERED WORK IN WHICH THE COPYRIGHT IS OWNED BY * Brown Bag Consulting, Brown Bag Consulting DISCLAIMS THE WARRANTY OF * NON INFRINGEMENT OF THIRD PARTY RIGHTS. * * This program 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License. * * You can be released from the requirements of the license by purchasing * a commercial license. Buying such a license is mandatory as soon as you * develop commercial activities involving the ExpressUI software without * disclosing the source code of your own applications. These activities * include: offering paid services to customers as an ASP, providing * services from a web application, shipping ExpressUI with a closed * source product. * * For more information, please contact Brown Bag Consulting at this * address: juan@brownbagconsulting.com. */ package com.expressui.domain; import com.expressui.core.util.ApplicationProperties; import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.conn.params.ConnRoutePNames; import org.apache.http.impl.client.DefaultHttpClient; import org.jboss.resteasy.client.spring.RestClientProxyFactoryBean; import javax.annotation.Resource; import java.net.URI; /** * A client for creating and using various REST client services, using RESTEasy. */ public abstract class RestClientService { @Resource private ApplicationProperties applicationProperties; /** * Create a REST client * * @param uri uri of the service * @param clazz client class * @param <T> class type * @return REST client * @throws Exception */ public <T> T create(String uri, Class<T> clazz) throws Exception { RestClientProxyFactoryBean restClientFactory = new RestClientProxyFactoryBean(); restClientFactory.setBaseUri(new URI(uri)); restClientFactory.setServiceInterface(clazz); if (applicationProperties.getHttpProxyHost() != null && applicationProperties.getHttpProxyPort() != null) { DefaultHttpClient httpClient = new DefaultHttpClient(); HttpHost proxy = new HttpHost(applicationProperties.getHttpProxyHost(), applicationProperties.getHttpProxyPort()); if (applicationProperties.getHttpProxyUsername() != null && applicationProperties.getHttpProxyPassword() != null) { httpClient.getCredentialsProvider().setCredentials( new AuthScope(applicationProperties.getHttpProxyHost(), applicationProperties.getHttpProxyPort()), new UsernamePasswordCredentials(applicationProperties.getHttpProxyUsername(), applicationProperties.getHttpProxyPassword())); } httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy); restClientFactory.setHttpClient(httpClient); } restClientFactory.afterPropertiesSet(); return (T) restClientFactory.getObject(); } }