오류 모음집

[Java] ERROR StatusLogger Caught java.lang.AbstractMethodError setting feature

로춘남 2020. 9. 14. 11:55
728x90
ERROR StatusLogger Caught java.lang.AbstractMethodError setting feature http://xml.org/sax/features/external-general-entities to false on DocumentBuilderFactory org.apache.xerces.jaxp.DocumentBuilderFactoryImpl@5634db55: java.lang.AbstractMethodError: javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)V
 java.lang.AbstractMethodError: javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)V
	at org.apache.logging.log4j.core.config.xml.XmlConfiguration.setFeature(XmlConfiguration.java:212)
	at org.apache.logging.log4j.core.config.xml.XmlConfiguration.disableDtdProcessing(XmlConfiguration.java:205)
	at org.apache.logging.log4j.core.config.xml.XmlConfiguration.newDocumentBuilder(XmlConfiguration.java:194)
	at org.apache.logging.log4j.core.config.xml.XmlConfiguration.<init>(XmlConfiguration.java:92)
	at org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory.getConfiguration(XmlConfigurationFactory.java:46)
	at org.apache.logging.log4j.core.config.ConfigurationFactory$Factory.getConfiguration(ConfigurationFactory.java:454)
	at org.apache.logging.log4j.core.config.ConfigurationFactory$Factory.getConfiguration(ConfigurationFactory.java:386)
	at org.apache.logging.log4j.core.config.ConfigurationFactory.getConfiguration(ConfigurationFactory.java:261)
	at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:616)
	at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:637)
	at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:231)
	at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:153)
	at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
	at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
	at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:121)
	at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:43)
	at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:46)
	at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
	at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:277)
	at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:156)
	at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132)
	at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351)
	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:301)
	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4689)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5155)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:743)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:719)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)
	at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:614)
	at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1822)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

코드를 실행하다가 에러가 나타났다. 내가 구현하고싶은 기능을 실행하는데 있어 오작동은 없었지만, 그래도 사람 마음이라는게 콘솔창에 경고라든가... 에러 메시지가 나오면 신경 쓰인다..

 

Method 에러라는데... 구글링을 해보니깐..

 

<dependency>
    <groupId>xerces</groupId>
    <artifactId>xercesImpl</artifactId>
    <version>2.11.0</version>
</dependency>

이런식으로 pom.xml에 depenecy로 xerces를 추가하면 에러 메시지가 깔끔하게 사라졌다. 아파치 관련 파서라는데..

조금 더 찾아보니깐 XML 파서의 역할은 즉, 파서(parser)는 "파싱(parsing)"을 수행하는 프로그램을 의미한다.

여기서 파싱은 어떤 주어진 문장을 분석하거나 문법적 관계를 해석하는 행위를 의미한다.

 

이를 전산학에서는 작성된 프로그램 소스를 컴파일 하는 과정에서 특정 프로그래밍 언어가 제시하는 문법을 잘 지켜서 작성하였는지를 컴파일러가 검사하는것을 의미한다.

 

XML 파서란 , XML문서를 읽고 해석하여 태그명, 속성명, 속성값 민 엘리먼트 내용을 분리시켜 주는 프로그램이라고 한다. 이는 XML문서가 잘 작성되었는지 검사하고, 특정 마크업 언어에 대해 유효한 문서인지 판단한다.

 

XML 파서의 종류로는 해석 결과에 따라 응용 프로그램에 전달해주는 방법에 따라 다음과 같이 두 종류로 나뉜다고 한다.

 

1) DOM(Document Object Model) 파서

: XML 문서를 해석한 한 후, 해석 결과를 메모리에 DOM이라는 객체 트리 구조로 생성시키는 파서. 응용 프로그램은 이 객체 트리를 네이게이션하면서, 데이터를 검색, 수정, 삭제를 할 수 있다.

 

2) SAX(Simple API for XML) 파서

: XML 문서를 해석한 동시에, 특정 이벤트를 발생시키는 파서이다. 발생된 이벤트는 이벤트 처리 핸들러를 통해 처리되고, 이벤트 처리 핸들러는 해석된 데이터를 응용 프로그램에게 전달해 준다.

 

자바 응용 프로그램이 가장 많이 사용하는 XML 파서는 아파치 그룹에서 제공하는 Xerces 파서라고 한다.

이는 DOM 파서와 SAX 파서 모두를 제공하고 있다. J2SE1.4 이후 버젼이 설치 되어 있으면 별도의 XML 파서를 설치 할 필요가 없다는데...

 

근데 나는 왜...? ㅠ 나는 1.4 이후의 버젼이 설치되어 있는데...

내가 파싱을 잘 못한것일까... 이렇게 또 하나를 배워가는 하루..

역시 몸으로 직접 확인해봐야 깨우치는것이 많다.

 

출처: m.blog.naver.com/PostView.nhn?blogId=karukaru22&logNo=140113443422&proxyReferer=https:%2F%2Fwww.google.com%2F

728x90