Это намного легче сделать, если вы начинаете с классов 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();
}
}
К сожалению, я не могу указать вам хорошую ссылку, потому что она на самом деле не документирована хорошо. В постах блога есть кусочки того, как все это работает.Мне несколько часов, чтобы сделать эту работу в первый раз.: - /