gpt4 book ai didi

java - JAXB:将元素类型 xs:string 绑定(bind)到 Enum

转载 作者:行者123 更新时间:2023-12-01 22:05:18 25 4
gpt4 key购买 nike

我的供应商为我提供了 XSD其元素定义为 String 。然而,在他的规范中,他指出该字符串只能有 3 个值中的 1 个:

例如:

<xs:complexType name="MitigationStatus">
<xs:annotation>
<xs:documentation>
This represents a list of mitigation statuses. Can be OPEN, CLOSED, INVALID
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="status" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
</xs:sequence>
</xs:complexType>

我想在我的绑定(bind)文件中添加一些内容,以便当我解码我的 XML 时,状态不是 String而是一个Enum .

我找到的所有文档似乎都表明 XSD需要 String成为enum类型。

有没有办法将字符串绑定(bind)到 Enum即使输入 XSD不是enum

最佳答案

您可以在稍微修改过的 XML 模式中定义此限制,并进行如下所示的更改,并从中生成 Java 类。

 <xs:simpleType name="StatusType">
<xs:restriction base="xs:string">
<xs:enumeration value="OPEN"/>
<xs:enumeration value="CLOSED"/>
<xs:enumeration value="INVALID"/>
</xs:restriction>
</xs:simpleType>

...
<xs:element name="status" minOccurs="0" maxOccurs="unbounded" type="StatusType"/>
...

这将产生一个枚举类 StatusType。在 XML 中,无论如何,一切都是字符串,因此它保持原样。

如果您确实想通过绑定(bind)文件来执行此操作,您可以使用如下内容:

<jaxb:bindings node="//xsd:complexType[@name='MitigationStatus']">
<jaxb:bindings node="./xsd:element[@name='status']">
<jaxb:property>
<jaxb:baseType>
<jaxb:javaType name="StatusImpl"
parseMethod="StatusImpl.parseStringToEnum"
printMethod="StatusImpl.printEnumToString"/>
</jaxb:baseType>
</jaxb:property>
</jaxb:bindings>
</jaxb:bindings>

假设一个枚举 StatusType,类 StatusImpl 只是

public class StatusImpl {
public static StatusType parseStringToEnum( String value ){
return StatusType.valueOf( value );
}
public static String printEnumToString( StatusType impl ){
return impl.toString();
}
}

关于java - JAXB:将元素类型 xs:string 绑定(bind)到 Enum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32900032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com