top / index / prev / next / target / source
日記形式でつづる いがぴょんコラム ウェブページです。
具象化SAX実装のおかげで XML関連プログラムの生産性が大幅に向上してきました。一方で ConcreteSAXの仕様上の問題点が浮き彫りになってきました。
私は ConcreteSAX実装を手に入れたことで XMLプログラミングの速度が大幅に向上しました。私自身が ConcreteSAXの最大ヘビーユーザとなっています。※ConcreteSAXは blancoSOAPに同梱する形で配布されています。
たdさい、ConcreteSAXを実際に利用してみて、Handlerの実装にはqNameによる分岐ではマズい場合があることに気がつきました。これは仕様上の問題です。名前空間に付ける名前が揺れた場合に、qNameが期待したものとは異なる値が入ってきてしまうことにより、分岐が適切に動作しない場合があるのです。これの回避策は、URI + localNameの両方を見た分岐が妥当な処理方法になるものと考えます。ただしConcreteSAXの具象化メソッド名については、従来通り qNameの名前変形したものを採用するのが妥当な仕様であると考えます。 AttributesImplからの取り出しについても、getValue(URI, localName)による取り出しが妥当と考えられます。近日中に、この仕様上の問題を克服した版へと改良を加える予定です。
ちなみに、ConcreteSAXのSerializer側は、名前空間に付ける名称は 自分でハンドリングできるので、qNameによる名前の揺れは影響がありません。
Excel様式に記入を行うだけで WSDLと xsdを自動生成するツールである blancoWsdlが 単体試験レベルまで進捗中です。※blancoWsdlは blancoSOAPに同梱する形で配布されています。
minOccurs, maxOccursなどの基本的なXMLSchemaに対応することができました。minLengthなどは xsdにシンプル型定義を併せて記載することにより実現しています。なお、これがベストな実現案かどうか やや自信が無いのですが、いっぽうでドメインを表現するために巨大な xsdを準備するという単純な発想をベースに進もうものなら、実行時の動作速度の面で非常に不利になるものと容易に想像されます。そのため個々のxsdに必要な物をそのまま 最低限な分だけ展開するというアプローチを取っています。
いずれにしても blancoWsdlの基本機能実装が おおざっぱには完了しました。Excel様式に単純に記載を行っただけで私のニガテなWSDLや xsdが ぽんぽん自動生成されるのは圧巻です。私自身がとても嬉しい機能です。この仕様に機能を追加して、某システムの Excel様式からxsdを自動生成する仕組みに応用しようと考えています。
この後は 引き続き xsd からPOJOを生成する部分に着手していきます。blancoPOJO実装があるので、xsdからPOJOを自動生成する部分は、1-2時間程度の稼働で実装完了するものと想像します。ここは blancoのライブラリ群が あっという間に実装ができるようになる土壌を担ってくれます。問題は SAXの入出力と POJOとの連動を担う部分の実装です。SAXとPOJOをうまく連携させるような仕様および実装でない限り、速度上の面で使い物にならない実装になってしまうであろうことは容易に想像できます。わたしは SAXとPOJOとは密結合でも良いと考えています。加えて実行時ライブラリを全く必要としない実装を私は求めています。このように考えていくと、既存の XML-Javaバインディング実装の多くは私の美意識には合致しないであろうと容易に結論が出てしまいます。まあ、結局のところは 手作りすることになるのでしょうね (苦笑) SAX-POJOバインディング実装について 数時間程度で実装が完了できたら、まあ他の実装を調べなかったリスクとのトレードオフにはなるように想像してます。
ほぼ全てのリソースを blanco開発に集中投入中です。今週中に blancoSOAP周りの一式を作成しきっておかないと、来週からの進捗に影響が出てしまうのが大きな理由です。ちなみに、誤解の無いように補足しておきますが、今週中に SOAP実装が完了することは無いです。あくまでSOAP関連のツール類の完全整備を目標と設定しています。「SOAP実装は 1週間にして成らず」です。、、、ああ、でも足回りが揃ったら SOAP実装完了までは 数日程度の稼働で実現できる可能性はありますけれどもね…。そんなことで日記の更新の時間も削減して blancoに集中投入しています。日記の更新が少ないのは そのためです。…と書きつつ、最近 ちょっとずつ日記更新の頻度が上がっているのは、blanco Frameworkの全貌確定に向けた一定の目途が立ち始めていることも示しています。
2005.09.29 後日談 ある用件にて割り込みが入り、09/29は あまり進捗しませんでした (目黒に張りついていました)。でも ConcreteSAXの名前判断の厳格化 (URIとlocalNameを併用して名前の妥当性を判断するような仕様変更) については、実装を行うことが出来ました。