ひこぽんのーと

覚書と雑記です。

JavaEE 7をやってみよう。 JAX-RS その5

その4の続き。

Eclipseのウィザードに「JAXBプロジェクト」、「JAXBクラスからスキーマ」といったものがあるので、
今回のxsdファイル作りはこれでやってみることにする。

1. プロジェクト作成
ファイルメニューから新規を選び、ウィザードから「JAXBプロジェクト」を選ぶ。
f:id:nagamitsu1976:20150821143309p:plain
2. 詳細設定
ランタイムはWildflyを使っているが、互換を考えて標準になりそうなJavaを選んだ。バージョンについては環境に合わせて7とした。
固有のランタイムも選べるので、状況に合わせて使うと良いかもしれない。
f:id:nagamitsu1976:20150821144457p:plain
f:id:nagamitsu1976:20150821144622p:plainf:id:nagamitsu1976:20150821144525p:plain
3. ソースのコピー
プロジェクトができたら、前回作ったWarShipクラスとCatalogクラスをプロジェクトにコピーする。
f:id:nagamitsu1976:20150821145312p:plain
4. スキーマ生成
新規のウィザードから「JAXBクラスからスキーマ」を選ぶ。
f:id:nagamitsu1976:20150821145555p:plain
スキーマファイルの名前と出力先を選ぶ。
f:id:nagamitsu1976:20150821150202p:plain
プロジェクトの中から出力対象のクラスを選択して完了。
f:id:nagamitsu1976:20150821150239p:plain
ブラウザが勝手に開いて、Page Not Foundになるけど気にしないで閉じる。
指定位置にはちゃんとファイルが出力されている。
f:id:nagamitsu1976:20150821150419p:plain

できたスキーマはこんなだった。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="result" type="catalog"/>

  <xs:complexType name="catalog">
    <xs:sequence>
      <xs:element name="shipList" type="warShip" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="warShip">
    <xs:sequence>
      <xs:element name="type" type="xs:string" minOccurs="0"/>
      <xs:element name="name" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

これを見てもなんとなくわかる通り、自分が想定した作りにはなってない。
どう見てもshipListが繰り返される形だ。

これをshipListタグの中にwarShipタグが内包されるようなXMLの形式になるように
書き換えようと思う。

といったところで、次回へ続く。