/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package httpsdemo.client;
import java.io.FileInputStream;
import java.security.KeyStore;
import javax.ws.rs.core.Response;
import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
import org.apache.cxf.jaxrs.client.WebClient;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;
import httpsdemo.common.Customer;
import httpsdemo.common.CustomerService;
public final class Client {
private static final String CLIENT_CONFIG_FILE = "ClientConfig.xml";
private static final String BASE_SERVICE_URL =
"https://localhost:9000/customerservice/customers";
private Client() {
}
public static void main(String args[]) throws Exception {
String keyStoreLoc = "src/main/config/clientKeystore.jks";
KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(new FileInputStream(keyStoreLoc), "cspass".toCharArray());
/*
* Send HTTP GET request to query customer info using portable HttpClient
* object from Apache HttpComponents
*/
SSLSocketFactory sf = new SSLSocketFactory(keyStore, "ckpass", keyStore);
Scheme httpsScheme = new Scheme("https", 9000, sf);
System.out.println("Sending HTTPS GET request to query customer info");
DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getConnectionManager().getSchemeRegistry().register(httpsScheme);
HttpGet httpget = new HttpGet(BASE_SERVICE_URL + "/123");
BasicHeader bh = new BasicHeader("Accept" , "text/xml");
httpget.addHeader(bh);
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
entity.writeTo(System.out);
httpclient.getConnectionManager().shutdown();
/*
* Send HTTP PUT request to update customer info, using CXF WebClient method
* Note: if need to use basic authentication, use the WebClient.create(baseAddress,
* username,password,configFile) variant, where configFile can be null if you're
* not using certificates.
*/
System.out.println("\n\nSending HTTPS PUT to update customer name");
WebClient wc = WebClient.create(BASE_SERVICE_URL, CLIENT_CONFIG_FILE);
Customer customer = new Customer();
customer.setId(123);
customer.setName("Mary");
Response resp = wc.put(customer);
/*
* Send HTTP POST request to add customer, using JAXRSClientProxy
* Note: if need to use basic authentication, use the JAXRSClientFactory.create(baseAddress,
* username,password,configFile) variant, where configFile can be null if you're
* not using certificates.
*/
System.out.println("\n\nSending HTTPS POST request to add customer");
CustomerService proxy = JAXRSClientFactory.create(BASE_SERVICE_URL, CustomerService.class,
CLIENT_CONFIG_FILE);
customer = new Customer();
customer.setName("Jack");
resp = wc.post(customer);
System.out.println("\n");
System.exit(0);
}
}