Home > Archives > 2006年08月

2006年08月

もう少し分かりやすくバグれ

Axis にサービスをデプロイしてるのにサービス一覧に登録されないなぁと思っていたらサービスを提供する jar を lib に入れてなかったのが原因だった.こういう場合はリストの生成時とかにクラスファイルが見つからないとエラーを吐いてくれ,と思う.

問題半分解決

eXist で POST したデータを request:get-data() で取得しようとしても空文字列しか帰ってこなかった問題の原因が分かった.どうやら POST するときに Content-type: application/x-www-form-urlencoded が付いていたのが原因らしい.こいつのせいでどのような変換が起きたかは知らないが,とにかくデータが変になってたらしい.Content-type: text/text とかにしたらちゃんとデータが取れた.

しかし,XML を送っても get-data() が string しか返してくれない… XML を送った場合はちゃんとパースしてノードを返すはずなのだが.とりあえず半分問題が解決したからよしとしよう.

eXist の XQuery で POST と GET を区別するには?

POST でアップされたデータが request:get-data() で取れるらしいのでこいつでデータが取れなかったら GET,取れたら POST と判断してみる.ただ,POST でない場合 Exception が飛んでたのでutil:catch で捕らえてやる.こんな具合に:

     let $postData := util:catch("java.lang.IllegalArgumentException", request:get-data(), "")

こんなんでいいのだろうか?

eXist で XQuery の結果を XML にする…

eXist で,XQuery から XML を生成するとデフォルトでは html のDOCTYPE

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

が付いてしまうので,COCOON の $EXIST_HOME/xquery/sitemap.xmap を編集してXML でシリアライズするようにしなければならない.そのためには,sitemap.xmap のなかの,

	<map:pipelines>
		<map:pipeline>

の中に

            <map:match pattern="book-query.xq*">
                <map:generate src="book-query.xq" type="xquery">
                	<map:parameter name="create-session" value="true"/>
                </map:generate>
                <map:serialize encoding="UTF-8" type="xml"/>
            </map:match>

を追加する.意味は generate で生成して serialize で UTF-8 の xml にシリアライズすると.

余談として,*.xq だと COCOON (XqueryGenerator) に渡されるらしい. COCOON に渡った後の処理は,各所の sitemap.xmap で記述する. *.xql とかだと XQueryServlet に渡されてHTMLが吐かれる(XMLにできるのかなぁ?)   この設定は $EXIST_HOME/WEB-INF/web.xml に書かれている.

さて,一つの問題は解決した.次に移ろう.

今日のはまりどころ

したのコードでは POST のメッセージが飛ばない.

		URLConnection con = new URL(path).openConnection();
		con.setDoOutput(true);
		con.setDoInput(false);
		PrintWriter pw = new PrintWriter(con.getOutputStream());
		pw.println(path + " " + con);
		pw.flush();
		pw.close();
		System.out.println(path + " " + con);

どうやら InputStream を開いてやらないとサーバに POST のメッセージすら送ってくれないらしい.これに気づくのにかなりの時間を喰った… が,あとすこしなのでがむばろう.

eXist をインストールしてみる

フリーのネイティブ XML DB であるところの eXist をインストールしてみた.war 形式のファイルが提供されているので Tomcat の webapps に置くだけでインストール完了.インストールディレクトリにバージョン名とかが入ってないとうまく動かなくて手間取ったがどうにか動いてくれた.さて,今月のお仕事をさっさと片付けるとしましょうか.

継承したメソッドは…

Axis2 で ServiceClass として指定したクラスのオーバライドせずに引き継いだメソッドを公開しようとしたら java2wsdl がうまく動いてくれなかった.メッセージの中身がすべて空になってこけまくる.何かやり方があるのか仕様なのか.よく分からんことで時間を無駄にした.

エラー時に例外投げずにいきなり終了する(System.exit)するライブラリの実装って使いたくないんだけど… これが遠隔地のサーバ上で起きるからデバッグが非常にめんどくさい.System.exit 実行時の挙動を適当に変える方法は無いものか?

Home > Archives > 2006年08月

Search
Feeds

Page Top