Tengo un esquema XML existente que contiene un tipo que me gustaría asignar a un mapa de Java de algún tipo utilizando JAXB. Mi proceso de compilación toma el esquema y crea los beans. Me gustaría personalizar este proceso al tener uno de los complexTypes en mi mapa de esquema a java.util.Map. Leí en alguna parte que JAXB "no puede hacer interfaces". No estoy seguro de si eso se aplica en este caso, pero de ser así estaría bien con la asignación a un HashMap. Además, no necesariamente tiene que ser el complexType que se asigna a un mapa, podría ser un elemento si eso es lo que se requiere.¿Es posible usar JAXB para mapear de un esquema a java.util.Map?
Controlo mi generación JAXB usando un archivo .xjb, así que estoy buscando <jaxb:bindings>
para poner allí. 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>
Editar: He añadido más detalle en lo anterior vinculante que ya he intentado. Se 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á, ya que sólo se puede utilizar para mapping between XML Schema primitives and Java types. Como quiero hacer un mapa entre un tipo complejo y uno de Java, no puedo usar esto.
Su enfoque '.xjb' es el correcto, y debería funcionar. ¿XJC simplemente lo ignora o genera algo incorrecto? – skaffman
Usando el enfoque .xjb anterior, obtengo el siguiente error en mi compilación jaxb: El compilador [jaxb] [ERROR] no pudo respetar esta personalización de javaType. Se adjunta a un lugar equivocado o es incompatible con otras vinculaciones. – Zach