11

XJCコンパイラを介してXSDからJavaを生成する場合、次のような匿名のsimpleTypesを持つ要素のタイプjava.lang.Stringを常に取得します。

    <xsd:element name="Product">
    <xsd:simpleType>
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="Product1"/>
            <xsd:enumeration value="Product2"/>
            <xsd:enumeration value="Product3"/>
        </xsd:restriction>
    </xsd:simpleType>
</xsd:element>

もちろん、これを列挙したいと思います。XJCをだまして生成して使用させる方法はありますか?

JAXB2.1.3を使用しています。注:質問する前に、いいえ、スキーマを変更してXJCのバグに適合させることはできません。

4

3 に答える 3

16

XJCファイルに入れる必要があります:

<jxb:bindings node="//xsd:element[@name='Product']/xsd:simpleType">
    <jxb:typesafeEnumClass name="ProductType" />
</jxb:bindings>

また

<jxb:bindings node="//xsd:element[@name='Produkt']">
    <jxb:bindings node="./xsd:simpleType">
        <jxb:typesafeEnumClass name="ProduktType" />
    </jxb:bindings>
</jxb:bindings>
于 2009-03-20T15:44:26.557 に答える
5

これが私がこれをどのように実装したかの例です。完全を期すために xjb 全体を追加します。既存の例を見て、まだ少し混乱していることを認めているからです。

これが.xjbファイルです

<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:xs="http://www.w3.org/2001/XMLSchema"
               jaxb:version="1.0">
   <jaxb:bindings schemaLocation="search-constraints.xsd" 
    node="/xs:schema">

     <jaxb:bindings node="//xs:simpleType[@name='booleanStringType']">
      <jaxb:typesafeEnumClass name="BooleanStringType" />
  </jaxb:bindings>

   </jaxb:bindings>
</jaxb:bindings>

ここで、バインドは、search-constraints.xsd のルート レベルで宣言されている単純な型を参照します。そのファイルの抜粋を次に示します。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
 targetNamespace="http://www.example.com" 
 xmlns:tns="http://www.example.com" 
 elementFormDefault="qualified"
 xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    jaxb:version="1.0">

...


<xs:simpleType name="booleanStringType">
    <xs:restriction base="xs:string">
        <xs:enumeration value="true" />
        <xs:enumeration value="false" />
    </xs:restriction>
</xs:simpleType>

于 2010-01-27T19:18:53.743 に答える
1

非常によく似た質問があり、JAXB メーリング リストで質問したところ、かなり役立つ回答が得られました (試してみる時間はありませんでしたが) 。

編集:自分で書いた列挙型クラスに自動的にマッピングするのではなく、列挙型クラスを自動的に生成することについて話している場合は、スキーマファイルを解析してそのJavaコードを自動生成するJavaクラスを書くことができると思います列挙。(その後、xjc を呼び出すたびにその Java クラスを実行します)

于 2009-02-25T14:58:53.817 に答える