Sto sviluppando un'applicazione che utilizza OSGi (piattaforma Equinox) e uno dei bundle deve analizzare i file XML. Finora l'ho implementato con SAX (javax.xml.parsers.SAXParserFactory) e vorrei recuperare SAXParserFactory dalla piattaforma.Utilizzo dell'implementazione del parser XML come servizio OSGi
Ho visto lo standard OSGi fornisce un XMLParserActivator per consentire alle implementazioni JAXP di registrarsi (http://www.osgi.org/javadoc/r4v41/org/osgi/util/xml/XMLParserActivator.html), quindi suppongo che ci debbano essere alcuni pacchetti che offrono SAXParserFactory come servizio.
Tuttavia, non sono riuscito a capire quale bundle aggiungere come dipendenza per trovare un servizio che offre SAXParserFactory. Io cerco di recuperare un riferimento al servizio utilizzando
context.getServiceReferences(SAXParserFactory.class.getName(), "(&(parser.namespaceAware=true)(parser.validating=true))")
Dato che parsing XML è una cosa piuttosto comune da fare, suppongo che ci sono implementazioni disponibili, o altri mezzi per ottenere un servizio di parser XML dalla piattaforma.
Qualsiasi aiuto sarebbe molto gradito!
Ciao, io non sono sicuro con OSGi, ma perché non utilizzare lo stack XML in bundle con il JRE? – ATorras
Ciao, sì lo è, ma il meccanismo del classloader OSGi differisce - e quindi chiamare SAXParserFactory.newInstance() può dare problemi, dal momento che il meccanismo del caricatore JAXP si aspetta di trovare il parser nel threadloader del thread corrente e che potrebbe non essere necessariamente il caso . –