자바 객체를 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]]
등등의 문제가 발생하는 것을 알 수 있다.
그래서 검색을 하다보니 한 블로그를 발견했다.
이 블로그에 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 변경과 관련해서 마샬링,언마샬링을 설명해주는 블로그들이 있던데, 나중에 참조하면 좋을 것 같다.
밑에 첨부해두겠다.
잘 설명되어 있다.
'Spring Framework > Spring' 카테고리의 다른 글
[SpringBoot] java.lang.IllegalArgumentException : Mapped Statements collection does not contain value 에러 (0) | 2021.01.29 |
---|---|
[SpringBoot] target matching "[xX][mM][lL]" is not allowed 에러 발생 (2) | 2021.01.29 |
[SpringBoot] 이클립스에서 Mybatis 사용하기 (2) | 2021.01.28 |
[Spring] 스프링 파일 업로드에서 엑세스가 거부되었을 경우 (0) | 2021.01.27 |
[Spring] Error: Could not find or load main class test (9) | 2021.01.22 |