java validation jaxb dtd

java - Cómo deshabilitar la recuperación de DTD utilizando JAXB2.0



validation (4)

A continuación se muestra un código de ejemplo que muestra cómo obtener una implementación JAXB (JSR-222) para usar su analizador SAX:

import java.io.FileReader; import javax.xml.XMLConstants; import javax.xml.bind.JAXBContext; import javax.xml.bind.Unmarshaller; import javax.xml.parsers.SAXParserFactory; import javax.xml.transform.sax.SAXSource; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; public class Demo { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(Foo.class); SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); XMLReader xmlReader = spf.newSAXParser().getXMLReader(); InputSource inputSource = new InputSource(new FileReader("input.xml")); SAXSource source = new SAXSource(xmlReader, inputSource); Unmarshaller unmarshaller = jc.createUnmarshaller(); Foo foo = (Foo) unmarshaller.unmarshal(source); System.out.println(foo.getValue()); } }

Estoy tratando de usar JAXB para desempaquetar algunos XML que usé xjc para crear en primer lugar. No quiero hacer ninguna validación en el desmedido, pero a pesar de que he deshabilitado la validación de acuerdo con la documentación de JAXB con u.setSchema(null); , pero esto no ha evitado que se FileNotFoundException una FileNotFoundException cuando intenta ejecutarse y no puede encontrar el esquema.

JAXBContext jc = JAXBContext.newInstance("blast"); Unmarshaller u = jc.createUnmarshaller(); u.setSchema(null); return u.unmarshal(blast)

He visto preguntas similares para deshabilitar el análisis de SAX de la validación configurando la propiedad apache http://apache.org/xml/features/validation/schema en false , pero no puedo hacer que el Unmarshaller use mi propio analizador sax.




Sobre la base de las respuestas de @ blaise-doughan y @aerobiotic, aquí hay una solución que funcionó para mí:

import java.io.FileReader; import javax.xml.XMLConstants; import javax.xml.bind.JAXBContext; import javax.xml.bind.Unmarshaller; import javax.xml.parsers.SAXParserFactory; import javax.xml.transform.sax.SAXSource; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; public class Demo2 { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(MyBean.class); SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); spf.setFeature("http://xml.org/sax/features/validation", false); XMLReader xmlReader = spf.newSAXParser().getXMLReader(); InputSource inputSource = new InputSource( new FileReader("myfile.xml")); SAXSource source = new SAXSource(xmlReader, inputSource); Unmarshaller unmarshaller = jc.createUnmarshaller(); MyBean foo = (MyBean) unmarshaller.unmarshal(source); } }