- - PR -
直列化されたオブジェクトの復元エラーに関して。
1
| 投稿者 | 投稿内容 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-04-24 15:07
いつもお世話になっております。
現在Weblogic8.1+StrutsでWebシステムの開発を行っています。 レガシーシステムとの送受信を行っていて java.io.StreamCorruptedExceptionが発生して困っております。 実際のソースは持ち出せなかったので 送信データに対する受信データ(byte配列)から オブジェクトの復元を行っているようでした。 試しにObjectInputStreamを生成する様なコードを以下に作成し、 実行してみましたが結果は同じでした。 よく分からないのですが、シリアライズされていないからでしょうか? もしそうだとしたらどのようにテストすれば上手くいくかをご助言ください。 ########------ TestClass FROM------######## import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.ObjectInputStream; /*テストクラス*/ public class TestStream { public static void main(String[] args) { String test = "test"; try{ ByteArrayInputStream bStream= new ByteArrayInputStream(test.getBytes()); ObjectInputStream oStream =new ObjectInputStream(bStream); }catch(IOException e){ e.printStackTrace(); } } } ########------ TestClass TO------######## ########------ StackTrace FROM------######## java.io.StreamCorruptedException: invalid stream header at java.io.ObjectInputStream.readStreamHeader(Unknown Source) at java.io.ObjectInputStream.<init>(Unknown Source) at TestStream.main(TestStream.java:12) ########------ StackTrace TO------######## ########------ 環境------######## クライアント/サーバOS:Soralis8 JDK:1.4.1 ----なお上記テストはWindows2000上で実行しました。 分かりにくい説明かと思いますが、 何かしらヒントになるようなことがお分かりの方がいらっしゃいましたら ご教授ください。 なお同様のメッセージをJAVA-HOUSE-MLの方にも投稿しておりますので 何か分かりましたらお伝えします。 | ||||||||||||
|
投稿日時: 2004-04-24 15:36
ゆうさん、こんにちは。
問題なのは、レガシーシステムとの通信ですね? そのシステムは Javaではないのではないでしょうか? だとすれば、ObjectInputStreamではデータは復元できないでしょう。 まず、そのシステムの通信仕様を知る必要があります。 その当時の仕様書があれば良いのですが、なければソースから リバースすることになります。 (「ソースが持ち出せない」というのが気になりますが。) あと、実際の通信を観測してデータフォーマットを知ることも ある程度できるかも知れませんが、それが完全であることを 保証することは出来ないと思いますから、業務用のシステム ではお勧めできません。 | ||||||||||||
|
投稿日時: 2004-04-24 17:24
unibon です。こんにちわ。
ふと気になったのですが、どんな点がレガシーなのでしょうか。
すでに byte の配列をお持ちでしたら、もし可能ならばですが、その内容の一部(またはそれほど多くなければ全部)を16進ダンプなどで提示されてはどうでしょうか。
このコードだと "test" という文字列そのものをデシリアライズの入力にしていますが、シリアライズしていないものをデシリアライズすることはできません。 | ||||||||||||
|
投稿日時: 2004-04-25 15:10
ObjectInputStreamで読み込める情報は、ObectOutputStreamで書き込んだ情報と同じフォーマットになってないといけないですよね。TestStreamクラスは根本的に使い方を誤っているような気がします。
私もStreamCorruptedExceptionで悩まされたことがあります。その原因は 『ObjectOutputStreamは追加保存する時にもヘッダ情報を書き出すため、ファイルの中に必要ないヘッダが紛れ込む』ことでした。 その時は、最初の書き込みはObjectOutputStreamを使い、2回目以降の書き込みには下記のクラスを利用して解消しました。
全然違う原因だったらごめんなさい。 | ||||||||||||
1
