Spring Framework/Spring

[Spring] JAXB2 API 사용중 어노테이션을 썼지만, import가 안될 때 !!

Razelo 2021. 1. 28. 11:22

자바 객체를 xml 형태의 테이터로 바꾸려고 어노테이션을 써주었는데, 

아무리 ctrl shift o 를 눌러도 import가 안됬다. 

그래서 이상하다 싶어서 직접 import 경로를 써줬는데도 안되더라... 

 

그래서 보니까 아예 어노테이션 자체를 인식을 하지도 못했다. 

 

그래서 검색을 해보니 

JAXB2 API는 자바6 부터 자바 8까지는 지원이 되는데, 자바 10부터는 자동으로 지원이 안된다고 한다. 그래서 따로 설치해줘야 한다고 한다. 

 

그래서 porm.xml에 다음과 같이 적어주면 메이블 라이브러리에 추가가 되는 것을 확인할 수 있다. 

 

 

이렇게 써주고 난 뒤에 import 해주면 잘 작동하는 것을 확인할 수 있다. 

 

자바 6이후 버전에 기본으로 포함되어 있다고만 알고있었는데... 10이후부터는 지원이 끊긴 것을 몰라서 발생한 일이다... 

 

 

글을 다 쓰고 난 뒤에 더 진행을 하다가 에러 사항을 발견했다. 그래서 글을 수정하겠다. ㅠㅠ 

 

 

문제가 발생했다. 위에서 porm.xmp에 설정을 해주면 원래 어노테이션인식이 안되던 문제는 사라지는데,

두번째 문제가 발생했다. 어노테이션도 인식이 되는데, 막상 실행을 하면 에러가 발생한 다는 것이다. 

 

 

이렇게 내가 설정해놓은 에러 페이지에서 에러가 발생하는 것을 확인할 수 있으며

동시에 

java.lang.ClassNotFoundException: sun.misc.GC

java.lang.IllegalArgumentException: timeout < 0

org.apache.catalina.LifecycleException:  Failed to initialize component [Connector[AJP/1.3-8009]]

 

등등의 문제가 발생하는 것을 알 수 있다. 

 

그래서 검색을 하다보니 한 블로그를 발견했다. 

yyman.tistory.com/1469

 

[JSP] 28. Maven (Jaxb-runtime, activation, Jaxb Api, JSTL)을 활용한 XML 생성하기

[JSP] 28. Maven (Jaxb-runtime, activation, Jaxb Api, JSTL)을 활용한 XML 생성하기 JSP/Servlet으로도 Jaxb2와 각종 Library를 활용하여 XML을 생성할 수 있다. 일반 프로그래밍은 많이 접하였으나, XML은 잘..

yyman.tistory.com

 

이 블로그에 porm.xml 설정과 관련된 부분이 있어서 그 부분을 참고했다.

 

그래서 porm.xml에 

 <!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
 <dependency>
     <groupId>javax.servlet</groupId>
     <artifactId>servlet-api</artifactId>
     <version>2.5</version>
     <scope>provided</scope>
 </dependency>
 
 <!-- https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api -->
 <dependency>
     <groupId>javax.xml.bind</groupId>
     <artifactId>jaxb-api</artifactId>
     <version>2.3.0-b170201.1204</version>
 </dependency>
 
 <!-- https://mvnrepository.com/artifact/javax.activation/activation -->
 <dependency>
     <groupId>javax.activation</groupId>
     <artifactId>activation</artifactId>
     <version>1.1</version>
 </dependency>
 
 <!-- https://mvnrepository.com/artifact/org.glassfish.jaxb/jaxb-runtime -->
 <dependency>
     <groupId>org.glassfish.jaxb</groupId>
     <artifactId>jaxb-runtime</artifactId>
     <version>2.3.0-b170127.1453</version>
 </dependency>

 
 <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
 <dependency>
     <groupId>javax.servlet</groupId>
     <artifactId>jstl</artifactId>
     <version>1.2</version>
 </dependency>

 

위와 같은 설정을 해주었다. 

 

결과는 잘 작동했다. 

 

내가 원했던 xml로 결과물이 잘 표시되었다. 

 

 

 

그런데 한 가지 문제점은 위에 있는 xml 구문이 뭘 뜻하는 지 아직은 잘 모르겠다. 다만 저렇게 설정해주면 잘 실행된다는 것만 알 수 있었다. 

 

 

그리고 마지막으로 저 긴 코드를 모두 porm.xml에 써주어야 하나... 라고 생각하다가 저 설정들 중에서 정말 딱 필요한 것만 뽑아내기로 했다. 그래서 두번째 dependency는 무조건 필요하니까 포함하고, (이것만 있는상태로 해봤는데, 작동안함 ㅠ ) 뽑아내 보니까 

		<!-- JAXB2 API -->
 <!-- https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api -->
 		<dependency>
     		<groupId>javax.xml.bind</groupId>
     		<artifactId>jaxb-api</artifactId>
     		<version>2.3.0-b170201.1204</version>
 		</dependency>

  <!-- https://mvnrepository.com/artifact/org.glassfish.jaxb/jaxb-runtime -->
 		<dependency>
     		<groupId>org.glassfish.jaxb</groupId>
     		<artifactId>jaxb-runtime</artifactId>
     		<version>2.3.0-b170127.1453</version>
 		</dependency>

이 두개의 설정을 해주었을 때 잘 작동했다. 사실 첫번쨰 dependency는 원래 하려던 설정이라서 뭔지는 알고 있는데, 두번째에 있는 dependency는 처음 본다. 어떤걸 설정해주는 건지 잘 모르겠다. 

 

이것만 이해하면 왜 지금 에러가 발생했는 지 이해할 수 있을 것 같다.  

 

오늘 알아낼 수 있는 것은 여기까지 인 것 같고, 추가로 xml 변경과 관련해서 마샬링,언마샬링을 설명해주는 블로그들이 있던데, 나중에 참조하면 좋을 것 같다.

 

밑에 첨부해두겠다.

 

잘 설명되어 있다. 

 

tychejin.tistory.com/135

 

[JAVA] JAXB - Marshalling, UnMarshalling 사용법

JAXB 이란?  JAXB(Java Architecture for XML Binding)는 Java Object를 XML로 직렬화하고, XML을 Java Object로 역직렬화해주는 자바 API 입니다.  JDK6 ~ 9 버전은 JAXB가 내장되어 있어 라이브러리를 추가..

tychejin.tistory.com

 

반응형