JAXB schemagen 도구를 사용하여 Java 클래스에서 XML 스키마 파일 생성
JAXB(Java™ Architecture for XML Binding) schemagen 도구를 사용하여 Java 클래스에서 XML 스키마 파일을 생성할 수 있습니다.
시작하기 전에
이 태스크 정보
JAXB API 및 도구를 사용하여 Java 클래스와 XML 스키마 간 맵핑을 설정하십시오. XML 스키마 문서에서는 XML 문서에 있는 데이터 요소 및 관계에 대해 설명합니다. 데이터 맵핑 또는 바인딩이 존재하면 XML 문서를 Java 오브젝트로(부터) 변환할 수 있습니다. 이제 데이터 구조를 이해하지 못해도 XML 문서에 저장된 데이터에 액세스할 수 있습니다.
기존 JavaBeans 또는 엔터프라이즈 Bean부터 시작하는 상향식 개발 접근법을 사용하여 웹 서비스를 개발하려면 wsgen 도구를 사용하여 JAX-WS(Java API for XML-Based Web Services) 애플리케이션에 대한 아티팩트를 생성하십시오. 애플리케이션의 Java 아티팩트가 생성된 후에는 JAXB 스키마 생성기인 schemagen 명령행 도구를 사용하여 Java 애플리케이션의 데이터 요소를 나타내는 XML 스키마 문서를 기존 Java 애플리케이션에서 작성할 수 있습니다. JAXB 스키마 생성기는 Java 소스 파일 또는 클래스 파일을 처리합니다. Java 클래스 어노테이션은 기존 Java 클래스에서 생성된 스키마 컴포넌트로의 기본 맵핑을 사용자 정의하는 기능을 제공합니다. 어노테이션이 있는 Java 클래스 파일과 함께 XML 스키마 파일에는 JAXB 런타임이 마샬링(marshalling) 및 역마샬링(unmarshalling)할 XML 문서를 구문 분석하기 위해 필요로 하는 모든 정보가 있습니다.
JAXB 스키마 생성자인 schemagen 명령행 도구를 사용하여 Java 애플리케이션의 데이터 요소를 나타내는 기존 Java 애플리케이션에서 XML 스키마 문서를 작성할 수 있습니다. JAXB 스키마 생성기는 Java 소스 파일 또는 클래스 파일을 처리합니다. Java 클래스 어노테이션은 기존 Java 클래스에서 생성된 스키마 컴포넌트로의 기본 맵핑을 사용자 정의하는 기능을 제공합니다. 어노테이션이 있는 Java 클래스 파일과 함께 XML 스키마 파일에는 JAXB 런타임이 마샬링(marshalling) 및 역마샬링(unmarshalling)할 XML 문서를 구문 분석하기 위해 필요로 하는 모든 정보가 있습니다.



JAXB는 새 스키마를 자동으로 생성하지 않도록 schemagen 스키마 생성기를 구성하는 데 사용할 수 있는 컴파일 지원을 제공합니다.이 기능은 W3C(World Wide Web Consortium), XML 스키마, WSDL(Web Services Description Language) 또는 WS-Addressing과 같은 공통 스키마를 사용 중이며 참조된 특정 패키지에 대해 새 스키마가 생성되지 않도록 하려는 경우에 유용합니다. @XmlSchema 어노테이션의 location 속성은 schemagen 생성기가 새 스키마를 생성하는 대신 기존 스키마의 URI를 참조하도록 합니다.
명령행에서 schemagen 도구를 사용하는 것 외에도 Ant 빌드 환경에서 이 JAXB 도구를 호출할 수 있습니다. Ant 빌드 환경에서 com.sun.tools.jxc.SchemaGenTask Ant 태스크를 사용하여 schemagen 스키마 생성기 도구를 호출하십시오. 적절하게 작동하려면, 이 Ant 태스크는 ws_ant 스크립트를 사용하여 Ant를 호출해야 합니다.

- package-info.java 파일에 @XmlSchema를 제공하십시오. 예를 들어, 다음과 같습니다.
schemagen sample.Address sample\package-info.java
- @XmlType 어노테이션 네임스페이스 속성을 사용하여 네임스페이스를 지정하십시오. 예를 들어,
다음과 같습니다.
@XmlType(namespace="http://myNameSpace")
프로시저
결과
Java 클래스에서 XML 스키마 파일을 생성했으므로 Java 오브젝트를 XML 인스턴스 문서로 마샬링(marshalling) 및 역마샬링(unmarshalling)할 준비가 되었습니다.

Error: Two classes have the same XML type name ....
Use @XmlType.name and @XmlType.namespace to assign different names to them...
이 오류는 동일한 이름을 가지고 있는 클래스 이름 또는 @XMLType.name 값을 가지고 있는 것을 나타내지만, 다양한 Java
패키지 내에 존재합니다. 이 오류를 방지하려면, XML 유형을 분간하기 위해 @XML.Type.namespace 클래스를 기존 @XMLType 어노테이션에
추가하십시오. gotcha예
- 다음 Bookdata.java 파일을 임시 디렉토리에 복사하십시오.
package generated; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; import javax.xml.datatype.XMLGregorianCalendar; @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "bookdata", propOrder = { "author", "title", "genre", "price", "publishDate", "description" }) public class Bookdata { @XmlElement(required = true) protected String author; @XmlElement(required = true) protected String title; @XmlElement(required = true) protected String genre; protected float price; @XmlElement(name = "publish_date", required = true) protected XMLGregorianCalendar publishDate; @XmlElement(required = true) protected String description; @XmlAttribute protected String id; public String getAuthor() { return author; } public void setAuthor(String value) { this.author = value; } public String getTitle() { return title; } public void setTitle(String value) { this.title = value; } public String getGenre() { return genre; } public void setGenre(String value) { this.genre = value; } public float getPrice() { return price; } public void setPrice(float value) { this.price = value; } public XMLGregorianCalendar getPublishDate() { return publishDate; } public void setPublishDate(XMLGregorianCalendar value) { this.publishDate = value; } public String getDescription() { return description; } public void setDescription(String value) { this.description = value; } public String getId() { return id; } public void setId(String value) { this.id = value; } }
- 명령 프롬프트를 여십시오.
- Bookdata.java 파일을 복사한 디렉토리에서 schemagen 스키마 생성기 도구를 실행하십시오.
app_server_root\bin\schemagen.bat Bookdata.java
app_server_root/bin/schemagen.sh Bookdata.java
app_server_root/bin/schemagen Bookdata.java
- XML 스키마 파일 schema1.xsd가 생성됩니다.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:complexType name="bookdata"> <xs:sequence> <xs:element name="author" type="xs:string"/> <xs:element name="title" type="xs:string"/> <xs:element name="genre" type="xs:string"/> <xs:element name="price" type="xs:float"/> <xs:element name="publish_date" type="xs:anySimpleType"/> <xs:element name="description" type="xs:string"/> </xs:sequence> <xs:attribute name="id" type="xs:string"/> </xs:complexType> </xs:schema>
schemagen 명령에 대한 추가 정보는 JAXB 참조 구현 문서를 참조하십시오.