JAXB schemagen 도구를 사용하여 Java 클래스에서 XML 스키마 파일 생성

JAXB(Java™ Architecture for XML Binding) schemagen 도구를 사용하여 Java 클래스에서 XML 스키마 파일을 생성할 수 있습니다.

시작하기 전에

XML 스키마 파일에 맵핑할 Java 클래스 또는 일련의 Java 오브젝트를 식별하십시오.

이 태스크 정보

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 문서를 구문 분석하기 위해 필요로 하는 모든 정보가 있습니다.

지원된 구성 지원된 구성: wsimport, wsgen, schemagenxjc 명령행 도구는 z/OS® 플랫폼에서 지원되지 않습니다. 이 기능은 z/OS 플랫폼에서 실행 중인 WebSphere® Application Server에 제공된 어셈블리 도구에 의해 제공됩니다. 이러한 도구에 대해 자세히 학습하려면 JAX-WS 애플리케이션의 명령행 도구를 참조하십시오. sptcfg
우수 사례 우수 사례: WebSphere Application Server는 JAX-WS(Java API for XML-Based Web Services)와 JAXB(Java Architecture for XML Binding) 도구를 제공합니다. wsimport, wsgen, schemagenxjc 명령행 도구는 WebSphere Application Server Traditionalapp_server_root\bin\ 디렉토리에 있습니다. xjcschemagen 명령은 Liberty 프로파일의 app_server_root\jaxb\bin\ 디렉토리에 있습니다. 일부 경우에 WebSphere Application Server 및 JDK에서 제공된 두 가지 도구로 생성된 아티팩트는 동일한 레벨의 스펙을 지원합니다. 일반적으로 JDK 도구가 생성한 아티팩트는 부합하는 다른 런타임 환경에 이식 가능합니다. 그러나 WebSphere Application Server 환경 내에서 완벽한 통합을 하고 WebSphere Application Server에서만 지원되는 기능을 이용하려면 이 제품과 함께 제공되는 도구를 사용하는 것이 가장 좋습니다. JAX-WS 및 JAXB V2.2 도구를 활용하려면 app_server_root\bin\ 디렉토리에 있는 애플리케이션 서버와 함께 제공된 도구를 사용하십시오. bprac
지원된 구성 지원된 구성: 이 제품은 JAXB 2.2 스펙을 지원합니다. JAX-WS 2.2에는 데이터 바인딩을 위한 JAXB 2.2가 필요합니다. sptcfg

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를 호출해야 합니다.

문제점 방지 문제점 방지: schemagen 도구를 실행하면 targetNamespaces를 추출하기 위해 스키마 생성기가 패키지 정보 클래스 파일에서 @XmlSchema 어노테이션을 올바르게 읽지 못합니다. @XMLSchema 어노테이션을 사용하는 대신 다음 메소드 중 하나를 사용하십시오.
  • package-info.java 파일에 @XmlSchema를 제공하십시오. 예를 들어, 다음과 같습니다.
    schemagen sample.Address sample\package-info.java
  • @XmlType 어노테이션 네임스페이스 속성을 사용하여 네임스페이스를 지정하십시오. 예를 들어, 다음과 같습니다.
    @XmlType(namespace="http://myNameSpace")
gotcha

프로시저

  1. XML 스키마 파일을 생성하는 데 사용할 Java 소스 파일 또는 Java 클래스 파일을 찾으십시오. Java 클래스 파일에서 참조하는 모든 클래스가 클래스 경로에 있거나 -classpath/-cp 옵션을 사용하여 도구에 제공되는지 확인하십시오.
  2. JAXB 스키마 생성기인 schemagen 명령을 사용하여 XML 스키마를 생성하십시오. 이 스키마 생성기는 app_server_root\bin\ 디렉토리에 있습니다.
    [Windows]
    app_server_root\bin\schemagen.bat myObj1.java myObj2.java
    [AIX][HP-UX][Linux][Solaris]
    app_server_root/bin/schemagen.sh myObj1.java myObj2.java
    [IBM i]
    app_server_root/bin/schemagen myObj1.java myObj2.java

    매개변수 myObj1.javamyObj2.java 파일은 데이터 오브젝트를 포함하는 Java 파일의 이름입니다. myObj1.java 또는 myObj2.javaschemagen 명령으로 전달되지 않는 Java 클래스를 참조하는 경우 -cp 옵션을 사용하여 이러한 Java 클래스의 클래스 경로 위치를 제공해야 합니다.

    지정할 수 있는 이 명령 및 추가 옵션에 대해 자세히 알아보려면 schemagen 명령에 대해 읽어 보십시오.
  3. (선택사항) javax.xml.bind.annotations 패키지에서 정의되는 JAXB 프로그램 어노테이션을 사용하여 JAXB XML 스키마 맵핑을 사용자 정의하십시오.
  4. (선택사항) 새 스키마를 생성하는 대신 기존 스키마를 사용하도록 스키마 컴파일러에 표시하려면 @XmlSchema 어노테이션에서 location 특성을 구성하십시오. 예를 들어, 다음과 같습니다.
    @XmlSchema(namespace="foo")
    package foo;
    @XmlType
    class Foo {
    @XmlElement Bar zot;
    }
    @XmlSchema(namespace="bar",
    location="http://example.org/test.xsd")
    package bar;
    @XmlType
    class Bar {
    ...
    }
    <xs:schema targetNamespace="foo">
    <xs:import namespace="bar"
    schemaLocation="http://example.org/test.xsd"/>
    <xs:complexType name="foo">
    <xs:sequence>
    <xs:element name="zot" type="bar:Bar" xmlns:bar="bar"/>
    </xs:sequence>
    </xs:complex
    location="http://example.org/test.xsd"schemagen 도구에 기존 스키마 위치를 표시하고 새 스키마가 생성되지 않습니다.

결과

Java 클래스에서 XML 스키마 파일을 생성했으므로 Java 오브젝트를 XML 인스턴스 문서로 마샬링(marshalling) 및 역마샬링(unmarshalling)할 준비가 되었습니다.

문제점 방지 문제점 방지: schemagen 명령은 다른 Java 패키지에 동일한 @XMLType 이름이 정의된 여러 @XMLType 어노테이션들 간 XML 네임스페이스를 구별하지 못합니다. 이 시나리오가 발생할 때, 다음 오류가 생성됩니다.
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

다음 예에서는 JAXB 도구로 기존 Java 클래스인 Bookdata.java에서 XML 스키마 파일을 생성하는 방법을 나타냅니다.
  1. 다음 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;
        }
    
    }
  2. 명령 프롬프트를 여십시오.
  3. Bookdata.java 파일을 복사한 디렉토리에서 schemagen 스키마 생성기 도구를 실행하십시오.
    [Windows]
    app_server_root\bin\schemagen.bat Bookdata.java
    [Linux][AIX][HP-UX][Solaris]
    app_server_root/bin/schemagen.sh Bookdata.java 
    [IBM i]
    app_server_root/bin/schemagen Bookdata.java
  4. 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 참조 구현 문서를 참조하십시오.


주제 유형을 표시하는 아이콘 태스크 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxbjava2schema
파일 이름:twbs_jaxbjava2schema.html