javax.script.ScriptEngine でこういう使い方もできたのか、というメモ。
まずは普通の(?)使い方として、 JavaScript のトップレベル関数を呼ぶにはこうする。
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
engine.eval("function increase(num) { return num + 1; }");
System.out.println(((Invocable) engine).invokeFunction("increase", 10));
javax.script.Invocable#invokeFunction(String, Object...) は、
(当たり前だけど)引数や戻り値は全て java.lang.Object でやりとりする。

そこで、今回の話。
Java 側でインターフェースを切って、それをスクリプト言語側で実装するということができる。
Axis 編
普通にアクセスしようとすると以下のエラーが出る。
Exception in thread "main" AxisFault
 faultCode: {http://xml.apache.org/axis/}HTTP
 faultSubcode: 
 faultString: (401)Unauthorized
 faultActor: 
 faultNode: 
 faultDetail: 
    {}:リターンコード:  401
NTLM 認証対応と全く同じ方法でBasic 認証, Digest 認証ともに対応できた。
ちなみに Basic 認証の場合のみ、commons-httpclient のエンジンを使わなくてもいいようだ。
API キー・共通鍵の入手
まずは Apply for a non-commercial API Key で API キーを発行してもらうための申請を行う。
必要事項を入力して [Apply] を押下すると程なくして API キーと共通鍵がメールで送られてくる。
認証の流れ
User Authentication を参照し、認証の流れを把握する。
今回はデスクトップアプリケーションでの認証を行おうとしているが、
まず frob という文字列を rtm.auth.getFrob で入手する必要があるようだ。
次に API キー, パーミッション, frob, 署名文字列認証用をパラメータに指定して認証 URL を生成し、
そこにアクセスして認証を完了する。
認証完了後、rtm.auth.getToken から認証トークンが取得できる。
…ためには色々面倒な実装が必要なのかと調べてみれば、実はそうでもなかった、というお話。
NTLM 認証の設定
IIS マネージャでファイルもしくはディレクトリのプロパティを開き、
[ディレクトリセキュリティ(ファイルセキュリティ)] -> 認証とアクセス制御の[編集] ->
[匿名アクセスを有効にする]のチェックを外し、[総合 Windows 認証]にチェックを入れる。
この状態でブラウザからアクセスするとユーザ名、パスワードを入力させる認証ダイアログが表示される。
以前書いたDropbox Java API で遊ぶ(移転前URL)にリンクを張っていただいている記事があった。
getFileStreamメソッド付近でパラメータの「rev」で検索すると、上図にもわかるようにヒットしない(青色マークされない)=実装されてない!ずこーー 試行錯誤ログ: DropboxのJava版APIで過去リビジョンのファイルを取得できない現象について
なんと…その通り DropboxAPI#getFile(), DropboxAPI#getFileStream() の引数 rev は内部で使用されておらず、
リビジョンを指定して過去のファイルをダウンロードできないようだ。
どうにしかして今の SDK でもリビジョンを指定してダウンロードできるようワークアラウンドコードを書けないものか。
ちょっとした必要に迫られて XML を Java クラスにバインディングしてくれるツールについて調べた事の覚え書き。
JAXB
何かのライブラリとかツール群の中に同梱されているのは何度か見かけたけど、
自分で使ってみたのは初めてだったので手順をメモっとこう。
  1. 扱いたい XML の構造が分かっている場合、まず XML Schema を作成する。
  2. XML Schema から Java のクラスを生成する。
  3. 扱いたい XML をアンマーシャルして Java クラスにバインディング。
Java ライブラリからデータの操作をしてみる。
Java ドライバのダウンロード
MongoDB - Java Language Center の「Download the Java Driver」からダウンロードする。
(現在時点の最新バージョンは mongo-2.7.2.jar だった)
接続
ホスト名、ポート番号を指定して com.mongodb.Mongo を作成し(指定しない場合はローカルホストの27017が使用される)、
com.mongodb.Mongo#getDB() でDB名を指定して com.mongodb.DB オブジェクトを取得する。
この時点ではホスト名、ポート番号、DB 名が誤っていてもエラーは発生しない。
DB オブジェクトを使用したデータの操作の際にエラーが発生する。
ライブラリのダウンロード
Java1.6 からは JAX-WS リファレンス実装が rt.jar に含まれたため、JRE だけで使用可能。
最新バージョンを使用したい場合はJAX-WSサイトからダウンロードできる。
Java 1.6.0_29 でバージョンを確認したところ、
System.out.println(com.sun.xml.internal.ws.util.RuntimeVersion.VERSION);
「JAX-WS RI 2.1.6 in JDK 6」だった。
本日時点でダウンロードできる最新は2.2.5。

Copyright© 2011-2016 Shunsuke Otani All Right Reserved .