java - 如何使用 JAXB 在我的 Java 代码中创建 UUID 以传递 XSD 模式限制

标签 java xml xsd jaxb

我将使用 UUID 在 Java 代码中创建 ID 字段。我需要从我的 Book 类创建 xml 并根据下面的 XSD 对其进行验证。

我的 XSD 看起来像这样

<xsd:complexType name="Book" >
    <xsd:sequence>
        <xsd:element name="Publisher" type="ns:PublisherType"/>
        <xsd:element name="MessageId" type="ns:GUID"/>
        <xsd:element name="Author" type="xsd:string"/>
        <xsd:element name="Title" type="xsd:string"/>
        <xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded"
                 namespace="##other"/>
    </xsd:sequence>
</xsd:complexType>

<xsd:simpleType name="GUID">
    <xsd:restriction base="xsd:string">
        <xsd:pattern value="[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}"/>
    </xsd:restriction>
</xsd:simpleType>

我的 Java 类看起来像这样

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
@XmlType(name="Book", propOrder = {"publisher", "messageId", "author", "title"
})
@Getter
@Setter
public class Book {

    private Publisher publisher;
    private GUID messageId;    
    private String author;  
    private String title;
}

我应该如何实现我的 GUID 类以返回 UUID.randomUUID() 或任何其他方式来传递 XSD

最佳答案

看看this example ,基本上你必须用 @XmlValue

注释返回 xml 值的方法
public class GUID {

    private final UUID uuid;

    public GUID() {
        this.uuid = UUID.randomUUID();
    }

    @XmlValue
    public String getValue(){
        return uuid.toString();
    }
}

关于java - 如何使用 JAXB 在我的 Java 代码中创建 UUID 以传递 XSD 模式限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54502078/

相关文章:

java - 根据不同布局中的条目检查 editText 条目

java - ActionListener 中的 Paint 方法

Java多态方法

xml - 从网站获取 xml 文件并将其复制到服务器

java - 使用 Jaxb 和绑定(bind)更改 XSD 中引用元素的生成变量的名称

java - 在 Java 中传递反斜杠字符串会出现 unicode 错误异常

java - 将 "2 backgrounds"设置为按钮

java - 在 jTable 中设置 XML 值

java - cvc-elt.1.a : Cannot find the declaration of element "ear"

c# - 使用包含的 xsd 文件编译模式