2011-09-15 12 views
2

従来のdom/saxベースのxmlテクノロジの代わりに、JAXBのようなバインディングテクノロジを使用できないことの1つは、xmlを読むときに、クラスをインスタンス化することが強く志向されているという事実です。それは管理しています。
JAXBとクラスのインスタンス化

何度も、xmlから値を読み取り、それらを既に作成されたインスタンスのプロパティに設定したいと考えています。
JAXBに、新しいクラスを作成するのではなく、クラスに値を適用する必要があるという簡単な方法はありますか?

+1

あなたのユースケースでは、XMLと既存のインスタンス(つまりIDプロパティ)との間のリンクは何ですか? –

+0

問題は、jaxbベースのライブラリがインスタンスを作成したい場合、クラスが別のフレームワークによってインスタンス化されている場所では適切でないことです。コンテナがBeanをインスタンス化する場所を春と考えてください。または、私はしばしばGUIコンポーネントのいくつかのプロパティを保存するが、私は自分自身を作成し​​たい(または私のIDEがそうしたい)スイング。私の考えは、クラスごとのアプローチで、クラス(またはクラスを返すファクトリ)、XMLノードをjaxbに渡し、クラスのプロパティに属性を読み込みます。 – AgostinoX

+0

私はまだユースケースを把握しようとしています。 XMLにマップする既存のクラスがあるか、またはJAXBに取り込む既存のクラスインスタンスがあるかどうかを確認します。 –

答えて

2

JAXBオブジェクトをDTOとして使用します。次に、PropertyUtils.copyProperties(..)/BeanUtils.copyProperties(..)(commons-beanutilsから)を使用して、すでに部分的に取り込まれたオブジェクトにプロパティを転送することができます。

+0

しかし、DTOツリーは、アーキテクチャ上の観点からは、型付きのDOMを構築するようなものでしょうか? – AgostinoX

+0

コメントが分かりません – Bozho

+0

もう少し説明します。いくつかの種類のdom(dom、jdom、dom4j、xom)に基づいてxmlライブラリを使用すると、xmlファイルを表すメモリ内のツリーが構築されます。それからあなたはツリーからあなたが望む値を得ます。 DTOを使用すると、「ノード」オブジェクト(または「要素」や「属性」オブジェクト、または使用する特定のライブラリに依存するもの)からなるのではなく、単にクラスA、クラスB、私のDTOクラスです。 – AgostinoX

関連する問題