JAVA

[JAVA] org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/w3c/dom/DOMConfiguration

고구마맨 2024. 4. 30. 16:57
반응형

 기존 시스템에 모듈 추가 작업을 진행하는데 해당 에러가 발생했다. 해당 에러는 XML을 파싱하는 과정에서 발생했는데 이런 경우 보통 참조하고 있는 JAR 파일의 충돌 문제로 해당 파일 제거를 통해 해결할 수 있었다. 하지만 이번에는 서버에 직접 접근하지 못하는 이슈와 기존에 알고 있었던 파일이 아닌 다른 파일의 존재로 여러 가지 시도를 하게 되었다.

 


java.lang.NoClassDefFoundError: org/w3c/dom/DOMConfiguration 

 

위의 오류로 검색을 하면 딱히 마음에 드는 해결책을 찾지 못했었다. 참고할 수 있는 글도 많지 않아서 였는데 이게 자주 일어나는 문제는 아닌 것 같았다. 웹 화면의 일부는 아래와 같은 메세지를 표시하고 있었다.

 

보통 이런 에러를 유발하는 JAR 파일의 경우 xercesImpl.jar, xml-apis.jar ,xalan.jar 임을 알고 있어 우선 시스템이 올라간 서버에 해당 파일의 존재 유무를 확인했다.

 

해당 파일이 업무시스템에는 존재하지 않았짐나 JBOSS 기본 라이브러리 디렉토리 내부에 존재하고 있었다.(xercesImpl)

파일 삭제를 요청했으나 지우는 작업은 거절당했다. 그래서 검색하다 JBOSS 의 모듈 종속성 이란 키워드를 알게 되었고 의존성 제외 설정을 통해서 해결할 수 있지 않을까 생각이 들어 작업을 요청했다.

 

요청작업 :  jboss-deployment-structure.xml 설정파일 내부에  <exclusions> 요소를 통해서 org/w3c/dom/DOMConfiguration 의존성 제외 설정

 

하지만 동일 오류를 발생시켰다.

 

결과 : 동일 오류 발생(org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/w3c/dom/DOMConfiguration)

참고내용 : https://docs.openmaru.io/docs/jboss-eap/JBossEAP6_Module_Architecture/

 

6장. JBoss EAP 모듈 아키텍처 | OPENMARU APM

JBoss EAP 5에서는 JBoss Microcontainer를 이용한 아키텍처를 사용하고 있었다. JBoss EAP 5의 각 서비스는 POJO나 JMX MBean로 구현된 모듈로 제공되며 이것들을 Microcontainer가 로드한다. HTTP나 JMS등의 여러 가

docs.openmaru.io

 

그래서 두 번째로 org/w3c/dom/DOMConfiguration 패키지가 없는 JAR 교체를 시도했다.

(xercesImpl.jar → xercesImpl-2.10.0.jar)

 

하지만 시스템 내부 기능 테스트에서 에러가 발생했다.

 

그래서 해결 방법을 계속 찾지 못해 애를 먹다가 xml 관련 JAR를 찾아 봤다. 서버 접근 권한이 있는 분께도 요청을 드려 확인한 결과 다른 JAR 의 제거로 문제를 해결할 수 있었다.

 

파일명 : xmlbeans-2.3.0.jar

 

위 JAR 또한 마찬가지로 org/w3c/dom/DOMConfiguration 패키지가 존재했다.

 

클래스 로드 방식이 프로세스에 영향을 끼치는 것 같은데 자세한 원인은 모르겠다.

 

앞으로 참고하기 위해서 작성하며 혹시 이와 같은 문제가 발생하는 경우의 사람들을 위해서 남긴다.

 

 

 

 

반응형