본문으로 바로가기

이슈

keycloak Service에서 사용하는 javax.ws.rs.core.Response 에서 에러 발생

 

에러

    에러 : The method getLocation() is undefined for the type Response

 

해결

기존 build.gradle
implementation'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
 
변경 build.gradle
implementation('org.springframework.cloud:spring-cloud-starter-netflix-eureka-client') {
     exclude group: 'com.sun.jersey'
     exclude module: 'jsr311-api'
}

원인

참고 1.

Spring Cloud Eureka 및 Jersey를 사용하는 경우 Eureka 자체가 Jersey 1.x를 사용하고 Spring Boot의 Jersey 지원이 Jersey 1을 기반으로 하기 때문에 문제가 발생할 수 있습니다. Aleksandar Stoisavljevic이 어떻게 해결 했는지 읽어보세요. 

(https://spring.io/blog/2015/12/22/this-week-in-spring-december-22-2015) 

 

참고 2.

Jersey RESTful 웹 서비스 2.x 프레임워크는 JAX-RS API에 대한 지원을 제공하고 JAX-RS(JSR 311 & JSR 339 & JSR 370) 참조 구현 역할을 하는 Java로 RESTful 웹 서비스를 개발하기 위한 오픈 소스, 프로덕션 품질, 프레임워크입니다. .

(https://eclipse-ee4j.github.io/jersey/)

 

최종 원인

즉 Eureka 자체는 Jersey1을 사용하는데 스프링부트에선 Jersey2를 사용해서 충돌이 나는 것 같다. 

exclude jsr311-api 를 사용해서

SptringBoot에서 JAX-RS 2.x를 사용하고 Eureka 클라이언트는 JAX-RS1.x 를 사용하도록 구현하여 해결한다.