2016-09-13 7 views
0

私はまだ設計段階ですので、現時点ではコードスニペットはありません。JAXBを使用してXML内のあるクラスから複数の要素を複数の要素に分割する

コンテキスト

私は3つの主な要素と約25のパラメータ(主に属性といくつかの値)と、比較的複雑なXMLを構成するアプリケーションを書いています。多くのカスタムタイプがありますので、XJCは約15クラスを生成します(ほとんどの場合、文字列または制約にいくつかの制約が追加されています)。 編集:私が話しているこれら3つの要素を含むルート要素が1つあります。

これは、ユーザーがスキーマで許可されているさまざまな種類のさまざまなバリアントを生成できるようにすることを目的としています。だから私は基本的にスイングフォームを作成し、最終的に入力されたデータに基づいてXMLを作成する必要があります。

フォームの25の異なるフィールドをオブジェクトのツリー構造にマップするのは実用的ではありません(特に、属性の多くはオプションなので、オブジェクトの一部は存在しないはずです)。ユーザは何かを入力する)。

したがって、スイングフォームのデータを1つのBean(または少数)に保存してから、JAXBがマーシャリングするいくつかの表現を作成するのが最善の方法です。

質問

JAXBは1つのBeanと直接その1つのクラスから取られた属性と値のすべてを持つ3つの要素を作成することを取るように説得する方法はありますか?

編集:いくつかの議論の後、別の方法で質問することができます:オブジェクトモデルをフラット化する方法はありますか?

+0

これら3つの主要な要素は、単一の所有者XMLの一部ですか?もしそうなら、はいJAXBがそのトリックを行うことができます。それ以外の場合は、Beanを取得して複数のXMLファイルを作成したい場合、それは扱いにくく、もっと重要なことです。 – kgdinesh

+0

はい、これらの3つの要素はルート要素でラップされています。私は道があることを願っています。手ですべてをまとめるのはかなり不愉快なことでしょう。 – bajermi2

答えて

0

あなたはすでにXJCを使用しています。最終的なオブジェクトには、3つの主な子要素を持つルート要素があります(順番に複雑な構造を持っています)。 JAXBから納得のいくことは必要ありません.XJC出力で生成されたトップレベルのクラスを見つけ、リソースメソッドで直接使用することができます。マーシャリング& un-marshallingはすぐに実行する必要があります。

+0

私はあなたを理解しているか分からない。はい、私はトップレベルのクラスを作成しマーシャルすることができますが、私は3つの異なるオブジェクトを入れなければなりません、そして、私は様々な他のオブジェクトをそれらに入れなければなりません...しかし、それらのデータをスイングフォームから取得する必要があります。私は実際にこのフォームのデータオブジェクトとしてこの複雑な構造を使用することはできません。だから私はそれを平らにして理想的には1つのオブジェクトのすべてを持っていたいと思っています。 – bajermi2

+0

XSDスキーマが目的の構造(root - > child 1 + child 2 + child 3)を正しく定義している場合、これは自動的に処理されていたはずです。 XJCは子クラスへの参照をフィールドとして自動的に最上位クラスを作成します。 – kgdinesh

+0

はい、私はこれらのオブジェクトにすべてデータを入力する必要があります。データはフォームに与えられています。一方、クラスが1つだけの場合は、それをBeanとして使用して、スイング形式のテキストフィールドに直接マップできます。 – bajermi2

関連する問題