java - インナークラス - xjc オプション




XJC-コンパイラはこのクラスのカスタマイズを尊重することができませんでした (2)

あなたのスキーマのコンパイルに関する別のトピックを取り上げるので、私は別の答えを追加します。

私が気づいたのは、これら2つの単純な型は実際には異なる名前空間に属しているということです。 したがって、実際には、最初は同じパッケージで生成されるべきではありません。

私はあなたのターゲットパッケージとしてorg.isanを指定するためにgeneratePackageを使用generatePackageと思います。 だからあなたのすべての名前空間はかなり悪い1つのパッケージになります。 JAXBは、名前空間ごとに1つのパッケージがある場合に最適です。 あなたがしなければそれは変になるでしょう。

ですから、私は一般的にgeneratePackage使用を阻止し、代わりにjaxb:package使用しjaxb:package

  <bindings schemaLocation="http://www.isan.org/schema/v1.11/common/country.xsd">
    <schemaBindings>
      <package name="org.isan.schema.v1_11.common.country"/>
    </schemaBindings>
  </bindings>

また、パッケージ名をメジャー/マイナースキーマバージョンで使用することをお勧めします。 後で複数のスキーマバージョンを同時にサポートする必要があるかもしれません。

私はJavaプロジェクトからISAN Restful APIを呼びたいので、maven-jaxb2-pluginを使ってxsdファイルからJava Beanを生成しようとしています。 ここにxsds:

これらのファイルをダウンロードしてsrc / main / resourcesフォルダにコピーし、カタログを定義しました。 プロジェクトをビルドすると、同じ名前の2つのタイプがあるため、エラーが発生します。

org.xml.sax.SAXParseExceptionpublicId: http://www.isan.org/schema/v1.11/common/language; systemId: http://www.isan.org/schema/v1.11/common/language.xsd; lineNumber: 39; columnNumber: 48; A class/interface with the same name "org.isan.CodingSystemType" is already in use. Use a class customization to resolve this conflict.
org.xml.sax.SAXParseExceptionpublicId: http://www.isan.org/schema/v1.11/common/country; systemId: http://www.isan.org/schema/v1.11/common/country.xsd; lineNumber: 39; columnNumber: 48; (Relevant to above error) another "CodingSystemType" is generated from here.

それは正しいです:language.xsdとcountry.xsdはどちらもCodingSystemTypeという型を定義しています:

    <xs:simpleType name="CodingSystemType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="ISO639_2"/>
            <xs:enumeration value="RFC3066"/>
        </xs:restriction>
    </xs:simpleType> 

    <xs:simpleType name="CodingSystemType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="ISO3166_1"/>
        </xs:restriction>
    </xs:simpleType> 

提案したように、私はcountry.xsd型のクラスカスタマイズを使用しようとしました。 私はこのバインディングをpom.xmlに追加しました:

<bindings>
    <binding>
        <url>http://www.isan.org/schema/v1.11/common/country.xjb</url>
    </binding>
</bindings>

xjcファイル:

<bindings version="2.0" xmlns="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:annox="http://annox.dev.java.net"
    xmlns:namespace="http://jaxb2-commons.dev.java.net/namespace-prefix">
    <bindings schemaLocation="http://www.isan.org/schema/v1.11/common/country.xsd">

        <bindings node="//xs:simpleType[@name='CodingSystemType']">
        <class name="CountryCodingSystemType" />
        </bindings>

    </bindings>
</bindings>

今、私は対処できない別のエラーが発生します:

[ERROR] Error while parsing schema(s).Location [ http://www.isan.org/schema/v1.11/common/country.xjb{7,58}].
com.sun.istack.SAXParseException2; systemId: http://www.isan.org/schema/v1.11/common/country.xjb; lineNumber: 7; columnNumber: 58; compiler was unable to honor this class customization. It is attached to a wrong place, or its inconsistent with other bindings.
[ERROR] Error while parsing schema(s).Location [ http://www.isan.org/schema/v1.11/common/country.xsd{39,48}].
com.sun.istack.SAXParseException2; systemId: http://www.isan.org/schema/v1.11/common/country.xsd; lineNumber: 39; columnNumber: 48; (the above customization is attached to the following location in the schema)

試す

<bindings node="//xs:simpleType[@name='CodingSystemType']">
    <typesafeEnumClass name="CountryCodingSystemType" />
</bindings>

代わりに。

私はXJCがカスタマイズの列挙型と通常のクラスとの間に違いがあると思う。 関連する質問を参照してください:







jaxb