2012-11-17 5 views
5

XMLを既存のオブジェクトに直接マーシャリングし、特定のフィールドのみを更新できますか?JAXBを使用して既存のオブジェクトにマーシャリングする

クライアントから要求された特定のフィールドのみを変更したいと思います。

任意のポインタ?

+0

これは反射で行うことができます。タイプの複雑さにもよりますが、かなり単純です。ライブラリが推奨されているかどうかを知りたい – jahroy

+0

アンマーシャリングされるオブジェクトは、私のコントロール下にありません。彼らは他のユーザ定義のクラスも含めて、あらゆる種類のメンバ型を収容することができます。この場合、反射を使用することは可能ですか?私はイントロスペクションも使うべきですか?同じような例がありますか? –

+0

それは反射のポイントです。オブジェクトについて何も知らずにオブジェクトを検査することができます。今日の例では作業することはできませんが、今晩後で(12時間後に)コードを投稿できるかどうかがわかります。 – jahroy

答えて

0

解決策は次のとおりです。注釈と反射。と同じもののライブラリがありません。私はこの仕事をしていた時に多くを探しました。

私はあなたが望むのとまったく同じことをしました。私はこれを自分で実装しました。しかし、それは独占的なので、私は共有することはできません。

しかし、私は注釈を使用して再ロード可能なフィールドにマークを付け、Reflectionを使用してリロード可能なパーツだけをリロードしました。

ステップ1:新規にアンマーシャリングオブジェクトから新しい値で古いオブジェクトのsetterメソッドを呼び出します。再度新しいオブジェクト

ステップ2を作成するためのXMLを非整列化。

これが役に立ちます。

+0

しかし、上のコメントから、ソースがあなたのコントロールにないことが分かりました。そして、リフレクションはパブリックセッターメソッド再読み込みしようとしているプロパティに移動します。 –

0

短い答えはノーです。ジェネリックソリューションを考えてjaxbバインディングをカスタマイズする簡単な方法はありません。 JAXB and class instantiation

もう1つの解決策(おそらくはより重大)は、処理したい部分をXML部分を抽出し、アンマーシャルを実行することです。 Java How to extract a complete XML block

関連する問題