- PR -

MimeMultipartをbyte[]に変換

投稿者投稿内容
未記入
会議室デビュー日: 2005/08/19
投稿数: 10
投稿日時: 2005-09-17 14:58
MimeMultipartのオブジェクトをbyte[]にエンコード/デコードすることは可能ですか?

MimeMultipartで不特定数ファイルのやりとりをしていたのですが、
インタフェースとしてMimeMultipartだと不具合があるので、byte[]でやりとりしようと思っています。(既存コードの流用率からもそれが手っ取り早いので)

原理的には充分可能だと思うのですが、実際のコードが検討つきません。
ご教授願います。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-09-17 15:49
writeTo で ByteArrayOutputStream に書き出すってのはどうでしょう?
http://java.sun.com/products/javamail/javadocs/javax/mail/internet/MimeMultipart.html#writeTo(java.io.OutputStream)
http://java.sun.com/j2se/1.4.2/docs/api/java/io/ByteArrayOutputStream.html

[ メッセージ編集済み 編集者: インギ 編集日時 2005-09-17 15:50 ]
未記入
会議室デビュー日: 2005/07/23
投稿数: 12
投稿日時: 2005-09-18 00:09
#試してないのに机上で発言するのは申し訳ないのですが
それだとbyte[]から戻すのはどうするのでしょう?

MimeMultipart
  ↓
ByteArrayOutputStream
  ↓
byte[]
  ↓
InputStream
  ↓
?????

createMimeBodyPart(java.io.InputStream is) なるものではMimeBodyPartとなってしまいませんか?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-09-18 00:15
「byte[]から戻す」とは、もう一度MimeMultipart のインスタンスに戻すということでしょうか?
だとしたら最初から MimeMultipart の参照を渡してしまえば良いと思います。
具体的なイメージが湧いてないのですが、byte[] を期待している既存コードにだけ byte[] に変換して渡せば良いのではないでしょうか。
未記入
会議室デビュー日: 2005/08/19
投稿数: 10
投稿日時: 2005-09-18 10:25
>「byte[]から戻す」とは、もう一度MimeMultipart のインスタンスに戻すということでしょうか?
はい、そうです。エンコード/デコード両方の処理が必要です。

>だとしたら最初から MimeMultipart の参照を渡してしまえば良いと思います。
一般論的にはその通りでIFにMimeMultipartを使うということになるでしょう。
ただ、現行ではMimeMultipartを使うとやりとりが上手く行えないのです。
#この辺りは質問を発散させないためあえて触れなかったのですが

なぜかと言いますと、このIFはWebサービスです。
つまりMimeMultipartを使ったSwAなのですが、受信側がMimeMultipartを受け取れていません。
SOAPを見る限り送信側は上手くいっているようなのですが....
もちろんこの問題を解決するのが本位なのですが、環境などの関係もありまして早急には解決できなさそうだと見積もっています。
そこで急場の回避方法として、MimeMultipartをbyte[] に変換しWebサービスIFとしようと思いました。(実際は、平行作業ですが)

なら、SwAもそもそもbyte[] にすれば?とも考えられますが、
byte[] はあくまで急場の回避であり、MimeMultipartコード自体はその後の処理でも必要となってくるからです。
そこでコード流用率から、Webサービスの送受信の後にMimeMultipart/byte[]の双変換用の2つのメソッドのみ追加して
回避するのが効率的ではないかと考えました。 (もちろんWebサービスIFも修正が必要になりますが)

>具体的なイメージが湧いてないのですが、byte[] を期待している既存コードにだけ byte[] に変換して渡せば良いのではないでしょうか。
残念ながら上記の理由より、渡すだけでは片手落ちとなってしまい、戻す処理も必要です。

情報ありましたら、ご協力お願いします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-09-18 12:05
すいません、一般的な用語かもしれないですが「SwA」とはなんでしょう?
現状はメソッドのインターフェースで byte[] なり MimeMultipart を送ろうとしているということでしょうか?
SOAP Messages with Attachments で送るのはどうでしょう?
未記入
会議室デビュー日: 2005/08/19
投稿数: 10
投稿日時: 2005-09-18 23:00
インギさん、つきあってくれてありがとうございます

>すいません、一般的な用語かもしれないですが「SwA」とはなんでしょう?
>SOAP Messages with Attachments で送るのはどうでしょう?
その↑頭文字をとってSwAです。
言葉そのものは広義なので、Webサービスでファイル転送をするというニュアンスでよいかと思います。
(言葉の細かい定義がうんたらとかはココでは議論の外でしょう)

>現状はメソッドのインターフェースで byte[] なり MimeMultipart を送ろうとしているということでしょうか?
はい、WebサービスのIFとしてMimeMultipartをつかっていたのを、byte[]に変更したいと思っています。
byte[]であればWebサービスでMimeMultipartより簡単に扱えるので、その辺のWebサービス系の変更は問題ないです。

よって、JavaにおいてMimeMultipart→byte[]→MimeMultipartのやり方の問題となるので、この会議室に質問したしだいです。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-09-20 10:48
>>SOAP Messages with Attachments で送るのはどうでしょう?
>その↑頭文字をとってSwAです。
な、なるほど。存じませんでした:">

「byte[]であればWebサービスでMimeMultipartより簡単に扱えるので、その辺のWebサービス系の変更は問題ない」とは、byte[] を期待している既存のコードがあるから、その実装を変更したくない、という意味ですか?
「よって、JavaにおいてMimeMultipart→byte[]→MimeMultipartのやり方の問題となる」と文脈がどうつながっているのかもよく分かりませんでした。議論が循環していまいますが、MimeMultipart を期待する実装があるのであればそのまま MimeMultipart の参照を渡してしまえば良いと思うのですが・・・。

byte[] から MimeMultipart のインスタンスを生成したいのであれば API リファレンスからがんばってコンストラクタに必要な引数を追っていけば良いかと思います。Axis のコードでも見れば参考になるかもしれません。

[ メッセージ編集済み 編集者: インギ 編集日時 2005-09-20 10:51 ]

スキルアップ/キャリアアップ(JOB@IT)