Der Intersult Xsd-Generator ist Bestandteil von Abraxas. Die umfangreiche Anleitung befindet sich dort.

Xsd-Generierung mit Maven#

Der Xsd-Generator generiert aus einer XML-Schema-Datei (Dateiendung .xsd) die entsprechenden Java-Klassen. Die Generierung kann entweder durch den Aufruf der Klasse com.intersult.xml.xsd.Xsd erfolgen - oder bequemer durch Maven2-Integration:
<project>
    ...
    <build>
        ...
        <plugins>
            ...
            <plugin>
		<groupId>com.intersult</groupId>
		<artifactId>abraxas-maven</artifactId>
		<executions>
		    <execution>
			<goals>
		    	    <goal>generate-schema</goal>
			</goals>
			<configuration>
			    <schemas>
				<schema>
			            <xsdPath>${project.build.directory}/generated/schema</xsdPath>
				    <xsd>http://www.w3.org/2001/XMLSchema.xsd</xsd>
				</schema>
			    </schemas>
			</configuration>
		    </execution>
		</executions>
	    </plugin>
	    ...
	</plugin>
	...
    </build>
    ...
</project>

Die Generierung ist in den Maven2-Build-Zyklus integriert. Dadurch wird der Code zu genau dem richtigen Zeitpunkt generiert und erscheint z.B. auch in Eclipse-Projekten als Source-Folder.

Die Xsd-Generierung ist derart mächtig, dass sie sogar Java-Dateien für das XSD-Schema generieren kann. Das XSD-Schema ist das Schema für ein XML-Schema, also auch das Schema für sich selbst. Das WSDL-Schema kann damit ebenfalls abgebildet werden.

Optionale Parameter zur Konfiguration der Xsd-Generierung:

AttributBeschreibung
processIncludesEin Xsd-Schema kann Include-Anweisungen enthalten. Wird processIncludes auf den Wert true gesetzt, werden die in den Include-Anweisungen spezifizierten Xsd-Schemata geladen und ebenfalls Code dafür generiert. Wird der Package-Name spezifiziert, wird dieser auf die geladenen Schemata vererbt.
xsdPackagePackage-Pfad, der bei der Generierung des Java-Code verwendet werden soll. Wird kein Package-Name festgelegt, wird der natürliche Package-Name aus dem Target-Namespace generiert. Der natürlich Package-Name sind die Namenskomponenten des Hostnames des URI in umgekehrter Reihenfolge gefolgt von den Komponenten des Pfads des URI, jeweils getrennt durch das Package-Trennzeichen '.' (den Punkt).
generateEnumPer Default werden Strings statt Enums generiert, Da in Java nur ein sehr eingeschränkter Zeichenvorrat dafür akzeptiert wird. Dieses Feature kann in einer späteren Version durch Annotations ergänzt werden und per Default auf true gesetzt werden.
processIncludesLegt fest, ob Include-Anweisungen innerhalb der Xsd befolgt werden sollen. Falls dieser Wert explizit mit true angegeben wird, werden rekursiv alle durch Include-Anweisungen gefundenen Schemata geladen und der Code generiert. Es empfiehlt sich den Package-Namen generieren zu lassen, da bei der manuellen Festlegung des Package-Namens alle Klassen im gleichen Verzeichnis abgelegt werden.

Generierung aus Java#

Mittels der Klasse com.intersult.xml.xsd.Xsd können Stubs auch direkt über Java generiert werden.
Xsd xsd = new Xsd("outputpath");
xsd.processXsd(new URL("file:/C:/Java/test.xsd");

Des Weiteren enthält

Getestete Schemata#

Damit sicher gestellt ist, dass der Intersult Xsd-Generator eine große Bandbreite verarbeitet, wurden folgende Schemata getestet:
  • XMLSchema.xsd
  • WSDL.xsd
  • maven-v4_0_0.xsd
  • web-app_2_5.xsd (inklusive Xsd-Includes)
  • components-2.1.xsd (JBoss Seam)