Я пытаюсь проверить файл XML по документу XSD.Есть два способа, которыми я занимаюсь.
XML и XSD - это файлы
XML - это файл, а XSD - это поток
В случае XML и XSD это файлы,
validateXML(xmlFile, xsdFile)
{
m_domParser = new DOMParser();
String url = "file:" + new File(xml).getAbsolutePath();
String xsdUrl = "file:" + new File(xsd).getAbsolutePath();
try
{
m_domParser.setValidationMode(XMLParser.SCHEMA_VALIDATION);
m_domParser.setXMLSchema(xsd);
Validator handler = new Validator();
m_domParser.setErrorHandler(handler);
m_domParser.parse(url);
m_xmlDoc = m_domParser.getDocument();
//determine what kinda utility requested
}
}
Работает нормально и корректно проверяется.Вот код, который я написал для проверки с использованием информации XSD в качестве потока
import org.xml.sax.InputSource;
import oracle.xml.parser.v2.DOMParser;
validateXML(String xmlFile, InputStream is)
Reader reader;
try {
m_domParser = new DOMParser();
m_domParser.setValidationMode(XMLParser.SCHEMA_VALIDATION);
//get the XMLSchema from the input stream
XSDBuilder builder = null;
XMLSchema schema = null;
builder = new XSDBuilder();
Reader reader = new InputStreamReader(is,"UTF-8");
InputSource iSource = new InputSource(reader);
if(iSource != null) {
iSource.setEncoding("UTF-8");
schema = builder.build(iSource); //NOTE
}
m_domParser.setXMLSchema(schema);
Validator handler = new Validator();
m_domParser.setErrorHandler(handler);
//get the url for the xml file
String url = "file:" + new File(xmlFile).getAbsolutePath();
m_domParser.parse(url);
}
, но в комментарии NOTE (schema = builder.build (iSource);) во время сборки выдает исключение "недопустимая деривация из базового типа «отсутствует деривация ».
Поток XSD генерируется из того же файла xsd, почему он терпит неудачу во-вторых. Пока строится XMLSchema, что он подразумевает, говоря«неверный вывод из базового типа»?
Пожалуйста, помогите мне понять, что пошло не так во втором случае. Любые быстрые ответы высоко ценятся.