Sto tentando di eseguire la convalida xml. Mi viene data una lista di schemi in fase di esecuzione (possibilmente racchiusa in un barattolo). La convalida passa o fallisce in base all'ordine in cui fornisco gli schemi a SchemaFactory.Convalida XML con schemi di caricamento in fase di esecuzione, errore in base all'ordine dello schema
Ecco quello che sto facendo:
private void validateXml(String xml, List<URI> schemas){
Source[] source = new StreamSource[schemas.size()];
int i=0;
for (URI f : schemas){
source[i++] = new StreamSource(f.openStream());
}
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NA_URI);
sf.setResourceResolver(new MyClassPathResourceResolver());
Schema schema = schemaFactory.newSchema(source);
Validator validator = schema.newValidator();
validator.validate(new StreamSource(new ByteArrayInputStream(xml.getBytes()));
di nuovo, questa non riesce se il set passata di schema non iniziare con lo schema a cui l'elemento principale delle referrs xml. C'è una soluzione a questo o sto facendo qualcosa di sbagliato?
Puoi pubblicare gli schemi e XML da qualche parte? – davidfmatheson
@davidfmatheson Sfortunatamente non è possibile, posso dire che è un insieme di schemi, lo schema radice e un secondo schema che consente la sostituzione del corpo del primo schema con un tag diverso. –