AtomPubクライアント実装
前述のとおり,
AtomPubの実装要件
AtomPubはHTTPメソッドのGET,
- HTTP
(HTTPS) に対応していること - HTTP
(HTTPS) のヘッダーを編集できること - HTTP
(HTTPS) メソッドのうち, GET, POST, PUT, DELETEに対応していること
これらを満たすものはPerl,
モバイルアプリ開発環境におけるAtomPub対応状況
前述のとおり,
表3 携帯アプリ開発環境におけるAtom要件対応状況
環境 | 説明 | 標準ライブラリ利用によるヘッダーの編集 | 標準ライブラリ利用によるPUT, |
---|---|---|---|
J2ME(DoJa5. | Sunmicrosystems提供の携帯端末用Javaプラットフォーム, | × | × |
J2ME(MIDP2. | Sunmicrosystems提供の携帯端末用Javaプラットフォーム,au,SoftBank,WILLCOMが採用 | ○ | × |
FlashLite2. | Adobe提供の携帯端末用のFlashプラットフォーム,au,SoftBankが採用 | ○ | × |
FlashLite3. | Adobe提供の携帯端末用のFlashプラットフォーム,DoCoMoが採用 | ○ | × |
BREW3. | Qualcommが提供している携帯端末用C++プラットフォーム,auが採用 | ○ | × |
Android | Google提供の携帯端末用Javaプラットフォーム | ○ | ○ |
.NET Compact Framework2. | Microsoft提供の携帯端末用フレームワーク, | ○ | ○ |
このように残念ながら携帯端末とAtomPubは相性がいいとは言えません。しかし携帯端末の性能は緩やかながらも向上していますし,
次は,
J2SEによる実装
J2SEにおいてHTTP通信を行うための手段はSocketクラスをはじめ,
- ①.URI
(URL) の設定 - ②.コネクションのオープン
- ③.HTTPリクエストヘッダーの設定
- ④.POST,
PUTの場合はアウトプットストリームの作成 - ⑤.URI
(URL) へ接続 - ⑥.HTTPレスポンスコードを得る
- ⑦.HTTPレスポンスヘッダーを得る
- ⑧.HTTPレスポンスボディを得る
(ある場合に限る) - ⑨.XMLのDOM化,
DOMの処理 - ⑩.①へ戻る
と見ていただいてわかるように,
①.URI(URL)の設定,②.コネクションのオープン(リスト1)
まず,
//リスト1
URL url =new URL(String);
HttpURLConnection con=(HttpURLConnection)url.openConnection();
/*リスト2
URI uri =new URI(String);
HttpURLConnection con=(HttpURLConnection)uri.toURL().openConnection();
*/
③.HTTPリクエストヘッダーの設定(リスト3)
リクエストヘッダーの設定を行います。POSTやPUTであれば,
//リスト3
con.setRequestProperty("Content-Type", "image/jpeg");
/*ベーシック認証を使う場合
con.setRequestProperty("Authorization",makeBasic(ID,PASSWD);
*/
//中略
//リスト4 ベーシック認証
private String makeBasic(String id, String pass){
String basic=id+":"+pass;
basic = "Basic "+new String(Base64.encode(basic.getBytes()));
return basic;
}
④.POST,PUTの場合はアウトプットストリームの作成(リスト5)
POSTやPUTの場合,
//リスト5
//POST(PUT)可能にします
con.setDoOutput(true);
///POST(PUT)用のOutputStreamを取得
os = con.getOutputStream();
次に,
//リスト6
//Fileの場合
InputStream fdata = new FileInputStream(File);
byte[] buffer = new byte[8192];
int rsize;
while ((rsize = fdata.read(buffer)) != -1) {
os.write(buffer, 0, rsize);
}
/*Stringの場合
os.write(String.getBytes());
*/
⑤.URI(URL)へ接続,⑥.HTTPレスポンスコードを得る,⑦.HTTPレスポンスヘッダーを得る(リスト7)
指定したURLへリクエストを送るためにHttpURLConnection.
//リスト7
//接続
con.connect();
//レスポンスコードを得る
System.out.print("Response Code["+con.getResponseCode()+"]");
System.out.println(":"+"Response Message["+con.getResponseMessage()+"]");
//レスポンスヘッダー
Map headers = con.getHeaderFields();
Iterator it = headers.keySet().iterator();
System.out.println("Response Header");
while(it.hasNext()){
String key=(String)it.next();
System.out.println(" "+key+" : "+headers.get(key));
}
※AtomPubで使われている主なレスポンスコードを示します。これ以外はRFC2616を参照してください。
表4 レスポンスコード
レスポンスコード | 意味 | メソッド:補足 |
---|---|---|
200 | Ok | GET,PUT,DELETE:成功時 |
201 | Created | POST:成功時 |
304 | Not modified | GET:修正できないメンバー |
415 | Unsupported Media Type | POST:サポート外のメディアタイプ |