Migration Deep Dive für 08 · XML und JAXB öffnen →
⌂ ÜbersichtAlle Vergleiche
Modul 08 · 100 % Codeabdeckung

XML und JAXB

Vollständiger Legacy-Modern-Vergleich aller Java-Klassen, Tests, Maven-POMs und relevanten Ressourcen dieses Moduls. Jede Datei ist genau einmal einer fachlich passenden Vergleichsgruppe zugeordnet.

5Legacy-Dateien
5Modern-Dateien
115 → 115Codezeilen
11/11vollständig erfasst

Fachliche Einordnung

Legacy

JAXB javax.xml.bind

Das Mapping verwendet den früheren javax.xml.bind-Namespace.

Modern

Jakarta XML Binding

Die gleiche Mapper-Grenze verwendet Jakarta XML Binding und moderne Runtime-Abhängigkeiten.

Vergleichsfokus: Alle Dateien werden nach technischer Rolle und fachlicher Verantwortung gruppiert.
Wichtige Abgrenzung: One-to-many-Änderungen werden als Gruppe dargestellt; eine künstliche 1:1-Zuordnung wird vermieden.

Vollständige Abdeckungsmatrix

Die Ähnlichkeit ist eine technische Orientierung auf normalisiertem Quelltext. Sie ersetzt keine fachliche Bewertung.

VergleichsgruppeLegacy-DateienModern-DateienLegacy-ZeilenModern-ZeilenÄhnlichkeit
Build-Konfiguration11414186%
XML-Modell11353595%
Mapper und Test22292988%
Bootstrap11101090%

Gemeinsame Modulstruktur

Das Pair-POM bindet die Legacy- und Modern-Submodule zusammen und gehört deshalb ebenfalls zur vollständigen Codeabdeckung.

Gemeinsam · 19 Zeilenpom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>at.aydin.academy</groupId>
        <artifactId>java-modernization-deep-dive</artifactId>
        <version>1.0.0</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>
    <artifactId>08xmljaxb-pair</artifactId>
    <packaging>pom</packaging>
    <name>XML/JAXB: Legacy und Modern</name>
    <modules>
        <module>legacy</module>
        <module>modern</module>
    </modules>
</project>

Alle semantischen Codevergleiche

01Build-KonfigurationDirektvergleich · Legacy 41 / Modern 41 Zeilen · Ähnlichkeit 86%

javax- und Jakarta-JAXB-Abhängigkeiten werden verglichen.

Legacy-DateienModern-DateienEinordnung
pom.xmlpom.xmlDirektvergleich
Semantische Ähnlichkeit: 86%

Legacy

Legacy · 41 Zeilenlegacy/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>at.aydin.academy</groupId>
        <artifactId>08xmljaxb-pair</artifactId>
        <version>1.0.0</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <artifactId>xml-jaxb-legacy</artifactId>
    <packaging>jar</packaging>
    <name>XML/JAXB Legacy (javax)</name>
    <dependencies>
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>${jaxb.legacy.version}</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
            </plugin>

        </plugins>
    </build>
</project>

Modern

Modern · 41 Zeilenmodern/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>at.aydin.academy</groupId>
        <artifactId>08xmljaxb-pair</artifactId>
        <version>1.0.0</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <artifactId>xml-jaxb-modern</artifactId>
    <packaging>jar</packaging>
    <name>XML/JAXB Modern (jakarta)</name>
    <dependencies>
        <dependency>
            <groupId>jakarta.xml.bind</groupId>
            <artifactId>jakarta.xml.bind-api</artifactId>
            <version>4.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>${jaxb.modern.version}</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
            </plugin>

        </plugins>
    </build>
</project>
02XML-ModellDirektvergleich · Legacy 35 / Modern 35 Zeilen · Ähnlichkeit 95%

JAXB-annotierte Modelle werden direkt verglichen.

Legacy-DateienModern-DateienEinordnung
LegacyCustomer.javaModernCustomer.javaDirektvergleich
Semantische Ähnlichkeit: 95%

Legacy

package at.aydin.lab.xml.legacy;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "customer")
public class LegacyCustomer {
    private String name;
    private String email;
    public LegacyCustomer() {
    }

    public LegacyCustomer(String name, String email) {
        this.name = name;
        this.email = email;
    }

    @XmlElement
    public String getName() {
        return name;
    }

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

    @XmlElement
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

Modern

package at.aydin.lab.xml.modern;

import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "customer")
public class ModernCustomer {
    private String name;
    private String email;
    public ModernCustomer() {
    }

    public ModernCustomer(String name, String email) {
        this.name = name;
        this.email = email;
    }

    @XmlElement
    public String getName() {
        return name;
    }

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

    @XmlElement
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
03Mapper und TestDirektvergleich · Legacy 29 / Modern 29 Zeilen · Ähnlichkeit 88%

Marshal-/Unmarshal-Implementierung und Tests werden vollständig gegenübergestellt.

Legacy-DateienModern-DateienEinordnung
LegacyXmlMapper.java
LegacyXmlMapperTest.java
ModernXmlMapper.java
ModernXmlMapperTest.java
Direktvergleich
Semantische Ähnlichkeit: 88%

Legacy

package at.aydin.lab.xml.legacy;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import java.io.StringWriter;

// Design Pattern: Mapper
// Zweck: Domänenobjekt und XML-Repräsentation werden kontrolliert ineinander überführt.
public final class LegacyXmlMapper {
    public String toXml(LegacyCustomer customer) throws Exception {
        JAXBContext context = JAXBContext.newInstance(LegacyCustomer.class);
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        StringWriter writer = new StringWriter();
        marshaller.marshal(customer, writer);
        return writer.toString();
    }
}
package at.aydin.lab.xml.legacy;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;

class LegacyXmlMapperTest {
    @Test
    void createsXml() throws Exception {
        assertTrue(new LegacyXmlMapper().toXml(new LegacyCustomer("Test", "test@example.test")).contains("<name>Test</name>"));
    }
}

Modern

package at.aydin.lab.xml.modern;

import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.Marshaller;
import java.io.StringWriter;

// Design Pattern: Mapper
// Zweck: Jakarta JAXB kapselt die XML-Serialisierung hinter einer klaren API.
public final class ModernXmlMapper {
    public String toXml(ModernCustomer customer) throws Exception {
        JAXBContext context = JAXBContext.newInstance(ModernCustomer.class);
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        StringWriter writer = new StringWriter();
        marshaller.marshal(customer, writer);
        return writer.toString();
    }
}
package at.aydin.lab.xml.modern;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;

class ModernXmlMapperTest {
    @Test
    void createsXml() throws Exception {
        assertTrue(new ModernXmlMapper().toXml(new ModernCustomer("Test", "test@example.test")).contains("<name>Test</name>"));
    }
}
04BootstrapDirektvergleich · Legacy 10 / Modern 10 Zeilen · Ähnlichkeit 90%

Startprogramme werden verglichen.

Legacy-DateienModern-DateienEinordnung
XmlLegacyApplication.javaXmlModernApplication.javaDirektvergleich
Semantische Ähnlichkeit: 90%

Legacy

package at.aydin.lab.xml.legacy;

public final class XmlLegacyApplication {
    private XmlLegacyApplication() {
    }

    public static void main(String[] args) throws Exception {
        System.out.println(new LegacyXmlMapper().toXml(new LegacyCustomer("Aydin", "aydin@example.test")));
    }
}

Modern

package at.aydin.lab.xml.modern;

public final class XmlModernApplication {
    private XmlModernApplication() {
    }

    public static void main(String[] args) throws Exception {
        System.out.println(new ModernXmlMapper().toXml(new ModernCustomer("Aydin", "aydin@example.test")));
    }
}
⌂ Cockpit