In jaxb, come si converte una stringa in xsd in java.util.UUID? Esiste un convertitore di tipi di dati integrato o devo creare il mio convertitore personalizzato?Converti xs: stringa in java.util.UUID in jaxb
risposta
Questo è molto più più facile da fare se si inizia con le classi Java e utilizzare le annotazioni JAXB. Tuttavia, per fare ciò utilizzando lo schema è necessario utilizzare un file di binding personalizzato. Ecco un esempio:
schema: (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>
Attacchi: (bindings.xjb) (Si noti che per brevità nel printMethod
e parseMethod
ho pensato che la classe UuidConverter
era nel pacchetto di default . Questi dovrebbero essere completo nella realtà. quindi, se UuidConverter
dove nel pacchetto com.foo.bar
poi i valori dovrebbero essere come com.foo.bar.UuidConverter.parse
e 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>
UuidConver ter.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();
}
}
Purtroppo non riesco a indicarvi un buon riferimento perché è davvero non ben documentato. Ci sono frammenti di come funziona tutto questo nei post del blog. Mi ci sono volute un paio d'ore per fare questo lavoro la prima volta. : -/
Creare un convertitore semplice da soli:
UUID.fromString(String uuid);
http://docs.oracle.com/javase/6/docs/api/java/util/UUID.html
Dai un'occhiata a [Blaise Doughan post sugli adattatori XML] (http://blog.bdoughan.com/2010/07/xmladapter-jaxbs-secret-weapon.html). –
Apparentemente non esiste un convertitore predefinito e devo creare il mio. Quello che ho fatto è stato più o meno lo stesso delle risposte fornite di seguito. Ho avuto un bindings.xjb esistente quindi è stato un po 'più semplice modificarlo. La cosa nodo xpath ha avuto problemi su più nodi, ma questa è un'altra storia :) Grazie ragazzi. Sceglierò @mwsltn per i suoi sforzi. –