2012-03-05 10 views
5

En jaxb, ¿cómo convierte una cadena en xsd a java.util? IDID? ¿Hay un convertidor de tipos de datos incorporado o tengo que crear mi propio convertidor personalizado?Convierta xs: string a java.utiliránID en jaxb

+1

Eche un vistazo a [publicación de Blaise Doughan sobre adaptadores XML] (http://blog.bdoughan.com/2010/07/xmladapter-jaxbs-secret-weapon.html). –

+0

Aparentemente no hay un convertidor predeterminado y tengo que crear el mío. Lo que hice fue más o menos lo mismo que las respuestas proporcionadas a continuación. Tenía un bindings.xjb existente por lo que era un poco más fácil simplemente modificarlo. El nodo xpath tenía problemas en varios nodos, pero esa es otra historia :) Gracias chicos. Elegiré @mwsltn por su esfuerzo. –

Respuesta

10

Esto es mucho más fácil de hacer si se comienza con las clases de Java y utiliza anotaciones JAXB. Sin embargo, para hacer esto usando el esquema, debe usar un archivo de enlaces personalizado. Aquí está un ejemplo:

esquema: (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> 

enlaces: (bindings.xjb) (Tenga en cuenta que por razones de brevedad en printMethod y parseMethod que supone que la clase UuidConverter estaba en el paquete por defecto . Estos deben ser plenamente cualificado en la realidad. Así que si UuidConverter donde en el paquete com.foo.bar entonces los valores deben ser como com.foo.bar.UuidConverter.parse y 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(); 
    } 
} 

Lamentablemente no puedo indicarle una buena referencia porque realmente no está bien documentada. Hay partes de cómo funciona todo en publicaciones de blog. Me tomó unas horas hacer que esto funcione la primera vez. : -/

Cuestiones relacionadas