【问题标题】:Convert xs:string to java.util.UUID in jaxb在 jaxb 中将 xs:string 转换为 java.util.UUID
【发布时间】:2012-03-05 10:34:29
【问题描述】:

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

【问题讨论】:

  • 显然没有默认转换器,我必须自己创建。我所做的与下面提供的答案几乎相同。我有一个现有的 bindings.xjb,所以修改它会更容易一些。节点 xpath 的事情在多个节点上有问题,但这是另一个故事 :) 谢谢大家。我会为他的努力选择@mwsltn。

标签: java xsd jaxb uuid


【解决方案1】:

如果您从 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>

Bindings: (bindings.xjb) (注意printMethodparseMethod的简洁我假设UuidConverter类在默认包中。这些在现实中应该是完全限定的。所以如果UuidConvertercom.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> 

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();
    }
}

遗憾的是,我无法为您指出一个好的参考,因为它确实没有很好地记录。博客文章中散布着这一切如何运作的点点滴滴。我花了几个小时第一次完成这项工作。 :-/

【讨论】:

  • UuidConverter可以省略&lt;jxb:javaType name="java.util.UUID" parseMethod="UUID.fromString" printMethod="java.util.Objects.toString" /&gt;
【解决方案2】:

自己创建一个简单的转换器:

UUID.fromString(String uuid);

http://docs.oracle.com/javase/6/docs/api/java/util/UUID.html

【讨论】:

    猜你喜欢
    • 2021-01-28
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多