package com.sample.client;
import java.net.URL;
import java.net.URLEncoder;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.List;
import java.util.Map;
//サンプル:Webリソースのクライアントの実行
public class SampleClient {
public static void main(String[] args) {
final String HOST = args[0];
final String PORT = args[1];
SampleClient sampleClient = new SampleClient();
try{
sampleClient.demonstration1(HOST, PORT);
sampleClient.demonstration2(HOST, PORT);
System.out.println("¥n----- Successfully Ended -----");
}catch(Exception e){
//詳細な例外のメッセージを表示する
System.out.println(e.getMessage());
}
}
private void demonstration1(String HOST, String PORT) {
System.out.println("¥n Demonstration 1 started.");
System.out.println(" This demonstrates injection of " +
"javax.ws.rs.core.Request instance " +
"onto resource class field by using @Context.");
URL url = null;
HttpURLConnection httpConn = null;
Map<String, List<String>> headers = null;
List<String> status = null;
String responseEntity = "";
//Webリソースを呼び出す
try {
//呼び出す対象のWebリソースのURIを設定する
url = new URL("http://" + HOST + ":" + PORT+
"/tutorial/root");
//初回接続をセットアップする
httpConn = (HttpURLConnection) url.openConnection();
//HTTP()メソッドを"GET"に設定する
httpConn.setRequestMethod("GET");
//接続を開始する
httpConn.connect();
}catch (MalformedURLException e) {
System.out.println(" ERROR: " + e.getClass() + " was thrown. ");
//スタックトレースを表示する
e.printStackTrace();
throw new RuntimeException(" Demonstration 1 failed.");
}catch (IOException e) {
System.out.println(" ERROR: " + e.getClass() + " was thrown. ");
//スタックトレースを表示する
e.printStackTrace();
throw new RuntimeException(" Demonstration 1 failed.");
}catch (Exception e) {
System.out.println(" ERROR: " + e.getClass() + " was thrown. ");
//スタックトレースを表示する
e.printStackTrace();
throw new RuntimeException(" Demonstration 1 failed.");
}
System.out.println(" The target URL is ¥"" + url + "¥".");
System.out.println(" The HTTP method is " + "¥"GET¥"" + ".");
try {
//HTTPレスポンスのヘッダを取得する
headers = httpConn.getHeaderFields();
//ヘッダからHTTPステータスを取得する
status = headers.get(null);
//入力ストリームリーダを取得してHTTPレスポンスの
//エンティティボディを読み込む
BufferedReader rd = new BufferedReader(new InputStreamReader(
httpConn.getInputStream()));
String line = "";
while ((line = rd.readLine()) != null) {
responseEntity += line;
}
//入力ストリームリーダを閉じる
rd.close();
//接続を終了する
httpConn.disconnect();
}catch (Exception e) {
System.out.println(" ERROR: " + e.getClass() + " was thrown. ");
//スタックトレースを表示する
e.printStackTrace();
throw new RuntimeException(" Demonstration 1 failed.");
}
System.out.println(" Connection and interaction ended successfully.");
//ステータスコードとエンティティボディの期待値を設定する
String statusExpect = "[HTTP/1.1 200 OK]";
String responseEntityExpect = "RequestMethod: GET";
//ステータスコードとエンティティボディが期待値と同じかチェックする
if (status.toString().equals(statusExpect)
& responseEntity.equals(responseEntityExpect)) {
//HTTPヘッダを表示する
System.out.println(" Response headers are " + headers.toString() + ".");
//エンティティボディを表示する
System.out.println(" Response entity is " + responseEntity + ",");
System.out.println(" which means target resource completed " +
"the process described above without any problem.");
System.out.println(" Demonstration 1 ended successfully.");
}else {
System.out.println(" The response is not as expected.");
throw new RuntimeException(" Demonstration 1 failed.");
}
private void demonstration2(String HOST, String PORT) {
System.out.println("¥n Demonstration 2 started.");
System.out.println(" This demonstrates injection of QueryParam " +
"onto resource bean setter method by using @QueryParam.");
URL url = null;
HttpURLConnection httpConn = null;
String responseEntity = "";
Map<String, List<String>> headers = null;
List<String> status = null;
//Webリソースを呼び出す
try {
//呼び出す対象のWebリソースのURIを設定する
//URIにクエリパラメタを付与する
url = new URL("http://" + HOST + ":" + PORT+
"/tutorial/root/getQueryParam?queryParam=queryValue");
//初回接続をセットアップする
httpConn = (HttpURLConnection) url.openConnection();
//HTTP()メソッドを"GET"に設定する
httpConn.setRequestMethod("GET");
//接続を開始する
httpConn.connect();
}catch (MalformedURLException e) {
System.out.println(" ERROR: " + e.getClass() + " was thrown. ");
//スタックトレースを表示する
e.printStackTrace();
throw new RuntimeException(" Demonstration 2 failed.");
}catch (IOException e) {
System.out.println(" ERROR: " + e.getClass() + " was thrown. ");
//スタックトレースを表示する
e.printStackTrace();
throw new RuntimeException(" Demonstration 2 failed.");
}catch (Exception e) {
System.out.println(" ERROR: " + e.getClass() + " was thrown. ");
//スタックトレースを表示する
e.printStackTrace();
throw new RuntimeException(" Demonstration 2 failed.");
}
System.out.println(" The target URL is ¥"" + url + "¥".");
System.out.println(" The HTTP method is " + "¥"GET¥"" + ".");
try {
//HTTPヘッダを取得する
headers = httpConn.getHeaderFields();
//HTTPヘッダからのステータスコードを取得する
status = headers.get(null);
//入力ストリームリーダを取得してHTTPレスポンスの
//エンティティボディを読み込む
BufferedReader rd = new BufferedReader(new InputStreamReader(
httpConn.getInputStream()));
String line = "";
while ((line = rd.readLine()) != null) {
responseEntity += line;
}
//入力ストリームリーダを閉じる
rd.close();
//接続を終了する
httpConn.disconnect();
}catch (Exception e) {
System.out.println(" ERROR: " + e.getClass() + " was thrown. ");
//スタックトレースを表示する
e.printStackTrace();
throw new RuntimeException(" Demonstration 2 failed.");
}
System.out.println(" Connection and interaction ended successfully.");
//ステータスコードとエンティティボディの期待値を設定する
String statusExpect = "[HTTP/1.1 200 OK]";
String responseEntityExpect = "QueryParameter: queryValue";
//ステータスコードとエンティティボディが期待値と同じかチェックする
if (status.toString().equals(statusExpect)
& responseEntity.equals(responseEntityExpect)) {
//HTTPヘッダを表示する
System.out.println(" Response headers are " + headers.toString() + ".");
//エンティティボディを表示する
System.out.println(" Response entity is " + responseEntity + ",");
System.out.println(" which means target resource completed " +
"the process described above without any problem.");
System.out.println(" Demonstration 2 ended successfully.");
}else {
System.out.println(" The response is not as expected.");
throw new RuntimeException(" Demonstration 2 failed.");
}
}
}
} |