Migration Deep Dive für 31 · XSLT öffnen →
⌂ ÜbersichtAlle Vergleiche
Modul 31 · 100 % Codeabdeckung

XSLT

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
63 → 77Codezeilen
11/11vollständig erfasst

Fachliche Einordnung

Legacy

TransformerFactory ohne Hardening

Stylesheet wird pro Aufruf verarbeitet; externe Ressourcen können je nach Factory-Konfiguration erreichbar sein.

Modern

Vorkompilierte Templates mit Secure Processing

Templates werden einmal kompiliert und externe DTD-/Stylesheet-Zugriffe werden eingeschränkt.

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-Konfiguration113434100%
XML- und XSLT-Testressourcen2222100%
Transformer und Test22274133%

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>31xslt-pair</artifactId>
    <packaging>pom</packaging>
    <name>XSLT: Legacy und Modern</name>
    <modules>
        <module>legacy</module>
        <module>modern</module>
    </modules>
</project>

Alle semantischen Codevergleiche

01Build-KonfigurationDirektvergleich · Legacy 34 / Modern 34 Zeilen · Ähnlichkeit 100%

XSLT- und Testkonfiguration wird verglichen.

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

Legacy

Legacy · 34 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>31xslt-pair</artifactId>
                <version>1.0.0</version>
                <relativePath>../pom.xml</relativePath>
            </parent>
            <artifactId>xslt-legacy</artifactId>
            <packaging>jar</packaging>
            <name>XSLT Legacy</name>

            <dependencies>

<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 · 34 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>31xslt-pair</artifactId>
                <version>1.0.0</version>
                <relativePath>../pom.xml</relativePath>
            </parent>
            <artifactId>xslt-modern</artifactId>
            <packaging>jar</packaging>
            <name>XSLT Modern</name>

            <dependencies>

<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- und XSLT-TestressourcenDirektvergleich · Legacy 2 / Modern 2 Zeilen · Ähnlichkeit 100%

Gleiche Ressourcen zeigen ausschließlich Sicherheits-/API-Änderungen.

Legacy-DateienModern-DateienEinordnung
catalog.xml
title.xsl
catalog.xml
title.xsl
Direktvergleich
Semantische Ähnlichkeit: 100%

Legacy

<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="text"/><xsl:template match="/"><xsl:value-of select="catalog/book/title"/></xsl:template></xsl:stylesheet>

Modern

<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="text"/><xsl:template match="/"><xsl:value-of select="catalog/book/title"/></xsl:template></xsl:stylesheet>
03Transformer und TestDirektvergleich · Legacy 27 / Modern 41 Zeilen · Ähnlichkeit 33%

Ungehärtete Transformation wird sicher konfigurierter Template-Wiederverwendung gegenübergestellt.

Legacy-DateienModern-DateienEinordnung
LegacyXsltTransformer.java
LegacyXsltTransformerTest.java
SecureXsltTemplate.java
SecureXsltTemplateTest.java
Direktvergleich
Semantische Ähnlichkeit: 33%

Legacy

package at.aydin.lab.xslt.legacy;

// Design Pattern: Factory – erzeugt Transformer über die standardisierte TransformerFactory.
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import java.io.*;

public final class LegacyXsltTransformer {
    public String transform(InputStream xml, InputStream xsl) throws Exception {
        StringWriter out = new StringWriter();
        TransformerFactory.newInstance().newTransformer(new StreamSource(xsl)).transform(new StreamSource(xml), new StreamResult(out));
        return out.toString();
    }
}
package at.aydin.lab.xslt.legacy;

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

class LegacyXsltTransformerTest {
    @Test
    void transforms() throws Exception {
        try (var x = getClass().getResourceAsStream("/catalog.xml"); var s = getClass().getResourceAsStream("/title.xsl")) {
            assertEquals("Java", new LegacyXsltTransformer().transform(x, s));
        }
    }
}

Modern

package at.aydin.lab.xslt.modern;

import javax.xml.XMLConstants;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import java.io.*;

// Design Pattern: Flyweight
// Zweck: Thread-sichere Templates werden einmal kompiliert und für viele Transformationen wiederverwendet.
public final class SecureXsltTemplate {
    private final Templates templates;
    public SecureXsltTemplate(InputStream xsl) throws Exception {
        TransformerFactory f = TransformerFactory.newInstance();
        f.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
        f.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
        f.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
        templates = f.newTemplates(new StreamSource(xsl));
    }

    public String transform(InputStream xml) throws Exception {
        StringWriter out = new StringWriter();
        templates.newTransformer().transform(new StreamSource(xml), new StreamResult(out));
        return out.toString();
    }
}
package at.aydin.lab.xslt.modern;

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

class SecureXsltTemplateTest {
    @Test
    void reusesCompiledTemplate() throws Exception {
        try (var s = getClass().getResourceAsStream("/title.xsl")) {
            var t = new SecureXsltTemplate(s);
            try (var x = getClass().getResourceAsStream("/catalog.xml")) {
                assertEquals("Java", t.transform(x));
            }
        }
    }
}
⌂ Cockpit