1

IHE ITI HL7プロファイルのいくつかを実装しており、JaxBクラスを生成した利用可能なスキーマがあります。最近、スキーマの異なるバージョン間にいくつかの違いがあることを発見しました。特に、一部のXML要素はXML属性になりました。

以前は、typeCode属性はXML要素にマップされていました。以下の例を参照してください。

 <acknowledgement>
    <typeCode code="AE"/>
</acknowledgement>

これで、typecode属性がXML属性にマップされます。以下の例を参照してください。

<acknowledgement typeCode="AE"/>

これらの形式のいずれかで提供されるタイプコードを持つメッセージを処理できる注釈やその他の可能性を使用してクラスを作成する方法はありますか?さらに良いことに、XJCジェネレーターに自動的にそれを実行させる方法はありますか?おそらく何らかのバインディングを使用しますか?

現在、これは@XmlAttributeアノテーションが付いた単なるフィールドです。

4

1 に答える 1

2

少し手直ししたい場合は、XJC プラグインを使用してこれをうまく実現できるかもしれません。XJC にはプラグイン機能があり、 Sun Codemodel APIを使用して構築されているモデル クラスにアクセスできます。使い始めるには少し手間がかかりますが、基本を理解すれば、JAXB モデルの生成中にあらゆる種類の有用なことを行うのはそれほど難しくありません。ここに良いチュートリアルがあります。

ここで、どの要素が現在属性であるかを示す構成があると仮定すると、モデルクラスを次のように変更できると思います。

public class MyModel
{
  // this part is automatically generated by xjc
  @XmlAttribute
  public String foo;

  // you add this with your custom xjc plugin
  @XmlElement(name="foo")
  public String getFooElement() { return foo; }
  public void setFooElement(String newFoo) { foo = newFoo; }
}

この理論を実際にテストしたことはありませんが、モデル クラスを手動で変更して、一般的なアイデアが機能するかどうかを確認するのは非常に簡単です。

于 2012-02-10T19:06:40.557 に答える