2017-02-04 10 views
0

Я пытаюсь развязать XML-строку, которая не соответствует классу JAXB. Я ожидал, что это вызовет исключение, но вместо этого будет возвращен новый объект JAXB.JAXB Unmarshalling of bad XML не генерирует исключение

xmlStr (Input XML)

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

Правильный XML

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

Код

(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(); 
+0

Вы должны добавить проверку схемы в JAXB. –

ответ

0

Вы можете попробовать добавить вашу схему, чтобы проверить файл XML при использовании 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 { 
} 
+0

Спасибо. Я надеялся, что не придется проверять схему, но я предполагал, что проверка должна быть полностью или ничего с Unmarshalling JAXB. – user994165