在xaxb中将xs:string转换为java.util.UUID

Adr*_*n M 6 java uuid xsd jaxb

在jaxb中,如何将xsd中的字符串转换为java.util.UUID?是否有内置数据类型转换器或我是否必须创建自己的自定义转换器?

mws*_*ltn 11

这是容易,如果你开始使用Java类和使用JAXB注释做.但是,要使用模式执行此操作,必须使用自定义绑定文件.这是一个例子:

架构:(example.xsd)

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.example.com"
           xmlns="http://www.example.com"
           elementFormDefault="qualified">
    <xs:simpleType name="uuid-type">
        <xs:restriction base="xs:string">
            <xs:pattern value=".*"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="example-type">
        <xs:all>
            <xs:element name="uuid" type="uuid-type"/>
        </xs:all>
    </xs:complexType>
    <xs:element name="example" type="example-type"/>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

绑定:(bindings.xjb)(注意,为了简洁printMethodparseMethod我假设UuidConverter该类在默认包中.这些应该在现实中完全合格.所以如果UuidConverter在包中com.foo.bar那么值应该是com.foo.bar.UuidConverter.parsecom.foo.bar.UuidConverter.print

<!-- Modify the schema location to be a path or url -->
<jxb:bindings version="1.0"
              xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
              xmlns:xs="http://www.w3.org/2001/XMLSchema"
              node="/xs:schema"
              schemaLocation="example.xsd">
    <!-- Modify this XPATH to suit your needs! -->
    <jxb:bindings node="//xs:simpleType[@name='uuid-type']">
        <jxb:javaType name=" java.util.UUID"
                      parseMethod="UuidConverter.parse"
                      printMethod="UuidConverter.print"/>
    </jxb:bindings>
</jxb:bindings> 
Run Code Online (Sandbox Code Playgroud)

UuidConverter.java:

import java.util.UUID;

public class UuidConverter {
    public static UUID parse(String xmlValue) {
        return UUID.fromString(xmlValue);
    }

    public static String print(UUID value) {
        return value.toString();
    }
}
Run Code Online (Sandbox Code Playgroud)

可悲的是,我不能指出你一个很好的参考,因为它真的没有记录好.博客文章中有一些如何运作的点点滴滴.我花了几个小时才第一次完成这项工作.: - /