JAXB javax.xml.bind
Das Mapping verwendet den früheren javax.xml.bind-Namespace.
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.
Das Mapping verwendet den früheren javax.xml.bind-Namespace.
Die gleiche Mapper-Grenze verwendet Jakarta XML Binding und moderne Runtime-Abhängigkeiten.
Die Ähnlichkeit ist eine technische Orientierung auf normalisiertem Quelltext. Sie ersetzt keine fachliche Bewertung.
| Vergleichsgruppe | Legacy-Dateien | Modern-Dateien | Legacy-Zeilen | Modern-Zeilen | Ähnlichkeit |
|---|---|---|---|---|---|
| Build-Konfiguration | 1 | 1 | 41 | 41 | 86% |
| XML-Modell | 1 | 1 | 35 | 35 | 95% |
| Mapper und Test | 2 | 2 | 29 | 29 | 88% |
| Bootstrap | 1 | 1 | 10 | 10 | 90% |
Das Pair-POM bindet die Legacy- und Modern-Submodule zusammen und gehört deshalb ebenfalls zur vollständigen Codeabdeckung.
javax- und Jakarta-JAXB-Abhängigkeiten werden verglichen.
| Legacy-Dateien | Modern-Dateien | Einordnung |
|---|---|---|
| pom.xml | pom.xml | Direktvergleich Semantische Ähnlichkeit: 86% |
<?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><?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>JAXB-annotierte Modelle werden direkt verglichen.
| Legacy-Dateien | Modern-Dateien | Einordnung |
|---|---|---|
| LegacyCustomer.java | ModernCustomer.java | Direktvergleich Semantische Ähnlichkeit: 95% |
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;
}
}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;
}
}Marshal-/Unmarshal-Implementierung und Tests werden vollständig gegenübergestellt.
| Legacy-Dateien | Modern-Dateien | Einordnung |
|---|---|---|
| LegacyXmlMapper.java LegacyXmlMapperTest.java | ModernXmlMapper.java ModernXmlMapperTest.java | Direktvergleich Semantische Ähnlichkeit: 88% |
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>"));
}
}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>"));
}
}Startprogramme werden verglichen.
| Legacy-Dateien | Modern-Dateien | Einordnung |
|---|---|---|
| XmlLegacyApplication.java | XmlModernApplication.java | Direktvergleich Semantische Ähnlichkeit: 90% |
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")));
}
}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")));
}
}