2017-05-12 1 views
0

JAX-WS 웹 서비스의 Apache CXF 구현을 재정의하려고합니다. JAX-WS = When Apache CXF is installed it "steals" default JDK JAX-WS implementation, how to solve?에 따라, 저는 Provider 구현을 생성/대체하려고합니다.Tomcat의 클래스 로더 getResources 결과 순서 (webapp first)

이 구성을 사용하면 javax.xml.ws.spi.Provider가 /tomcat/lib/cxf-rt-frontend-jaxws-*.jar와 최소한 하나의 jar/tomcat/webapps/appX/WEB-INF/META-INF/services).

먼저 웹 응용 프로그램 리소스를로드하는 기본 동작에서 우리는 먼저 자신의 jar 파일을 가져올 것으로 예상했습니다. 그러나 그렇지 않습니다.

디버그 중 일부를 수행하면 getResources ("resource-name")의 Tomcat 클래스 로더 메소드가 첫 번째 요소 인/Tomcat/lib에서 열거 형을 반환하는 것으로 보입니다. WS Provider가 첫 번째 요소를 사용하고 있기 때문에 여전히 원래 CXF 구현을 사용하고 있습니다.

기본 클래스 로더는 ParallelWebappClassLoader입니다. 우리는 WebappClassLoader로 전환했지만 같은 문제가있었습니다.

그런 다음 WebappClassLoader를 확장하여 getResources 메소드를 대체하여 (/tomcat/lib/cxf-rt-frontend-jaxws-*.jar jax-ws 공급자 구현을 제거하기 위해) 클래스 로더를 작성했습니다. 이제는 일. 그러나 이것은 이것이 작동하도록하는 단지 해결책 일 뿐이며, 실제로 그렇게 할 필요는 없습니다.

그래서 ClassLoader.getResources (String name)이 어떻게 webapp 항목을 반환해야하는지에 대한 아이디어가 있습니까?

는 이미 디폴트 값이어야하지만, searchExternalFirst = "거짓은"어떤 마술 (도 아니다 "true"로 값)

답변

0

당신이 당신의 context.xml에 다음과 같이 설정 시도 가지고하지 않았다? <Loader delegate="false"/>

에 기재된
관련 문제