CyStack logo
  • Sản phẩm & Dịch vụ
  • Giải pháp
  • Bảng giá
  • Công ty
  • Tài liệu
Vi

vi

Trang chủHướng dẫnCách tạo XSD từ Java Class
Java

Cách tạo XSD từ Java Class

CyStack blog 3 phút để đọc
CyStack blog12/09/2025
Locker Avatar

Bao Tran

Web Developer

Locker logo social
Reading Time: 3 minutes

Hôm nay chúng ta sẽ cùng tìm hiểu ví dụ về jaxb2-maven-plugin XJC để tạo XSD từ Java Class. JAXB là công nghệ trung gian giữa Java Classes và XML. Chúng ta có thể dùng JAXB để tạo XML từ Java Object và ngược lại.

Cách tạo XSD từ Java Class

jaxb2-maven-plugin

XSD được dùng để định nghĩa cấu trúc dữ liệu hợp đồng, vì thế việc tạo các lớp Java đại diện cho XML schema không phải là cách làm phổ biến.

jaxb2-maven-plugin XJC là công cụ biên dịch JAXB Binding có thể dùng để tạo các lớp Java từ các tệp XSD, và trong bài này sẽ được sử dụng trong một dự án maven để minh họa cách tạo lớp Java từ XSD.

Trước tiên chúng ta phải tạo dự án maven, sau đó cần dùng plugin jaxb2-maven-plugin để tạo các lớp Java từ XSD.

Cách tạo XSD từ Java Class

Cấu trúc dự án sau khi build tạo file XSD

Dưới đây là tệp pom.xml cuối cùng:

<project xmlns="<https://maven.apache.org/POM/4.0.0>" xmlns:xsi="<https://www.w3.org/2001/XMLSchema-instance>"
	xsi:schemaLocation="<https://maven.apache.org/POM/4.0.0> <https://maven.apache.org/xsd/maven-4.0.0.xsd>">
	<modelVersion>4.0.0</modelVersion>
	<groupId>jaxb-schemagen</groupId>
	<artifactId>jaxb-schemagen</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<dependencies>
		<dependency>
			<groupId>javax.xml.bind</groupId>
			<artifactId>jaxb-api</artifactId>
			<version>2.1</version>
		</dependency>
	</dependencies>

	<build>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-compiler-plugin</artifactId>
					<version>2.5.1</version>
				</plugin>
			</plugins>
		</pluginManagement>

		<plugins>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>jaxb2-maven-plugin</artifactId>
				<version>1.5</version>
				<executions>
					<execution>
						<id>schemagen</id>
						<goals>
							<goal>schemagen</goal>
						</goals>
					</execution>
				</executions>

				<configuration>
					<transformSchemas>
						<transformSchema>
							<uri><https://www.example.org/employee></uri>
							<toPrefix>empns</toPrefix>
							<toFile>employee.xsd</toFile>
						</transformSchema>
						<transformSchema>
							<uri><https://www.example.org/address></uri>
							<toPrefix>addrns</toPrefix>
							<toFile>address.xsd</toFile>
						</transformSchema>
					</transformSchemas>
					<includes>
						<include>com/journaldev/bean/*</include>
					</includes>
					<verbose>true</verbose>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

Một vài điểm cần chú ý là dependency jaxb, mục tiêu thực thi schemagen và cấu hình transformSchema. Trong đó, cấu hình transformSchema được dùng để chỉ định tên tệp XSD sẽ được tạo ra cùng với namespace prefix sẽ sử dụng trong tệp XSD.

Dưới đây là các lớp Java mà chúng ta sẽ dùng để tạo XSD. Ví dụ với Employee.java:

package com.journaldev.bean;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlType;

@XmlType(namespace = "<https://www.example.org/employee>")
public class Employee {
    private String name;
    private int id;
    private String role;
    private Address address;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @XmlAttribute
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }
}

Lưu ý annotation @XmlType với namespace được sử dụng cho class và @XmlAttribute cho trường id. Class này sẽ tạo ra schema employee.xsd sau khi chúng ta build project. Như bạn thấy, nó có một trường Address là một class tùy chỉnh khác, nên chúng ta cũng cần annotate class này để việc tạo schema thành công.

Dưới đây là class Address với các annotation JAXB.

package com.journaldev.bean;

import javax.xml.bind.annotation.XmlType;

@XmlType(namespace = "<https://www.example.org/address>")
public class Address {
    private String city;
    private int zip;
    private String addressLine1;
    private String addressLine2;

    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public int getZip() {
        return zip;
    }
    public void setZip(int zip) {
        this.zip = zip;
    }
    public String getAddressLine1() {
        return addressLine1;
    }
    public void setAddressLine1(String addressLine1) {
        this.addressLine1 = addressLine1;
    }
    public String getAddressLine2() {
        return addressLine2;
    }
    public void setAddressLine2(String addressLine2) {
        this.addressLine2 = addressLine2;
    }
}

Class này sẽ tạo ra address.xsd vì tên của nó được ánh xạ trong phần transformSchema trong file pom.xml. Sau khi cấu hình xong, chỉ cần build project bằng lệnh mvn clean install thì các tệp XSD sẽ được tạo ra.

Với project của tôi, các tệp tạo ra bao gồm:

employee.xsd

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema xmlns:xs="<https://www.w3.org/2001/XMLSchema>" xmlns:addrns="<https://www.example.org/address>" targetNamespace="<https://www.example.org/employee>" version="1.0">

  <xs:import namespace="<https://www.example.org/address>" schemaLocation="address.xsd"/>

  <xs:complexType name="employee">
    <xs:sequence>
      <xs:element minOccurs="0" name="address" type="ns1:address"/>
      <xs:element minOccurs="0" name="name" type="xs:string"/>
      <xs:element minOccurs="0" name="role" type="xs:string"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:int" use="required"/>
  </xs:complexType>
</xs:schema>

address.xsd

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema xmlns:xs="<https://www.w3.org/2001/XMLSchema>" targetNamespace="<https://www.example.org/address>" version="1.0">

  <xs:complexType name="address">
    <xs:sequence>
      <xs:element minOccurs="0" name="addressLine1" type="xs:string"/>
      <xs:element minOccurs="0" name="addressLine2" type="xs:string"/>
      <xs:element minOccurs="0" name="city" type="xs:string"/>
      <xs:element name="zip" type="xs:int"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

Vậy là chúng ta đã hoàn tất việc tạo XSD từ các class Java. Cách làm này vừa đơn giản vừa hiệu quả để chuyển đổi từ Java class sang XSD.

Mong rằng hướng dẫn này sẽ hữu ích và dễ theo dõi với bạn.

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất