개발 이슈,해결법

[JAXB] XSD to java Code (xsd , java object변환)

난쏘공돌이 2023. 2. 9. 00:08

항상 블로그는 어렵네요. 단순한 낙서장이 되지않기를 바랍니다.

JAXB , Xjc

JAXB(Java Architecture for XML Binding)는 웹 서비스의 단순화된 개발을 위해 Java 클래스 및 XML 스키마를 매핑하는 쉽고 편리한 방법을 제공하는 Java 기술입니다.

JAXB는 본문의 글 처럼 스키마파일을 통해 java object를 생성하기도 하지만 xml 문서를 java object로 변환하는 Marshal

그리고 그 반대의 역할을 하는 Unmarshal기능도 지원합니다.

일단 JAXB는 JAVA11부터는 JDK에 포함되지 않습니다. 그리고 이 글의 목적인 xsd 변환을 도와주는 도구 xjc 역시 포함되어있지 않습니다. 

해결법

 

본문에서는 

첫번째 방법으로 JAVA 17버전 에서 IntelliJ 플러그인을 통해 동작하는 방법을 설명할 것이며,

두번째 방법으로 JAVA 17이 아닌 JAVA 1.8버전을 통해 변환하는 방법을 소개하려합니다. (intelliJ 유무 중요하지 않음)

 

첫번째 방법 (intelliJ Ultimate필요)

https://www.jetbrains.com/help/idea/generating-java-code-from-xml-schema.html

해당 글을 기반으로합니다.

1. 플러그인 설치

2. 스키마 파일 (.xsd) 준비

해당 파일을 IDE 상에서 열어주시면 되겠습니다.

이후 xsd파일이 열린 창에서 상단 메뉴 Tools → XML Actions → Generate Java Code From XML Schema using JAXB 를 선택해주세요.

3. 변환

이렇게 진행하시면 되는데 

혹 이런 문구가 뜨신다면 두번째 방법으로 진행해 주세요.

 

두번째 방법 (JDK 우회)

어떻게 보면 해결법이라고 하기 뭐하지만 그냥 JAXB가 지원되었던 자바 1.8로 잠시 내려가서 변환하는 방법입니다.

먼저 오류가 뜬 경우 해결법입니다.

intellij에서 새로운 JDK를 받고 저걸로 선택해 준 뒤, 실행하시면 변환이 완료됩니다.

결과물은

스키마 파일에 따라 다르겠지만 이런것들이 생깁니다.

혹 저런것이 생기지 않고, xsd만 덩그러니 남아있다면 무엇인가 오류가 있다는 뜻입니다. 그 경우에는 로그를 봐야하는데 이 확장을 통해서는 보기 힘듭니다. 

그래서 필요한 것이 xjc를 직접 구동시키는 것입니다.

jdk 환경변수 전환

이 과정은 기본 본인의 환경변수가 1.8보다 높을 경우 명령어로 xjc를 구동하기 위해 하는 작업입니다.

Windows에서 여러 JDK (JAVA)간에 전환하는 방법

버전 변경은 다음을 참고하여 진행했습니다.

해당 방법을 진행하는 이유는, xsd->java code 변환이 진행되지 않았을 경우 로그를 보기 위함입니다.

 

jdk를 1.8로 변경 후, xjc 명령어를 실행시켜보면

이런 옵션들이 나오는데 이걸 토대로 본인의 스키마 파일을 대상으로 명령을 실행하면

 

이런 오류 메시지들이 나옵니다.

이 메시지를 통해서 스키마 파일을 수정한 뒤, 실행시켜보면 정상적으로 java object가 생성됩니다.