generate - xsd to java online
¿Es posible usar JAXB para mapear desde un esquema a un java.util.Map? (2)
Tengo un esquema XML existente que contiene un tipo que me gustaría asignar a un mapa de Java de algún tipo con JAXB. Mi proceso de construcción toma el esquema y crea los beans. Me gustaría personalizar este proceso teniendo uno de los complexTypes en mi mapa de esquema a un java.util.Map. He leído en alguna parte que JAXB "no puede hacer interfaces". No estoy seguro de si eso se aplica en este caso, pero si fuera así estaría bien con la asignación a un HashMap. Además, no necesariamente tiene que ser el tipo de complejo que se asigna a un mapa, podría ser un elemento si eso es lo que se requiere.
Controlo mi generación JAXB usando un archivo .xjb, así que estoy buscando algunos <jaxb:bindings>
para poner ahí. He intentado lo siguiente, pero no funciona:
<jaxb:bindings schemaLocation="myschema.xsd" node="/xs:schema">
<jaxb:globalBindings>
<jaxb:serializable uid="1"/>
</jaxb:globalBindings>
<jaxb:schemaBindings>
<jaxb:package name="com.myschema.client.types"/>
</jaxb:schemaBindings>
<jaxb:bindings node="//xs:complexType[@name=''MapType'']">
<jaxb:javaType name="java.util.HashMap"
parseMethod="com.myschema.common.MapConverter.parseObjectToMap"
printMethod="com.myschema.common.MapConverter.printMapToObject" />
</jaxb:bindings>
</jaxb:bindings>
Edición: he añadido más detalles sobre el enlace anterior que ya he intentado. Genera el siguiente error durante la compilación del esquema:
[jaxb] [ERROR] compiler was unable to honor this javaType customization. It is attached to a wrong place, or its inconsistent with other bindings.
<jaxb:javaType>
no funcionará porque solo se puede usar para mapear entre primitivas de esquema XML y tipos de Java . Ya que quiero mapear entre un tipo complejo y un tipo de Java, no puedo usar esto.
¿Has visto el ejemplo aquí? (Mapeo personalizado de HashMap): http://java.sun.com/javase/6/docs/api/javax/xml/bind/annotation/adapters/XmlAdapter.html
Necesito crear un XmlAdapter personalizado, me temo.
Su archivo XJC está utilizando la directiva "estándar" de tipo javaType
, que creo que se limita a convertir valores de cadena desde y hacia un tipo Java representativo. Como tal, solo es adecuado para convertir elementos simples y contenido de atributos.
La herramienta XJC proporciona una versión mejorada de javaType
, que en teoría debería ser capaz de manejar estructuras más complejas. Desafortunadamente, esto aún no se ha implementado:
https://java.net/jira/browse/JAXB-209 (sin resolver)
Por ejemplo, ser capaz de asignar un tipo de esquema a un HashMap podría ser un requisito probable para aquellos que usan un diseño / implementación guiado por un modelo. AFAICS, esto no es posible hoy. Por lo tanto, uno debe editar manualmente el código generado.
Parece que estás fuera de suerte.