parse - xml to java object jaxb online
¿Alguna solución alternativa a Xml Unmarshalling Error en Java-8?:"Secure-processing org.xml.sax.SAXNotRecognizedException" (1)
Nota: Este error ya se ha discutido aquí y también se han sugerido varias soluciones para deshacerse de jar que entra en conflicto con la implementación predeterminada de java-8.
Mi pregunta es una extensión de ese problema.
En aras de la completitud, aquí está la stacktrace a la que también me enfrento, cuando ejecuto el código con java-8:
Feb 29, 2016 12:06:41 PM com.sun.xml.internal.bind.v2.util.XmlFactory createParserFactory
SEVERE: null
org.xml.sax.SAXNotRecognizedException: http://javax.xml.XMLConstants/feature/secure-processing
at org.apache.xerces.parsers.AbstractSAXParser.setFeature(AbstractSAXParser.java:1487)
at org.apache.xerces.jaxp.SAXParserImpl.setFeatures(SAXParserImpl.java:145)
at org.apache.xerces.jaxp.SAXParserImpl.<init>(SAXParserImpl.java:128)
at org.apache.xerces.jaxp.SAXParserFactoryImpl.newSAXParserImpl(SAXParserFactoryImpl.java:112)
at org.apache.xerces.jaxp.SAXParserFactoryImpl.setFeature(SAXParserFactoryImpl.java:140)
at com.sun.xml.internal.bind.v2.util.XmlFactory.createParserFactory(XmlFactory.java:121)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.getXMLReader(UnmarshallerImpl.java:139)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:276)
Para demostrar que el / los jar (s) en conflicto son realmente el problema (como se describe en el enlace compartido anteriormente), saqué el código relevante en un proyecto diferente y ejecuté el código usando java-8 (es decir, sin ningún error) número mínimo de jarras Hasta aquí todo bien.
Y ahora la consulta:
En mi caso, mi proyecto heredado usa aproximadamente 2-3 jarrones conflictivos conocidos que se usan por varias razones. Sin embargo, existe este nuevo módulo que utiliza jaxb dirigido por anotación para el procesamiento de oxm.
El problema es : no puedo deshacerme de esos archivos antiguos y conflictivos, ya que eso hace que el 10% de la base de código no sea compilable. Sin embargo, al mismo tiempo, no deseo deshacerme de la implementación de jaxb / oxm en el nuevo módulo también.
¿Hay alguna forma de que de alguna manera pueda decirle a JVM que ignore los archivos antiguos y que use la implementación predeterminada que se envía con java-8 cuando la ejecución del código pasa por este nuevo módulo?
Un enfoque alternativo podría ser utilizar el analizador StAX para obtener el XML como un XMLStreamReader
y luego JAXB desempaquetar eso.
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(reader);
unmarshaller.unmarshal(xmlStreamReader);