Как проверить XML с помощью XSD InputStream с помощью oracle.xml.parser.v2.DOMParser - PullRequest
2 голосов
/ 06 декабря 2010

Я пытаюсь проверить файл XML по документу XSD.Есть два способа, которыми я занимаюсь.

  1. XML и XSD - это файлы

  2. 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, что он подразумевает, говоря«неверный вывод из базового типа»?

Пожалуйста, помогите мне понять, что пошло не так во втором случае. Любые быстрые ответы высоко ценятся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...