2009-09-15 9 views
2

J'essaie de déterminer quels sont les bits dont j'ai besoin pour assembler un POJO JAXB à un document XOM, et vice versa. Les méthodes marshal de l'interface JAXB Marshaller prennent diverses cibles, telles que Result, mais aucune d'entre elles ne possède d'adaptateur XOM. De manière irritante, l'API XOM a une implémentation XOMResult, mais elle est protégée par un paquet, et seulement utilisée en interne.Comment marshaler un objet JAXB à XOM?

Existe-t-il une autre façon de marshaler vers/depuis XOM sans recourir à des tampons de type String ou Octet?

Répondre

0

Je ne suis pas sûr si vous êtes défavorable à l'utilisation DOM pour accomplir cela, car vous utilisez probablement XOM pour éviter DOM! Quoi qu'il en soit, en utilisant un classeur JAXB comme décrit here avec DOMConverter de XOM, vous pouvez passer de JAXB à DOM à XOM sans utiliser de chaîne ou un tampon d'octets.

Il est dommage que XOM ne dispose pas d'un utilitaire pour créer un document XOM à partir d'un SAX ContentHandler, car JAXB prend également en charge le marshaling à une instance de cet objet. XOM a un SAXConverter qui peut créer un ContentHandler à partir d'un document, mais pas l'inverse.

Voici un fil de discussion sur la liste de diffusion XOM-interest.

+0

Oui, aller de JAXB-> DOM-> XOM est ce que je suis actuellement coincé avec, mais il laisse un mauvais goût dans ma bouche. – skaffman

+0

Je comprends complètement. Peut-être est-ce une opportunité de créer une contribution à XOM en créant le convertisseur manquant? ;) – laz

1

J'ai trouvé vieux projet nux:

un http://acs.lbl.gov/software/nux//api/nux/xom/pool/XOMUtil.html

jaxbMarshal/jaxbUnmarshal utiliser DOMConverter ;-(

b http://acs.lbl.gov/software/nux/api/nux/xom/io/StaxUtil.html ... comprend également une implémentation Builder XOM qui utilise un analyseur Stax. au lieu d'un analyseur syntaxique SAX, plus une lecture d'implémentation XMLStreamReader à partir d'un document ou fragment XOM sous-jacent, ainsi que d'autres outils

StaxUtil.createXMLStreamReader (racine du noeud) Construit et renvoie une implémentation de l'analyseur d'extraction StAX XMLStreamReader qui lit à partir d'un noeud XOM sous-jacent; généralement un document ou un fragment (sous-arbre); Idéal pour la conversion efficace d'un arbre XOM en SOAP/AXIOM, JAXB 2, JiBX ou XMLBeans, par exemple lors de la conversion incrémentielle de résultats XQuery via un Unmarshaller, peut-être en combinaison avec un StreamingPathFilter.

Cela peut-il aider?