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
Respuesta
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. : -/
Crear un convertidor sencillo a sí mismo:
UUID.fromString(String uuid);
http://docs.oracle.com/javase/6/docs/api/java/util/UUID.html
- 1. JAXB 2.1 - Personalizar xs: cualquier enlace
- 2. jaxb: xs: valores nulos de atributos
- 3. XSD: Cómo redefinir el tipo de datos de un tipo simple, por ej. de xs: string a xs: entero
- 4. Jaxb: cómo unmarshall xs: cualquier parte de cadena XML?
- 5. Convierta java.util.List <String> en java.sql.Array
- 6. JAXB para unmarshall <string> foobar</string>
- 7. Java: JAXB: revisión de JAXBElement <Calendar> a xs: fecha incorrecta
- 8. Convierta un 'System :: String ^' en 'const char *' en vC++
- 9. ¿Cómo serializar HashTable <String, String> a XML usando JAXB?
- 10. Usando xs: extension & xs: ¿restricción junto?
- 11. JAXB generar JAXBElement <String> en lugar de cuerdas
- 12. Convierta .csv a .xls en Java
- 13. JAXB anotación Documentación
- 14. Convierta java.util.Date a la Cadena
- 15. ¿Por qué los identificadores List y String se llaman "xs" (en Scala y en otros idiomas)?
- 16. XSD: restringe atributo a xs: float o ""
- 17. Convierta nsdictionary a nsdata
- 18. Convierta JSON a CSV
- 19. Convierta HTML a XAML
- 20. Convierta System.Windows.Media.ImageSource a System.Drawing.Bitmap
- 21. Convierta JavaScript a Java
- 22. Convierta System.Windows.Media.Brush a System.Drawing.Brush
- 23. Convierta CGcolorRef a UIColor
- 24. Convierta XML a la base de datos con Java
- 25. Nombre estándar para (filtro p xs, filtro (no.p) xs)
- 26. Convierta java.util.Set en scala.collection.Set
- 27. Newline en Haskell String?
- 28. Diferencia entre String [] a y String ... a
- 29. XS vs tipos xsd
- 30. Convierta directamente .aspx a .pdf
Eche un vistazo a [publicación de Blaise Doughan sobre adaptadores XML] (http://blog.bdoughan.com/2010/07/xmladapter-jaxbs-secret-weapon.html). –
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. –