Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml JaxB在从XSD生成枚举时添加未得分(0)_Xml_Enums_Jaxb_Xsd_Maven Jaxb2 Plugin - Fatal编程技术网

Xml JaxB在从XSD生成枚举时添加未得分(0)

Xml JaxB在从XSD生成枚举时添加未得分(0),xml,enums,jaxb,xsd,maven-jaxb2-plugin,Xml,Enums,Jaxb,Xsd,Maven Jaxb2 Plugin,我使用maven JaxB插件从XSD生成源代码 插件详细信息如下: <groupId>org.jvnet.jaxb2.maven2</groupId> <artifactId>maven-jaxb2-plugin</artifactId> <version>0.8.3</version> } 当枚举的同一文本在不同位置用下划线分隔时,就会出现此问题。对于Eg <simpleType name="MyEnum">

我使用maven JaxB插件从XSD生成源代码

插件详细信息如下:

<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.8.3</version>
}

当枚举的同一文本在不同位置用下划线分隔时,就会出现此问题。对于Eg

<simpleType name="MyEnum">
    <restriction base="xsd:string">
        <enumeration value="My_Simple_Text" />
        <enumeration value="MySimple_Text" />
    </restriction>
</simpleType>

不转换为枚举。
有没有办法避免JaxB在单词之间添加下划线。

您可以使用外部绑定文件自定义枚举生成:

<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='MyEnum']/xs:restriction/xs:enumeration[@value='My_Simple_Text']">
            <jxb:typesafeEnumMember name="FOO"/>
        </jxb:bindings>
        <jxb:bindings node="//xs:simpleType[@name='MyEnum']/xs:restriction/xs:enumeration[@value='MySimple_Text']">
            <jxb:typesafeEnumMember name="BAR"/>
        </jxb:bindings>
    </jxb:bindings>
</jxb:bindings>


更新 事实证明,更好的方法是使用以下绑定文件:

<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings 
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
  version="2.1">
  <jxb:globalBindings underscoreBinding="asCharInWord"/>
</jxb:bindings>


是否必须手动指定每个值。如果可以的话,我正在寻找一个标志来告诉JaxB不要保留枚举的原始值。我有大约180个枚举值。我知道这很奇怪,但代码就是这样的。如果没有其他选择,我会求助于绑定作为最后手段。谢谢你的快速回复reply@RajkumarPalani-尝试使用此链接答案中的绑定文件:
<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='MyEnum']/xs:restriction/xs:enumeration[@value='My_Simple_Text']">
            <jxb:typesafeEnumMember name="FOO"/>
        </jxb:bindings>
        <jxb:bindings node="//xs:simpleType[@name='MyEnum']/xs:restriction/xs:enumeration[@value='MySimple_Text']">
            <jxb:typesafeEnumMember name="BAR"/>
        </jxb:bindings>
    </jxb:bindings>
</jxb:bindings>
<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings 
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
  version="2.1">
  <jxb:globalBindings underscoreBinding="asCharInWord"/>
</jxb:bindings>