2012-03-05 10 views
5

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

+1

Dai un'occhiata a [Blaise Doughan post sugli adattatori XML] (http://blog.bdoughan.com/2010/07/xmladapter-jaxbs-secret-weapon.html). –

+0

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. –

risposta

10

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. : -/