简体   繁体   中英

JAXB Unmarshalling of bad XML does not throw exception

I'm trying to unmarshal an XML string that does not match the JAXB class. I expected this to throw an exception, but instead, a new JAXB object is returned.

xmlStr (Input XML)

<urn1:RgBad
    xmlns:urn1="urn:none">
</urn1:RgBad>

Correct XML

<urn:Rg
    xmlns:urn="urn:test"

Code

(clazz = Rg.class)
    JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
    Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
    StreamSource source = new StreamSource(new StringReader(xmlStr));
    //Returns an actual Rg object, even though the source root element and namespace are different.
    (unmarshaller.unmarshal(source, clazz)).getValue();

You can try to add your schema to verify your xml file when using JAXB

try {  
  SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);  
  Schema schema = sf.newSchema(new  File( "yourSchema.xsd" ));  
  JAXBContext jc = JAXBContext.newInstance(clazz.getPackage().getName());  
  Unmarshaller u = jc.createUnmarshaller();  
  u.setSchema(schema);  
  u.setEventHandler(ehdler);  

  obj = u.unmarshal(xml);  
} catch  (JAXBException e) {
} finally  {  
}  

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM