2012-09-05 3 views
5

런타임시 XML 구성 파일을 생성하는 데 Apache Commons-Configuration 라이브러리를 사용하는 Tomcat 5.5 웹 응용 프로그램이 있습니다. Commons-Configuration은이를 위해 javax.xml.transform JAXP API를 사용합니다.기본적으로 잘못된 구현을 사용하는 JAXP XSLT 변환기

자바 7로 업그레이드 이후 작업이 다음과 같은 오류 메시지와 함께 실패합니다

Caused by: javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found 
    at javax.xml.transform.TransformerFactory.newInstance(Unknown Source) 

이전 버전에서는 내가 대신 플랫폼의 디폴트 XSLT 구현에 의존, xalan.jar을 번들 적이 없어요.

어떤 것들은 제가 확인했습니다

  • 내 응용 프로그램의 JAR 파일, 라이브러리 항아리의, 또는 javax.xml.transform.TransformerFactory 시스템 속성이 설정되지
  • 톰캣 항아리에 (에서 확인 더 META-INF/services/javax.xml.transform.TransformerFactory 항목이 없습니다 JVisualVM을 통해 런타임)
  • 0으로 프로그램 실행 jre/lib 디렉토리

에는 jaxp.properties 파일이 없습니다은 다음 출력을 생성합니다.

JAXP: find factoryId =javax.xml.transform.TransformerFactory 
JAXP: loaded from fallback value: org.apache.xalan.processor.TransformerFactoryImpl 

이 대체 값은 어디에서 오는가? 오라클은 Xalan 트랜스 포머를 제공하지만, 1.7 이후에는 com.sun.org.apache.xalan.processor...으로 리 패키지되었습니다. 이 대체 값이 아니어야합니까?

+0

'CATALINA_HOME/lib'을 확인 했습니까? – Brad

+0

Tomcat 5.5는'$ CATALINA_HOME/lib'을 사용하지 않습니다. Afaik는 Tomcat 6 이상입니다. 나는'$ CATALINA_HOME/server','common','shared'를 체크하지 않았습니다. – Jonathan

+0

'org.apache.xalan.processor.TransformerFactoryImpl' 클래스는 이전 JDK1.4 설정에서 나왔을 수 있습니다. 그래서 여러분의 어딘가에'CLASSPATH'에 어항 xalan.jar이있을 것으로 기대하고 있습니다. – Brad

답변

8

직접 문제를 발견했습니다. Java 1.4.2에서 이전 할 때 apache-tomcat-5.5.23-compat 파일이 설치되어있는 것으로 나타났습니다. 해결책은 $CATALINA_HOME/common/endorsed 디렉토리 아래의 모든 항목 (특히 xercesImpl.jarxml-apis.jar)과 bin/jmx.jar 파일을 제거하는 것이 었습니다.

0

글래시 피 서버 V3.1에서도 동일한 문제가 발생했으며 xalan-2.7.0.jar을 $ GLASSFISH_HOME \ lib \ endorsed 디렉토리에 배치하여 문제가 해결되었습니다.