Конвертировать xs: string в java.util.UUID в jaxb - PullRequest
6 голосов
/ 05 марта 2012

В jaxb как конвертировать строку в xsd в java.util.UUID?Есть ли встроенный конвертер типов данных или мне нужно создать свой собственный конвертер?

Ответы [ 2 ]

11 голосов
/ 07 марта 2012

Это намного легче сделать, если вы начинаете с классов Java и используете аннотации JAXB.Однако, чтобы сделать это с помощью схемы, вы должны использовать пользовательский файл привязок.Вот пример:

Схема: (пример.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.xjb) (Обратите внимание, что для краткости в printMethod и parseMethod я предположил, чтокласс UuidConverter был в пакете по умолчанию. Они должны быть полностью определены в реальности. Так что если UuidConverter где в пакете com.foo.bar, то значения должны быть такими, как com.foo.bar.UuidConverter.parse и com.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();
    }
}

К сожалению, я не могу указать вам хорошую ссылку, потому что она на самом деле не документирована хорошо. В постах блога есть кусочки того, как все это работает.Мне несколько часов, чтобы сделать эту работу в первый раз.: - /

0 голосов
/ 05 марта 2012

Создайте простой конвертер самостоятельно:

UUID.fromString(String uuid);

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

...