Nach dem gestrigen Erfolg folgte heute eine Anforderung, die den Wechsel zu einem anderen Maven2-Plugin und einer neuen Mapping-Datei führte.
Die neue Anforderung war, dass Attribute aus der DTD auf andere Typen als String gemappt werden sollen. Da DTDs keine Typisierung wie XML-Schema kennen, muss dies mit einem Mapping-File geschehen. Das Maven2-Plugin aus dem gestrigen Artikel war leider mit dem Mapping der Attribute überfordert.
Jetzt wurde das Maven2-JAXB-Plugin von java.net verwendet, damit ändert sich die pom.xml folgendermaßen:
<?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 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>de.mms-dresden</groupId> <artifactId>hsp-search-gen</artifactId> <name>Hilfe- und Support-Portal generierter Code fuer die Suche</name> <version>0.1-SNAPSHOT</version> <parent> <groupId>de.mms-dresden</groupId> <artifactId>hsp</artifactId> <version>0.1-SNAPSHOT</version> </parent> <description>Generierter Code fuer die Suche im Hilfeportal</description> <build> <plugins> <plugin> <groupId>org.jvnet.jaxb2.maven2</groupId> <artifactId>maven-jaxb2-plugin</artifactId> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <generateDirectory>${project.build.directory}/generated-sources/jaxb</generateDirectory> <extension>true</extension> <schemaLanguage>DTD</schemaLanguage> <schemaIncludes> <schemaInclude>*.dtd</schemaInclude> </schemaIncludes> <bindingIncludes> <bindingInclude>*.jaxb</bindingInclude> </bindingIncludes> <verbose>true</verbose> <args> <arg>-Xinject-listener-code</arg> </args> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>org.jvnet.jaxb2-commons</groupId> <artifactId>property-listener-injector</artifactId> <version>1.0</version> </dependency> </dependencies> </plugin> </plugins> </build> <repositories> <repository> <id>maven2-repository.dev.java.net</id> <url>http://download.java.net/maven/2/</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>maven2-repository.dev.java.net</id> <url>http://download.java.net/maven/2/</url> </pluginRepository> </pluginRepositories> <dependencies> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> </dependency> </dependencies> </project>
Bei der Angabe der Repository-Pfade muss man aufpassen, weil die Angaben auf der Projektseite des Plugins inzwischen nicht mehr stimmen. Stattdessen mussten die Pfade aus der Repositoryseite von java.net verwendet werden.
Die Dependency-Versionen sind jetzt im Parent-POM definiert, entsprechen aber den Versionen aus dem gestrigen Beitrag.
Das Mapping mappt jetzt das Attribut HITCOUNT des Elements NAVIGATIONENTRY auf den Java-Typ int (genauer gesagt den Wrapper Integer um auch null-Werte darstellen zu können) und sieht jetzt folgendermaßen aus:
<?xml version="1.0" ?> <!-- The syntax of the binding file for DTD is defined in the JAXB EA. See vendorSchemaLangs.html for details. --> <xml-java-binding-schema xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:ci="http://jaxb.dev.java.net/plugin/listener-injector"> <!-- specify the package name for the generated code --> <options package="de.mms_dresden.mip.hsp.base.services.search" /> <xjc:serializable/> <element name="NAVIGATIONENTRY" type="class"> <attribute name="HITCOUNT" convert="int" /> </element> </xml-java-binding-schema>