Quando si cerca di utilizzare un file xml sarebbe importante associarlo ad un file xsd (conformita’ dei dati). Spesso tale xsd non e’ implementato da noi stessi e spesso manca. Ci sono varie soluzioni per ottenere (“infer”) lo schema da un file xml e una delle migliori e sicuramente il tool XmlBeans – riporto un mini HowTo
################################
mini-HowTo XMLbeans
################################
http://xmlbeans.apache.org/
Installare il tool e settare le variabili d’ambiente:
XMLBEANS_HOME – directory di installazione di xmlbeans
Creare dal file xml lo schema attraverso il tool “inst2xsd”:
inst2xsd -outPrefix <nome_file_schema> <xml_di_esempio>
Utilizzare il tool “scomp”:
scomp -out <nome_file_jar.jar> -noupa <nome_file_schema.xsd> <nome_file_config.xsdconfig>
Per ottenere un xml di esempio, utilizzare il tool “xsd2inst”:
xsd2inst -name <nome_file_xml> <nome_file_schema.xsd>
################################
Il problema nasce quando si cerca di utilizzare 2 schema con stessi elementi definiti al livello di root: il jar che utilizziamo per eseguire il parser non riesce a riconoscere le classi nonostante queste siano definite con package differenti nel file .xsdconfig che riporto sotto:
<xb:config xmlns:xb=”http://xml.apache.org/xmlbeans/2004/02/xbean/config”>
<xb:namespace>
<xb:package>x.y.z</xb:package>
</xb:namespace>
</xb:config>
Questo bug e’ riportato qui: https://issues.apache.org/jira/browse/XMLBEANS-346?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12540314
Questo problema puo’ essere(?) risolto utilizzando correttamente il file .xsdconfig:’utilizzo corretto del file xsdconfig e’ spiegato qui. Riporto le parti piu’ importanti:
<xb:config xmlns:xb=”http://xml.apache.org/xmlbeans/2004/02/xbean/config”
xmlns:ep=”http://openuri.org/easypo”>
<xb:namespace uri=”http://openuri.org/easypo”>
<xb:package>com.easypo</xb:package>
</xb:namespace>
<xb:namespace uriprefix=”http://openuri.org/eas”>
<xb:prefix>Xml</xb:prefix>
</xb:namespace>
<xb:namespace uriprefix=”http://openuri.org/easy”>
<xb:suffix>Bean</xb:suffix>
</xb:namespace>
</xb:config>
Sinceramente non ho verificato di persona se tale bug puo’ essere superato utilizzando correttamente il file .xsdconfig e sono passato ad un altra tecnologia: JAXB 2.1.
Vantaggi:
- prestazioni soprattutto su grandi mole di dati
- uso delle annotations
- jar piu’ snelli
- piu’ semplice
Anch’ esso presenta un problemino relativo al namespace ma facilmente risolvibile con un cast forzato (JAXBElement), vedi http://forums.sun.com/thread.jspa?threadID=748615