Получение EmptyStackException при попытке разобрать XML-каталог каталога apache-commons-chain - PullRequest
0 голосов
/ 29 апреля 2019

У меня запущен Java-проект в Oracle weblogic.Мы используем apache-commons-chain.Мы периодически получаем EmptyStackException при попытке проанализировать XML.Большую часть времени XML работает.Но иногда мы получаем эту проблему.

Я пытаюсь запустить и отладить код на локальных машинах.Никогда не нашел проблему там.Вот стек журналов

java.util.EmptyStackException в org.apache.commons.collections.ArrayStack.pop (ArrayStack.java:122) в org.apache.commons.digester.Digester.endElement(Digester.java:1208) на com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement (AbstractSAXParser.java:609) на com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentPleser.(AbstractXMLDocumentParser.java:183) по адресу com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement (XMLDocumentFragmentScannerImpl.java:1343) по адресу com.sun.org.apache.ximpri..next (XMLDocumentFragmentScannerImpl.java:2786) по адресу com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next (XMLDocumentScannerImpl.java:606) по адресу com.sun.org.apache.xerces.internal.impl.X.scanDocument (XMLDocumentFragmentScannerImpl.java:510) в com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse (XML11Configuration.java:848) на com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse (XML11Configuration.java:777) на com.sun.org.apache.xerces.internal.parsers.XMLParser.parse (XMLParser.java:141) на com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse (AbstractSAXParser.java:1213) на com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl $ JAXPSAXParser.parse (SAXParserImpl.java:648) в weblogic.xml.jaxp.WebLogicXMLReader.parse (WebLogicXMLReader.java:133) в веб-журнале.commons.digester.Digester.parse (Digester.java:1827) в org.apache.commons.chain.config.ConfigParser.parse (ConfigParser.java:190)

public Catalog getCatalog() throws Exception {
        if (catalog == null) {           
 parser.parse(IAFullEngineWorkFlow.class.getClassLoader().getResource("/resource URI/"));
            catalog = CatalogFactoryBase.getInstance().getCatalog();
        }
       return catalog;
    }

В идеале мыдолжен получить объект каталога из него.Но это выдает ошибку выше.

1 Ответ

0 голосов
/ 02 мая 2019

Нашел решение.Парсер в Apache Commons не является потокобезопасным.Просто нужно использовать синхронизированный в функции getCatalog.

`

public synchronised  static Catalog getCatalog() throws Exception {
        if (catalog == null) {           
 parser.parse(SampleClass.class.getClassLoader().getResource("/resource URI/"));
            catalog = CatalogFactoryBase.getInstance().getCatalog();
        }
       return catalog;
    }
...