이슈
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 를 사용하도록 구현하여 해결한다.
'JAVA > JAVA' 카테고리의 다른 글
자바 jdk 버전 매칭표 (0) | 2023.06.05 |
---|---|
[JAVA] 리눅스 자바 설치 위치 찾는 방법 (how to find real installed java path) (0) | 2023.02.05 |
[Error] Unrecognized field "xml 필드명" (0) | 2023.01.18 |
[JAVA] JsonIgnore, JsonProperty(READ_ONLY) 차이 (0) | 2022.12.26 |
[JAVA][면접 질문] StringBuilder, StringBuffer 의 차이 (0) | 2022.04.14 |