- PR -

長〜い文字列を解析/組み立てる汎用的なライブラリ

投稿者投稿内容
彷徨える開発者
常連さん
会議室デビュー日: 2004/07/15
投稿数: 31
投稿日時: 2005-06-25 22:13
表題の通り、「長〜い文字列を解析/組み立てる汎用的なライブラリ」を探しています
仕様はざっとこんな通りです

とある他システムのある機能を呼び出すと長〜い文字列が返ってきます。この文字列には枠組みが決まっていて

項目A:nバイト
項目B:pバイト
項目C:qバイト
項目D:rバイト
項目E:sバイト




単純なフラットな項目の並びだけじゃなくて2階層以上の階層構造の繰り返しもあります。

項目A:nバイト
項目B:pバイト
項目C〜Eまでの繰り返し回数:qバイト
 項目C:qバイト
 項目D:rバイト
 項目E:sバイト
 項目F〜Hまでの繰り返し回数:tバイト
  項目F:uバイト
  項目G:vバイト
  項目H:wバイト
 ・
 ・
 ・

他システムから返された長〜い文字列をこのような別に定義された枠組みに従って解析し、POJOの形で返してくれるようなものを望んでいます。

逆にPOJOからこの枠組みに従って、長〜い文字列を生成する場合もあります。

現在、このような枠組みの定義が数十〜百数十程度あります。少ないので有ればそれぞれ個別にJavaの処理で書いてもいいのですが、数が結構多いのと今後どんどん追加される可能性もあるので汎用的なライブラリを用いた方がいいと思うのですが、いちから作ると結構難しそうなので、既に何か使えるモノがないかと探しています。

何かいいのがあれば教えて下さい

unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2005-06-26 13:50
unibon です。こんにちわ。

引用:

彷徨える開発者さんの書き込み (2005-06-25 22:13) より:
現在、このような枠組みの定義が数十〜百数十程度あります。少ないので有ればそれぞれ個別にJavaの処理で書いてもいいのですが、数が結構多いのと今後どんどん追加される可能性もあるので汎用的なライブラリを用いた方がいいと思うのですが、いちから作ると結構難しそうなので、既に何か使えるモノがないかと探しています。


#POJO という用語を今まで知らなかったのですが、用語集とかを見て知りました。
一種のシリアライズ・デシリアライズになると思います。たとえば WSDL/XSD なら枠組みはすでにありますが、これだと「長〜い文字列」にはできなさそうですね。WSDL/XSD を利用して、一旦 XML にしてから、それを「長〜い文字列」に変換(あるいはその逆変換)するのはもしかしたらできるかなとも思いますが、それにしても難しそうな気がします。
また、疑問に思ったのはこのような定義は、どう定める(定めてある)のでしょうか。定義の種類が百個あったらそれ用に百個のクラスがあるのでしょうか?それとも正規表現のような文字列が百個あるのでしょうか?クラスだと、リフレクションなどを使わないと自動化が難しそうな気がします。文字列であったとしても、正規表現での $1, $2 などのような仕組みがないと対応付けが難しいような気がします。
ibara
常連さん
会議室デビュー日: 2002/11/15
投稿数: 26
投稿日時: 2005-06-26 16:48
回答じゃないんですが、

COBOLのコピー句みたいなのをJavaで再現したいわけですかね。
彷徨える開発者
常連さん
会議室デビュー日: 2004/07/15
投稿数: 31
投稿日時: 2005-06-26 19:59
引用:

ibaraさんの書き込み (2005-06-26 16:48) より:
回答じゃないんですが、

COBOLのコピー句みたいなのをJavaで再現したいわけですかね。




自分も昔はCOBOLerだったのですが、ずいぶん昔のことなのでいい加減ですが、
COBOLのCOPY句はCで言う#includeだと思いますのでちょっと違います。

ま、ここで言う他システムというはCで作られたシステムでこのシステムでは送られてきたメッセージの長さ分mallocしてmcopyして、あとはそれぞれのメッセージの種類ごとに定義されたstructにcastして、個々の項目を取り出しています。逆に個々の項目をくっつけて一つの長いメッセージを作る場合は単純にstructをmcopyです。

ま、Cだから成せる技ですけど、こういうことをJavaで実現するのは本当に難しいですね。
彷徨える開発者
常連さん
会議室デビュー日: 2004/07/15
投稿数: 31
投稿日時: 2005-06-26 20:04
引用:

unibonさんの書き込み (2005-06-26 13:50) より:
unibon です。こんにちわ。

また、疑問に思ったのはこのような定義は、どう定める(定めてある)のでしょうか。定義の種類が百個あったらそれ用に百個のクラスがあるのでしょうか?それとも正規表現のような文字列が百個あるのでしょうか?クラスだと、リフレクションなどを使わないと自動化が難しそうな気がします。文字列であったとしても、正規表現での $1, $2 などのような仕組みがないと対応付けが難しいような気がします。



それもまた悩みのタネです。枠組みの定義は.propertiesのほうが開発はやりやすいのかなと思いますが、POJOを.propertiesを参照して実行時に生成なんてことはできるんでしょうか?無理で有ればpre-compile形式(.propertiesからclassを自動生成する)でもいいんですけど。
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2005-06-27 09:25
あんまりJavaでそうしたライブラリの存在は聞いたことがないですね・・・。

現実的なやり方としてはその電文をいったんXMLに変換するプログラムを作成して、変換後XMLデータバインディングを利用してJavaのオブジェクトに変換する方式でしょうか。
彷徨える開発者
常連さん
会議室デビュー日: 2004/07/15
投稿数: 31
投稿日時: 2005-06-27 11:33
引用:

現実的なやり方としてはその電文をいったんXMLに変換するプログラムを作成して、変換後XMLデータバインディングを利用してJavaのオブジェクトに変換する方式でしょうか。



そうですね、一旦XMLになってしまえばJavaのオブジェクトへのマッピングができそうですね。しかし、そのXMLをどうやって生成するかがミソになりますが・・・
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-06-27 12:39
WebLogic Integration には非XMLファイルをXML形式に変換する Format Builder というツール/ライブラリが付属しています。
http://edocs.beasys.co.jp/e-docs/workshop/docs81/doc/ja_JP/integration/samples/sampleMap.html

その目的のためだけにWLIを購入するのではなかなか元が取れませんが、コーディングレスでGUIツールでペケペケっとフォーマットを定義できますのでボリューム次第では検討の余地があるかもしれません。

[ メッセージ編集済み 編集者: インギ 編集日時 2005-06-27 12:40 ]

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