2011-07-24 18 views
1

XMLを特定の形式で書き込んでいるアプリケーションにJAXBを使用しようとしています。私は下位互換性の問題のためのフォーマットを保つ必要があります。同じ名前の属性を持つ@XMLElementのアンマーシャリング

私はクラスで次のコードセグメントを持っている:

@XmlElement(name = "field") 
private StudyIdentifier2 studyIdentifier; 

@XmlElement(name = "field") 
private List<GenericField> demographicsFields = new ArrayList<GenericField>(); 

このコードは正しく、次のXML記述します:

<field> 
     <value>2</value> 
     <XMLtag>id</XMLtag> 
    </field> 
    <field> 
     <value>JAMES</value> 
     <XMLtag>patient_name</XMLtag> 
    </field> 
    <field> 
     <value>This is a test</value> 
     <XMLtag>study_description</XMLtag> 
    </field> 

を、私はそれをアンマーシャリングしようとするとしかし、私はちょうど私の取得最後のXMLフィールドの詳細を含むStudyIdentifier2オブジェクトには、study_descriptiondemographicsFieldsArrayListが含まれています。 @XMLElementアノテーションに同じ名前の値を指定しているため、正しくアンマシャールできないためです。しかし、私は両方とも<field>と呼ばれる必要があります。同じ名前を付けることは可能ですか、正しくアンマーシャリングするには別の名前にする必要がありますか?

非常に簡単な解決策でもありますが、私はまだJAXBがどのように動作しているかについて完全に頭を浮かべていません。

答えて

0

このXMLには、どのタイプの「フィールド」(StudyIdentifier2またはGenericField)をプログラム的に決定するために使用することはできません。 JAXBの可能性のある制限や困難を無視して、このXMLを手作業で整理することさえできないでしょう。

GenericFieldのクラス定義を見なくても、ここで何が起きているのかを正確に見ることは難しいです。しかし、これを「正しく」アンマーシャリングしたい場合は、そうした可能性があります。そうした場合、別の名前を付ける必要があります(XMLを変更し、前述の後方互換性の問題を引き起こす可能性があります)。あるいは、GenericFieldがサンプルXMLの3つのフィールドすべてを表すことができる場合は、studyIdentifierを削除して、マーシャリングとアンマーシャリングの両方を表すようにdemographicsFieldsを指定してください。genericFieldsのような適切な名前に変更してください。あなたはStudyIdentifer2は常にXMLに第三<field/>から読まれるべきであり、他のすべてがdemographicsFieldsに入る必要があること、たとえば知っていれば

は今、あなたの質問にそれを明確にしてください、と私たちは、おそらくいくつかの追加のオプションを見つけることができます。