JAXB 컨텍스트 팩토리 초기화 클래스 확인

이 규칙은 WebSphere Application Server V7.0 이전 버전에서 마이그레이션할 때 발생할 수 있는 JAXB(Java Architecture for XML Binding) 초기화 클래스의 변경 및 충돌과 관련이 있습니다. 애플리케이션에서 문제를 일으킬 수 있는 JAXB 마이그레이션 시나리오는 두 가지가 있습니다. 첫 번째는 웹 서비스용 WebSphere 6.1 기능팩에서 마이그레이션된 애플리케이션과 관련이 있습니다. 두 번째 시나리오는 JAXB 구현을 패키지하고 WebSphere V7.0 이상으로 마이그레이션된 애플리케이션과 관련이 있습니다.

WebSphere V7.0에서는 JAXB 2.1이 Java 6 런타임의 일부로 제공됩니다. V7.0 이전에서는 웹 서비스용 WebSphere 6.1 기능팩에서 JAXB 2.1 또는 2.2(V8.0)에서 사용한 것과 다른 초기화 클래스를 사용한 JAXB 2.0을 제공했습니다. 이전의 초기화 클래스를 사용하도록 애플리케이션에서 지정하면 애플리케이션이 실행될 때 '클래스를 찾을 수 없음' 예외가 발생할 수 있습니다. javax.xml.bind.context.factory 초기화 특성을 사용하여 초기화 클래스를 정의할 수 있습니다. 이전의 초기화 클래스는 com.sun.xml.bind.ContextFactory입니다. javax.xml.bind.context.factory 특성에 이전 클래스 이름이 설정되어 있는 경우에는 Java 6와 함께 사용 가능한 JAXB 라이브러리를 사용할 때 java.lang.ClassNotFoundException 예외가 발생합니다.

이 규칙은 JAXBContext를 얻기 위해 사용된 javax.xml.bind.JAXBContext.newInstance 메소드를 스캔합니다. JAXB를 사용하는 경우에는 이전 컨텍스트 팩토리를 사용하기 위해 애플리케이션을 확인해야 합니다. 또한, 이 규칙은 문자열 리터럴 Java 코드에서 "com.sun.xml.bind.ContextFactory" 또는 "com.sun.xml.bind.DefaultJAXBContextImpl"을 발견하지만, 이러한 값이 주로 설정되는 특성 파일을 스캔하지는 않습니다. 이러한 값은 Java 시스템 특성에서 설정할 수도 있습니다.

일반적으로 JAXB 특성은 jaxb.properties 파일에서 로드합니다. 이전 컨텍스트 팩토리를 정의했는지 판별하려면 애플리케이션 특성 파일을 수동으로 스캔하십시오.

Eclipse에서 특성 파일을 스캔하려면 검색 > 파일 ...을 선택하십시오. 포함하는 텍스트 필드에 com.sun.xml.bind.ContextFactory를 입력하십시오. 파일 이름 패턴 필드에 *.properties를 입력하십시오. com.sun.xml.bind.DefaultJAXBContextImpl 문자열을 반복해서 검색하십시오.

WebSphere V7 또는 V8JAXB에서 JAXB를 사용 중인 경우, javax.xml.bind.context.factory 특성을 설정하지 않으면 기본 초기화 클래스가 com.ibm.xml.xlxp2.jaxb.JAXBContextFactory가 됩니다.

두 번째 시나리오에서는 V7 이전에서 애플리케이션의 일부로 JAXB 구현을 패키지한 고객이 WebSphere V7.0 이상으로 마이그레이션할 때 앞서 설명한 문제나 동작 변경을 경험할 수 있습니다. 이러한 문제는 애플리케이션과 함께 제공된 JAXB 구현 대신 Java 런타임의 일부로 제공된 JAXB 2.1 또는 2.2를 로드했을 때 발생합니다. Enabling a third-party JAX-WS application in WebSphere Application Server V7 기사에는 JAXB 구현을 계속 사용할 경우에 클래스 로더 문제를 해결할 수 있는 방법이 설명되어 있습니다.

추가 정보는 다음 참조를 확인하십시오.