2

私の列挙型クラス

@XmlType
@XmlEnum(Integer.class)
public enum  Error {

 @XmlEnumValue("1")
    ENUM_VALUE_1(1, "some string 1", "some string 1"),
 @XmlEnumValue("2")
    ENUM_VALUE_2(2, "some string 2", "some string 2");

  private Error(int errorCode, String msgKey, String message) {
    this.errorCode = errorCode;
    this.msgKey = msgKey;
    this.message = message;
 }
}

生成された xsd

<xs:simpleType name="error">
   <xs:restriction base="xs:int">
     <xs:enumeration value="1"/>
     <xs:enumeration value="2"/>
   </xs:restriction>
</xs:simpleType> 

使用しているバインディング

 <jaxb:bindings schemaLocation="schema.xsd">
     <jaxb:bindings node="//xs:simpleType[@name='error']">
         <jaxb:typesafeEnumClass ref="packageName.Error" />
     </jaxb:bindings>
 </jaxb:bindings>

問題は、enum ファイルが生成されていないことです。コード生成には「maven-jaxb2-plugin」を使用しています。

4

1 に答える 1

5

デフォルトでは、JAXB (JSR-222)実装は、数値で始まる XML 列挙の Java 列挙を作成しません。外部バインディング ファイルを使用して列挙型を生成できます。

<jxb:bindings 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
    version="2.1">
    <jxb:bindings schemaLocation="schema.xsd">
        <jxb:bindings node="//xs:simpleType[@name='error']/xs:restriction/xs:enumeration[@value='1']">
            <jxb:typesafeEnumMember name="ONE"/>
        </jxb:bindings>
        <jxb:bindings node="//xs:simpleType[@name='error']/xs:restriction/xs:enumeration[@value='2']">
            <jxb:typesafeEnumMember name="TWO"/>
        </jxb:bindings>
    </jxb:bindings>
</jxb:bindings>

完全な例


アップデート

次に、次の注釈を追加するポイントは何ですか - @XmlEnumValue("1")

Java クラスのユース ケースから開始する場合、@XmlEnumValue("1")注釈を使用して、列挙型を目的の XML 構造にマップしました。

  <xs:simpleType name="error">
    <xs:restriction base="xs:int">
      <xs:enumeration value="1"/>
      <xs:enumeration value="2"/>
    </xs:restriction>
  </xs:simpleType>

JAXB 実装は JAXB 情報を XML スキーマに生成しないため、生成されたスキーマから Java モデルを生成したい場合は、バインディング ファイルを使用できます。

于 2013-01-30T20:30:30.200 に答える