본문 바로가기

WAS/JBoss

[JBoss,WildFly] org.apache.xml.dtm.ref.DTMManagerDefault cannot be cast to org.apache.xml.dtm.DTMManager

반응형

세상에는 여러 WAS가 있지만 각각 WAS별로 ClassLoader의 loading순서가 다르다.

 

어떤 WAS는 WAS library, Domain library, WebApp library로 구분되는경우도 있고,

어떤 WAS는 WAS library, WebApp library로 구분되는 경우도 있다.

 

따라서 만약 was library가 우선적으로 불러와지는데, 내 webapp에서 사용하는 library 버전과 was library에 들어가있는 library의 버전이 다르다면 인터페이스가 달라질 수 있기 때문에 문제가 발생한다.

 

jboss는 너무 친절해서 무슨 많이 사용되는 라이브러리의 경우 내장으로 다 가지고 있다.

가지고만 있으면 상관없는데 이게 기본적으로 내가만든 webapp이 deploy될 때 우선적으로 적용된다.

 

java.lang.ClassCastException: org.apache.xml.dtm.ref.DTMManagerDefault cannot be cast to org.apache.xml.dtm.DTMManager는 jboss에서 적용한 xalan버전과 내가 사용한 xalan버전이 달라서 발생한다.

 

WEB-INF/jboss-deployment-structure.xml에서 xalan을 제외시키거나,

내 webapp의 WEB-INF/lib에서 xalan을 제거해야한다.

 

<?xml version="1.0" encoding="UTF-*"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
    <deployment>
        <exclusions>
            <module name="org.apache.xalan" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

다른 모듈들은 jboss home 디렉토리의 modules 폴더 안에 들어가면 찾아볼 수 있다.

 

 

JBoss가 까다로운게, weblogic이나, jeus는 설정파일한줄로

WEB-INF의 library와 class들을 우선적으로 적용 할지 안할지 설정할 수 있다.

 

그런데 뭐 고객님께서 JBoss쓰신다는데 어쩌겠습니까?

하...

반응형