Реализация SAXParser с зависимостью IBM Websphere - PullRequest
1 голос
/ 15 апреля 2019

Я пытаюсь получить помощь от экспертов по Java из SO по этому вопросу.Я сталкивался со старой реализацией XMLParser в долгом проекте ... Эта реализация, на мой взгляд, неверна или может быть улучшена ... Мне было интересно, если кто-то может дать указатель на то, что делать, мнение будетвысоко цениться ...

Это проект maven с pom.xml для зависимости ...

Проблема ...

enter image description here Так что в основном кто-то использовал в проекте класс SAXParser непосредственно из внутреннего JRE IBM ...

Как я могу преобразовать этот код в зависимость, свободную от WAS (Websphere Aplication Server)?

    public boolean parse(){
    boolean res = false;
    try {
        SAXParser p = new SAXParser(); // Need to replace this for better aproach
        p.setContentHandler(this); // Need to replace this for better aproach
        InputSource inputSource = new InputSource(new StringReader(source));
        if (inputSource != null){
            p.parse(inputSource); // Need to replace this for better aproach
        }
        res = true;
    } 
    catch (Exception e) {
        System.err.println("public void parse()"+e.getLocalizedMessage());
        res= false;
        e.printStackTrace();
    }
    return res;
}

ОБНОВЛЕНИЕ

Миграция прошла успешно:)

...
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
...
public boolean parse(){
    boolean res = false;
    try {
        SAXParserFactory spf = SAXParserFactory.newInstance();
        spf.setNamespaceAware(true);
        javax.xml.parsers.SAXParser saxParser = spf.newSAXParser();

        XMLReader xmlReader = saxParser.getXMLReader();
        xmlReader.setContentHandler(this);

        InputSource inputSource = new InputSource(new StringReader(source));
        if (inputSource != null){
            xmlReader.parse(inputSource);
        }
        res = true;
    } 
    catch (Exception e) {
        System.err.println("public void parse()"+e.getLocalizedMessage());
        res= false;
        e.printStackTrace();
    }
    return res;
}

1 Ответ

1 голос
/ 15 апреля 2019

Вместо явного построения реализации SAXParser вы можете запросить javax.xml.parsers.SAXParser из javax.xml.parsers.SAXParserFactory:

   SAXParserFactory spf = SAXParserFactory.newInstance();
   spf.setNamespaceAware(true);
   SAXParser saxParser = spf.newSAXParser();

Эти строки кода создаютЭкземпляр SAXParserFactory, определяемый настройкой системного свойства javax.xml.parsers.SAXParserFactory.

Это из руководства по Java для синтаксического анализа файла XML с использованием SAX .

Затем вы можете получить XMLReader от SAXParser, установить contentHandler и проанализировать xml из InputSource:

XMLReader xmlReader = saxParser.getXMLReader();
xmlReader.setContentHandler(new WhateverYouNameYourContentHandler());
xmlReader.parse(inputSource);
...