본문 바로가기

Development/Diary

[개발 일기] java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter

String token = Jwts.builder()
                .setClaims(claims)
                .setIssuedAt(now)
                .setExpiration(new Date(now.getTime() + tokenValidMillisecond))
                .signWith(SignatureAlgorithm.HS256, secretKey) // 암호화 알고리즘, secret 값 세팅
                .compact();

이 코드의 signWith() 에서 아래 에러가 발생했다.

java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter

해결 방법

아래 의존성 추가하기

Maven은

<dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.1</version>
    </dependency>

 

Gradle은

implementation 'javax.xml.bind:jaxb-api:2.3.1'

발생 이유?

자바 11 이상에서는 JAXB (Java Architecture for XML Binding)가 JDK에서 제거되었습니다 (JEP 320에 따라 다른 JEE 관련 모듈과 함께). 이 때문에 프로젝트에 별도의 라이브러리로 추가해야 합니다.

  • JEE (Java Platform, Enterprise Edition): 엔터프라이즈 분야에서 자바 기술을 활용하기 위한 표준 규격 집합
  • JEP (JDK Enhancement Proposal): 자바 개발 팀에서 제안하는 JDK 개선 사항

참조