/*
* JBoss, Home of Professional Open Source
* Copyright 2013, Red Hat, Inc. and/or its affiliates, and individual
* contributors by the @authors tag. See the copyright.txt in the
* distribution for a full listing of individual contributors.
*
* Licensed 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 org.jboss.as.quickstarts.jaxrsclient;
/**
* This example demonstrates the use an external JAX-RS RestEasy client
* which interacts with a JAX-RS Web service that uses CDI 1.0 and JAX-RS
* in JBoss AS 7. Specifically, this client "calls" the HelloWorld JAX-RS
* Web Service created in quickstart helloworld-rs. Please refer to the helloworld-rs
* README.md for instructions on how to build and deploy helloworld-rs.
*/
import static org.junit.Assert.*;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.ws.rs.core.MediaType;
import org.apache.http.client.ClientProtocolException;
import org.jboss.resteasy.client.ClientRequest;
import org.jboss.resteasy.client.ClientResponse;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* JUnit4 Test class which makes a request to the RESTful helloworld-rs web service.
*
* @author bmincey (Blaine Mincey)
*
*/
public class JaxRsClientTest {
/**
* Request URLs pulled from system properties in pom.xml
*/
private static String XML_URL;
private static String JSON_URL;
/**
* Property names used to pull values from system properties in pom.xml
*/
private static final String XML_PROPERTY = "xmlUrl";
private static final String JSON_PROPERTY = "jsonUrl";
/**
* Responses of the RESTful web service
*/
private static final String XML_RESPONSE = "<xml><result>Hello World!</result></xml>";
private static final String JSON_RESPONSE = "{\"result\":\"Hello World!\"}";
/**
* Method executes BEFORE the test method. Values are read from system properties that can be modified in the pom.xml.
*/
@BeforeClass
public static void beforeClass() {
JaxRsClientTest.XML_URL = System.getProperty(JaxRsClientTest.XML_PROPERTY);
JaxRsClientTest.JSON_URL = System.getProperty(JaxRsClientTest.JSON_PROPERTY);
}
/**
* Test method which executes the runRequest method that calls the RESTful helloworld-rs web service.
*/
@Test
public void test() {
assertEquals("XML Response", JaxRsClientTest.XML_RESPONSE,
this.runRequest(JaxRsClientTest.XML_URL, MediaType.APPLICATION_XML_TYPE));
assertEquals("JSON Response", JaxRsClientTest.JSON_RESPONSE,
this.runRequest(JaxRsClientTest.JSON_URL, MediaType.APPLICATION_JSON_TYPE));
}
/**
* The purpose of this method is to run the external REST request.
*
* @param url The url of the RESTful service
* @param mediaType The mediatype of the RESTful service
*/
private String runRequest(String url, MediaType mediaType) {
String result = null;
System.out.println("===============================================");
System.out.println("URL: " + url);
System.out.println("MediaType: " + mediaType.toString());
try {
// Using the RESTEasy libraries, initiate a client request
// using the url as a parameter
ClientRequest request = new ClientRequest(url);
// Be sure to set the mediatype of the request
request.accept(mediaType);
// Request has been made, now let's get the response
ClientResponse<String> response = request.get(String.class);
// Check the HTTP status of the request
// HTTP 200 indicates the request is OK
if (response.getStatus() != 200) {
throw new RuntimeException("Failed request with HTTP status: " + response.getStatus());
}
// We have a good response, let's now read it
BufferedReader br = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(response.getEntity()
.getBytes())));
// Loop over the br in order to print out the contents
System.out.println("\n*** Response from Server ***\n");
String output = null;
while ((output = br.readLine()) != null) {
System.out.println(output);
result = output;
}
} catch (ClientProtocolException cpe) {
System.err.println(cpe);
} catch (IOException ioe) {
System.err.println(ioe);
} catch (Exception e) {
System.err.println(e);
}
System.out.println("\n===============================================");
return result;
}
}