Ho uno schema XML esistente che contiene un tipo che vorrei mappare a una mappa Java di qualche tipo usando JAXB. Il mio processo di compilazione prende lo schema e crea i bean. Vorrei personalizzare questo processo avendo uno dei complessiTipi nel mio schema mappare su una java.util.Map. Ho letto da qualche parte che JAXB "non può fare interfacce". Non sono sicuro che ciò si applichi in questo caso, ma se così fosse, mi piacerebbe farlo mappare ad una HashMap. Inoltre, non necessariamente deve essere il complexType che si associa a una mappa, potrebbe essere un elemento se è ciò che è richiesto.È possibile utilizzare JAXB per mappare da uno schema a un java.util.Map?
Controllo la mia generazione JAXB utilizzando un file .xjb, quindi sto cercando un po 'di <jaxb:bindings>
da inserire. Ho provato quanto segue, ma non funziona:
<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>
Edit: ho aggiunto ulteriori dettagli sulla sopra vincolante che ho già provato. Esso genera il seguente errore durante la compilazione dello schema:
[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>
non funzionerà, perché può essere utilizzato solo per mapping between XML Schema primitives and Java types. Dal momento che voglio mappare tra un tipo complesso e un tipo Java, non posso utilizzarlo.
L'approccio '.xjb' è corretto e dovrebbe funzionare. XJC lo ignora o genera la cosa sbagliata? – skaffman
Utilizzando l'approccio .xjb sopra riportato, ottengo il seguente errore nella mia compilazione jaxb: [jaxb] Il compilatore [ERROR] non è stato in grado di onorare questa personalizzazione javaType. È collegato a un posto sbagliato o è incoerente con altri attacchi. – Zach