1

次の XML のような UI コントロールの XML スキーマがあります。

<InputParameters>
    <Combobox name="Combo1">...</Combobox>
    <Radiobutton name="Radio1">...</Radiobutton>
    <Combobox name="Combo2">...</Combobox>
    <Combobox name="Combo2">...</Combobox>
</InputParameters>

InputParameters(別の JAXB 要素内のフィールド) を宣言する方法は次のとおりです。

    @XmlElementWrapper(name="InputParameters")
    @XmlElementRefs(
        {
            @XmlElementRef(name="Combobox",     type=ComboboxJAXB.class),
            @XmlElementRef(name="RadioButtonGroup", type=RadioButtonGroup.class)
        }
        )
    protected List<? extends InputComponent> inputParameters;

ここでいくつかの重要なポイント:

  • アイテムの順序InputParametersは重要です
  • ComboboxRadiobuttonすべてがスキーマ内で同じ置換グループ ヘッドを持っています( InputComponent)

次の点にも注目する価値があります。

  • InputParametersMap@name属性が(一意の)キーであると考えることができます(そしてそうです)
  • 順序が重要なので、これは Java でなければなりませんLinkedHashMap

マーシャリングからの XML 出力 (上に表示) は問題ありません。私が問題を抱えているのは、JAX-RS がこれを JSON として出力するときです。

JSON では、出力は次のようになります。

{
    InputParameters : {
       Combobox : {.....},
       Radiobutton : {.......},
       Combobox : {.....},
       Combobox : {.....},
       }
}

ここでの問題は次のとおりです。

  • InputParametersオブジェクトには「Combobox」という名前の複数のプロパティがあります
  • InputParametersは配列ではなくオブジェクトであるため、アイテムの順序は表現されません

質問はこれに要約されます: JAXB にInputParameters(順序付けされていない) オブジェクトのセットではなく (順序付けられた) 配列としてコンテンツを出力させることはできますか? それとも、私が考慮すべき非常に異なるアプローチがあるのでしょうか?

目的の JSON 出力は次のようになります。

{
    InputParameters : 
      [
         {Combobox : {.....}},
         {Radiobutton : {.......}},
         {Combobox : {.....}},
         {Combobox : {.....}},
      ]
}

JAXB の参照実装を使用しています。

4

0 に答える 0