2017-10-25 14 views
1

typesafeEnumBaseがXSDに設定されている場合linkJAXBバインディング - 設定typesafeEnumBaseが空(文字列に列挙を変換)する

によると:文字列が、それはすべての単純型定義が派生することを指定 にグローバルな方法だろうまたは を間接的にxsd:stringから取得し、列挙ファセットを持つ場合は、デフォルトでtypesafe enumにバインドされている である必要があります。 typesafeEnumBaseが の空文字列 ""に設定されている場合、単純型定義は、デフォルトでは 型安全enumクラスにバインドされません。 typesafeEnumBaseの値は、 アトミックな単純型定義(xsd:booleanおよびバイナリ の両方を除く)を除くことができます。

だから私は私のbinding.xjbに次のように設定しています

<jxb:globalBindings typesafeEnumBase=""/> 

jaxb2-maven-pluginを実行しているとき、私は次の例外を取得:私の知る限り、私は設定できません理解し

lineNumber: 5; columnNumber: 46; cvc-minLength-valid: Value '' with length = '0' is not facet-valid with respect to minLength '1' for type '#AnonType_typesafeEnumBaseglobalBindings'. 
... 
lineNumber: 5; columnNumber: 46; cvc-attribute.3: The value '' of attribute 'typesafeEnumBase' on element 'jxb:globalBindings' is not valid with respect to its type, 'null'. 

を空文字列""typesafeEnumBaseが記載されています。ドキュメンテーションは、それがxsd:booleanになることもできないと述べている。

私が欲しいのは、関連のSOの質問がhereですが、私は空の文字列""を設定したり、回答のtypesafeEnumBase noneにxsd:boolean値を設定することはできませんので、代わりにenum

<xs:simpleType name="phraseID"> 
    <xs:restriction base="escapedStringUserType"> 
     <xs:enumeration value="NOT_SPECIFIED"/> 
     <xs:enumeration value="X000-9999"/> 
     <xs:enumeration value="X000-9998"/> 
    </xs:restriction> 
</xs:simpleType> 

Stringに次を変換することです私のために働く(両方を試みた)。

+0

あなたが引用したドキュメントはあまり言葉を言わず、 'typesafeEnumBase'を空文字列に設定することは実際にはできないと言います - 仮説的な状況を記述しているかのようにです(" would "という単語の使用から判断して) 。 [JAXB仕様](https://jcp.org/ja/jsr/detail?id=222)には何も言われていないので、これはサポートされているものではないということです。 – Jesper

+0

@Jesper、返信ありがとう、列挙型の代わりに文字列を生成する他のソリューションですか? – pleft

+0

列挙の制限を持つ特定の単純型に対して ''を使用することはできますが、これらの型すべてに対してグローバルに設定する方法はありません。 – Jesper

答えて

2

設定次

<jxb:globalBindings typesafeEnumMaxMembers="0"/> 

代わりに、文字列に変換します列挙制限のあるすべての単純タイプに対して任意の列挙型を生成しません、しかし、それは次のようにコンソールに警告を出してくれる:

Simple type "xxx-address" was not mapped to Enum due to EnumMemberSizeCap limit. Facets count: 10, current limit: 0. You can use customization attribute "typesafeEnumMaxMembers" to extend the limit. 
1

あなたはそれがこの例のようにJavaのenumにマップする必要はありません列挙制限のある特定の単純型に指定することはできません。

<?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" version="1.0"> 
    <jaxb:bindings 
      schemaLocation="myschema.xsd" 
      node="/xs:schema/xs:simpleType[@name='phraseID']"> 
     <jaxb:typesafeEnumClass map="false"/> 
    </jaxb:bindings> 
</jaxb:bindings> 

しかし、私の知る限りでは、何もあり(たとえば、<jaxb:globalBindings>の中に直接<jaxb:typesafeEnumClass map="false"/>を使用することはできません)。

(誰かがこれを行う方法を知っている場合は、私も知りたいので、コメントしてください)。

+1

私はあなたのソリューションを試してみましたが、すでに述べたように、グローバルに適用することはできません。列挙制限を持つ単純な型を宣言する必要があります。私は ''が列挙の制限を持つすべての単純型に適用され、文字列に変換されることを知りましたが、出力に 'warnings'を生成します。私はあなたの答えをupvoteしますが、 'は私が正確に必要なものなので、別の答えを投稿します。私を助けてくれてありがとう。 – pleft

関連する問題