Index: [Article Count Order] [Thread]

Date:  Thu, 2 Nov 2000 18:45:38 +0900
From:  Kaoru Hosokawa <khosokawa@....com>
Subject:  [XP-jp:01131] Re: VXP 	メッセージ関連(その1)
To:  extremeprogramming-jp@....jp (extremeprogramming-jp ML)
Message-Id:  <B6275FD5.437E%khosokawa@....com>
In-Reply-To:  <97BA340C0480D411BDA800062939A1890607D7@....jp>
Posted:  Thu, 02 Nov 2000 18:44:21 +0900
X-Mail-Count: 01131

ホソカワ@お久しぶりです。

on 00.10.24 4:43 PM, tetsuya@....jp at tetsuya@....jp wrote:

> 栗原です。
> 
> あまりに停滞させておくと忘れ去られそうなので、昨日の夜
> スクラッチで作ってみました。
> 
> jp.co.esm.wiki.extremedomo.message.MessageParser
> ヘッダー部とボディ部の分割を行う
> 
> jp.co.esm.wiki.extremedomo.message.HeaderParts
> ヘッダー部を解析して、コレクション化する
> 
> jp.co.esm.wiki.extremedomo.message.HeaderField
> 個々のヘッダー情報をあらわす
> 
> jp.co.esm.wiki.extremedomo.message.MessageException
> ラップ例外
> 
> 以下、ソースコード(長いです。)
> 幅も長かったりしますm(_ _)m
> 
> /*
> * $Id$
> */
> package jp.co.esm.wiki.extremedomo.message;
> 
> import java.io.*;
> 
> public class MessageParser {
> public MessageParser(byte[] msg) {
> message = msg;
> }
> public void parse()
> throws MessageException {
> 
> setHeaderParts();
> setBodyPart();
> }
> public HeaderParts getHeaderParts() {
> return headerParts;
> }
> public String getBodyPart() {
> return bodyPart;
> }
> private void setHeaderParts()
> throws MessageException {
> 
> headerParts = new HeaderParts(message);
> }
> private void setBodyPart()
> throws MessageException {
> 
> BufferedReader bufIn = null;
> try {
> bufIn = new BufferedReader(
> new InputStreamReader(
> new ByteArrayInputStream(message)));
> 
> while (true) {
> String line = bufIn.readLine();
> if (line == null)
> return;
> 
> if (line.length() == 0)
> break;
> }
> 
> // It is not well reflected at the time
> // only of a new-line of the message last.
> StringBuffer buf = new StringBuffer(512);
> int count = 0;
> while (true) {
> String line = bufIn.readLine();
> if (line == null)
> break;
> 
> if (count != 0)
> buf.append("\r\n");
> 
> buf.append(line);
> count++;
> }
> bodyPart = buf.toString();
> } catch (IOException e) {
> throw new MessageException(e.toString());
> } finally {
> try {
> if (bufIn != null)
> bufIn.close();
> } catch (IOException e) {
> }
> }
> }
> 
> private byte[] message;
> 
> private HeaderParts headerParts;
> private String bodyPart;
> }

MessageParser を refactor させて頂きました。変更点は以下の通りです。

1. private 変数の宣言を前に持って来ました。
2. parse() メソッドをプライベートにし、コンストラクターから呼ぶようにしまし
た。コンストラクターに、throws ... を追加しました。(MessageParserTest の
testParse() メソッドから parser.parse(); をとる必要があります。)
3. skipHeader(...) メソッドを追加しました。
4. "\r\n" は、System から取得するようにしました。

「// It is ... 」で始まるコメントがよくわかりませんでしたが、だいじょうぶで
しょうか?



/*
 * $Id$
 */
package jp.co.esm.wiki.extremedomo.message;

import java.io.*;

public class MessageParser {
    private byte[] message;
    private HeaderParts headerParts;
    private String bodyPart;
    private String lineSeparator;

    public MessageParser(byte[] msg) throws MessageException {
        message = msg;
        lineSeparator = System.getProperty("line.separator");
        parse();
    }

    public HeaderParts getHeaderParts() {
        return headerParts;
    }

    public String getBodyPart() {
        return bodyPart;
    }

    private void parse()
        throws MessageException {

        setHeaderParts();
        setBodyPart();
    }

    private void setHeaderParts()
        throws MessageException {

        headerParts = new HeaderParts(message);
    }

    private void setBodyPart()
        throws MessageException {

        BufferedReader bufIn = null;
        try {
            bufIn = new BufferedReader(
                        new InputStreamReader(
                            new ByteArrayInputStream(message)));
            skipHeader(bufIn);
            // It is not well reflected at the time
            // only of a new-line of the message last.
            StringBuffer buf = new StringBuffer(512);
            int count = 0;
            while (true) {
                String line = bufIn.readLine();
                if (line == null)
                    break;

                if (count != 0)
                    buf.append(lineSeparator);

                buf.append(line);
                count++;
            }
            bodyPart = buf.toString();
        } catch (IOException e) {
            throw new MessageException(e.toString());
        } finally {
            try {
                if (bufIn != null)
                    bufIn.close();
            } catch (IOException e) {
            }
        }
    }

    private skipHeader(BufferedReader bufIn) throws MessageException {
        try {
            while (true) {
                String line = bufIn.readLine();
                if (line == null)
                    return;
                if (line.length() == 0)
                    break;
            }
        } catch (IOException e) {
            throw new MessageException(e.toString());
        }
    }

}


-- 
Kaoru Hosokawa
khosokawa@....com