Generiere XSD aus Java-Klassen mit dem JAXB-2 Maven Plugin

Einleitung

Das Generieren von XML-Schemadefinitionen (XSD) aus Java-Klassen ist eine häufige Anforderung bei der Arbeit mit JAXB in Java-basierten Anwendungen. Mit dem JAXB-2 Maven Plugin können Sie diesen Prozess vereinfachen und die Schemagenerierung direkt in Ihren Maven-Projekten automatisieren. Dieser Leitfaden führt Sie durch die Einrichtung, Konfiguration und Ausführung, um XSD-Dateien effizient aus annotierten Java-Klassen zu generieren.

Wir verwenden das JAXB-2 Maven Plugin in einem Maven-Projekt, um XSD aus Java-Klassen zu generieren.

Das JAXB2 Maven Plugin nutzt das JAXB SchemaGenerator-Dienstprogramm, um XSD aus Java-Klassen zu generieren. Java-Klassen sollten JAXB-Annotationen enthalten, damit dieses Plugin sie verwenden kann. Die minimale erforderliche Java-Version ist Java 5.

Einrichten des Maven-Projekts

Erstellen Sie zunächst ein neues Maven-Projekt. Sie können beliebige Namen, Gruppen-ID und Artefakt-ID verwenden. Sobald wir unser Projekt erstellen, werden XSD-Klassen im Verzeichnis target/generated-resources/schemagen generiert. Nach dem Build sieht unsere Projektstruktur wie das untenstehende Bild aus.

Finale pom.xml-Datei

Hier ist die finale pom.xml-Datei:


<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>


Java-Klassen

Hier sind die Java-Klassen, die wir verwenden, um XSD zu generieren:

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;
    }
}

Address.java


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;
    }
}


Generierte XSD-Dateien

Unser Projektsetup ist bereit. Erstellen Sie das Projekt einfach mit dem Befehl mvn clean install, und die XSD-Dateien werden generiert.

employee.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>

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>


Fazit

Die Generierung von XSD aus Java-Klassen mit dem JAXB-2 Maven Plugin ist ein einfacher und effizienter Prozess. Durch die oben beschriebenen Schritte können Sie die Schemagenerierung automatisieren und die Konsistenz Ihrer XML-Datenstrukturen beibehalten. Dieser Ansatz ist besonders vorteilhaft für Projekte, die häufige Schema-Updates erfordern oder auf stark typisierte XML-Interaktionen angewiesen sind. Wir hoffen, dass dieser Leitfaden Ihren Schemagenerierungsprozess einfacher und zuverlässiger macht.

Kostenlosen Account erstellen

Registrieren Sie sich jetzt und erhalten Sie Zugang zu unseren Cloud Produkten.

Das könnte Sie auch interessieren: