HTTPConnectionやURLConnectionのgetHeaderField, getHeaderFieldKeyでnullが返るとき

MIDPやってて、とある状況で、getResponseCode()するとExceptionがでて、*1Malformed Header Formと言われるそうなので、レスポンスのHTTPヘッダを見ておいたほうがいいかと思いHTTPConnectionを眺めた。

  • getHeaderFieldKey
  • getHeaderField

があるので、これで見れるのだが、

戻り値:
n 番目のヘッダフィールドのキー。フィールドの数が n 個よりも少ない場合は null

というのにはまった。フィールドの値がnullのことはあるけど、キーがnullなのは、headerとして指示した番号がフィールドの数よりも大きくなったときだろうと思って、

HTTPConnection c;
...
int i = 0;
while (c.getHeaderFieldKey(i) != null) {
	...
	i ++;
}

としたら、ヘッダがでてこない。
URLConnectionのgetHeaderFieldsをつかって全部出すと、こんな感じ。

HTTP/1.x 200 OK 
Connection: Keep-Alive
Date: Tue, 28 Feb 2006 16:13:40 GMT
Content-Type: text/html
Server: WEBrick/1.3.1 (Ruby/1.8.2/2004-12-25)
Content-Length: 944

つまり、1行目は、キーがnullになってた。たしかに、ありだ。フィールド値自身がnullなheaderこそない状態だったようだ。なので、

HTTPConnection c;
...
int i = 0;
while (c.getHeaderField(i) != null) {
	...
	i ++;
}

が正解のよう。

*1:自分でググッて見つけられなかったんで、キーワードになりそうな言葉を追加した。