スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

WiresharkでのパケットキャプチャとxmllintでのXML整形

今作っているWebアプリでXMLでのやりとりを行っているんだが
それを他の人に見せる必要が出てきたのでコマンドラインベースで
どういうXMLが返却されるかを出力するためいろいろ調べてみた。

アプリ上でやっていることはSOAP通信なので
インプットにもXMLが必要になってくる。
定義をいろいろ調べるのは面倒だったので

クライアントを動かす

XMLのやりとりをパケットキャプチャする

curlコマンドで再現

という方法を取ることにした。
まずはパケットキャプチャだがこれはwiresharkで行う。
今回はたまたま自ホスト以外だったためそんなに苦労せずに済んだ。
フィルターにip.addr == [対向のIPアドレス] and tcp.port == [アプリで使うポート番号]
と設定、適用し、パケットキャプチャ開始。

そういえば起動時にインターフェースを間違えて
パケット流れねーなーってハマってたな。。。。

んで、クライアントを動かして通信してキャプチャしたパケットの一覧からPOST通信しているっぽいところを
右クリック→「Follow TCP Stream」を選ぶと
クライアント側からPOSTしたXMLとサーバー側からのレスポンスのXMLが見える。
ここでクライアント側からPOSTしたXMLをコピーし、
XMLエディタ等で整形、ファイルに落としてから今度はそれをcurlで投げてみる。

> curl "http://xxx.xxx.xxx.xxx/path/to/app" --data-binary @[整形したXML] -H "Content-type: text/xml; charset=utf-8"


ちなみに、XMLエディタで整形した場合にはものによっては
要素にスペースが入っていたものがごっそり削られていてサーバー側で
unknownエラーで弾かれてしまうので要素の内容は正確に写すよう気をつけましょう。

もどってくるXMLは整形されていない&実際にコマンドラインからXMLを見せる環境がWindowsだったので
以下のツールでXMLを整形&UTF-8をSJISに変換した。
xmllint
http://code.google.com/p/xmllint/
nkf32
プロジェクトにあったものを流用。多分ここ↓のものかな?
http://www.vector.co.jp/soft/win95/util/se295331.html


最終的にはこんなコマンドになりました。

> curl "http://xxx.xxx.xxx.xxx/path/to/app" --data-binary @[整形したXML] -H "Content-type: text/xml; charset=utf-8" | nkf32.exe -s | xmlint-1.0.exe



SOAPの通信結果を見るというのは今後役に立つかもしれない。
※自分が設計するときはこんな面倒くさい規格使わないだろうけど・・・・・

NumberFormatExceptionについて

ここ1年くらいJavaのWebアプリを書いてるんだけど
入力パラメータを数値に変換する局面でいまいちうまく書けない。
だいたいいつもこんなコード書くんだけど

String codeParam = request.getParameter("code");
int code = 100; // 初期値
try{
  code = Integer.valueOf(codeParam);
}catch(NumberFormatException e){/* 握りつぶす */}

なんかこー、イマイチイケてない。
んで、ちょっと調べてみたんだけど
commons-langにNumberUtilsという良いクラスがあった。

toInt(String str, int defaultValue)
Convert a String to an int, returning a default value if the conversion fails.

ここから引用

これを使えば

int code = NumberUtils.toInt(request.getParameter("code"),100);

んー、スッキリ。

バッファ内でカーソルの当たっている行の内容を取得する

今日もelispのお勉強。
今日は関数の定義と、
バッファ内のカーソルの当たっている行の内容を取得する処理。
関数の定義は

(defun 関数名(引数リスト)
  関数の内容)

こんな感じ。
returnで返さないのが気持ち悪い。最後に評価した値が返るみたい。
戻り値はまだ突っ込んでは見ていない。

次はバッファ内のカーソルの当たっている行の内容を文字列で取得する処理。
こんな感じでやるらしい。

buffer-substring (point-at-bol) (point-at-eol)

関数にしてみるとこんな感じになる。

(defun cursor-line-str()
  buffer-substring (point-at-bol) (point-at-eol))

そろそろやりたいことの処理が出揃ってきた。
後は組み合わせるだけで出来そうな感じする。

Ubuntu上でCtrl + Spaceを押してもMark Setできない。

どうやらUbuntu側でCtrl+Spaceを
日本語入力への切り替えに割り当ててしまっているかららしい。

対応方方法としては
[アプリケーション]→[その他]→[Keyboard Input Methods]→[一般タブ]
→[切り替え]テキストボックスの中にCtrl+Spaceが入っていたのでこの中から
Ctrl+Spaceを取り除くことによって無事Mark Setできるようになった。

でもこれ、ちょっと前まで範囲選択出来ないなんてことなかったはずなんだけどな。。。。
まぁいいか。

emacs-w3mが起動しない&--reverseオプションが効かない

ついさっき突然emacs-w3mが立ち上がらなくなった
Warningバッファに

no such file or directory /usr/bin/w3m

と出てきていたけど、とりあえずw3m.exeはあるし、パスも通っていたので.emacsに

(setq w3m-command "w3m")

を追加することによって解消した。

また、自宅の環境(Windows7 64bit)では--reverseオプションが効かなかったので
foregroundとbackgroundを.emacsで指定してあげて背景色を黒に変更した。

(set-foreground-color "white")
(set-background-color "black")

WindowsでのEmacsはあっちで動いてたのにこっちで動かないってのが非常に多い。
32bitと64bitで違うからかなぁ。
プロフィール

ラム君(モヒカンVer)

Author:ラム君(モヒカンVer)
都内でプログラマのようなものをやっています。
まだまだ初心者ですがよろしくお願いします。

最新記事
最新コメント
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。