2017-01-03 1 views
0

우리 응용 프로그램에서 우리는 WSDL 서비스 호출을합니다 ("SomeService"라고합시다). JBoss 6.x 및 JDK1.8을 사용합니다 (테스트 환경). 우리의 응용 프로그램은 또한 다른 서비스에 대한 CXF와의 종속성이 있습니다. "SomeService"는 "CXF"대신 표준 JAXWS를 통해 호출되어야합니다. 기본적으로 c all은 CXF를 통해 라우팅되므로 정책 문제가 발생합니다. 따라서 아래에 나와있는 해결책을 따랐습니다.JBoss 6.x에서 java.lang.ClassNotFoundException을 throw하는 중 : com.sun.xml.internal.ws.spi.ProviderImpl

JAX-WS = When Apache CXF is installed it "steals" default JDK JAX-WS implementation, how to solve?.

if (previousDelegate.getClass().getName().contains("cxf")) { 
     ServiceDelegate serviceDelegate = ((Provider) Class.forName("com.sun.xml.internal.ws.spi.ProviderImpl").newInstance()) 
      .createServiceDelegate(SomeService.WSDL_LOCATION, SomeService.SERVICE_NAME, service.getClass()); 

     delegateField.set(service, serviceDelegate); 
} 

이 변경 내 로컬 환경 (내가 + JDK 1.8 톰캣 8을 사용하고 있습니다)에 나를 위해 잘 작동 :

나는 내 코드에서 다음과 같이 변경했다. 테스트 플랫폼 (JBoss 6.x + JDK 1.8)에 코드를 배포했습니다. 기능을 테스트하는 동안 다음 오류가 표시됩니다.

java.lang.ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl from [Module "deployment.MyAPP.war:main" from Service Module Loader] 

이 오류의 원인을 모릅니다. 누구도 그것에 대해 단서가 있습니까? JBoss 서버를 추가로 변경해야합니까? "com.sun.xml.internal.ws.spi.ProviderImpl"은 표준 클래스이며 JDK1.8에서 사용할 수 있으므로 JBoss 서버가 JDK1을 가리키고 있기 때문에 위의 오류가 발생하는 이유가 없습니다. 8.

귀하의 도움에 감사드립니다.

답변

0
  • 응용 프로그램 또는 응용 프로그램 서버의 클래스로드 문제와 같습니다.

  • ClassNotFoundException은 클래스가 처음 참조되고 클래스 로더가 클래스를로드하려고 시도 할 때 발생합니다. 다음에 클래스가 참조 될 때, 클래스 로더는 캐시되지 않았고, 찾을 수 없으며 NoClassDefFoundError를 던집니다.

  • 올바르게 패키지되지 않은 클래스 또는 다른 클래스 로더 설정으로 인해 ClassNotFoundException이 발생하지 않는지 확인하십시오. 또한 클래스가 처음 참조 될 때 ClassNotFoundException이 발생하지 않도록하십시오.

  • JBoss 경로에 심볼릭 링크가 있는지 확인하십시오. 그러면 응용 프로그램에 배포 한 클래스가 표시되고 com.sun.xml.internal.ws.spi.ProviderImpl 또는 관련 클래스가 배포되어 있는지 확인할 수 있습니다. 이 클래스는이 디렉토리에 응용 프로그램 서버와 함께 제공되며로드 된 유일한 위치 여야한다고 생각합니다.

    SRC/제이 보스 AS/타사/일 - 잭스 - WS/lib 디렉토리/잭스 - WS-rt.jar이

  • 나는 "classLoader가이 도메인에 연결되지 않은 메시지를 찾을 수있는 유일한 참조 (아마 배포 취소?) 클래스 "

  • 사용자 정의 JAX-WS 구현을 사용하고 JBossWS CXF (EAP 6.x와 함께 제공되는 지원되는 JAX-WS 라이브러리)를 사용하지 않으려면 먼저 배포본의 JBossWS

  • 일단 작업을 완료하면 JA를 나타내는 JDK 클래스를 노출해야합니다 X-WS 및 SAAJ 구현

  • 배포에 sun.internal.saaj 및 sun.internal.ws 모듈 종속성을 추가했는지 확인하십시오.

-

아누 프

관련 문제