Die Intersult liefert die wohl führenden XML- und SOAP-Werkzeuge im Java-Bereich. Das XML-Paket kann unter Maven 2 direkt aus dem Intersult Maven Repository integriert werden.
Neben primitiven Datentypen und verschachtelten Typen serialisiert der Marshaller auch Arrays, Lists und Maps.
Der XmlUnmarshaller wandelt serialisierte XML-Dateien zurück in Java-Klassen. Das Unmarshalling ist dabei genauso unkompliziert wie das Marshalling. Pojos sind ausreichend, mit Annotationen können zusätzliche Features gesteuert werden.
Folgendes Code-Beispiel zeigt einen Unmarshal-Marshal-Roundtrip:
String stringInput = IOUtils.toString(getClass().getResourceAsStream("Foo.xml")); Foo foo = (Foo)MarshalUtils.unmarshall(stringInput); String stringOutput = MarshalUtils.marshall(foo);
Ein weiteres Beispiel für Unmarshalling:
String input = "Test"; String xml = "<java.lang.String>" + input + "</java.lang.String>"; String output = (String)MarshalUtils.unmarshall(xml);
<project> ... <build> ... <plugins> ... <plugin> <groupId>com.intersult</groupId> <artifactId>com.intersult.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> <xsdPackage>org.w3.schema</xsdPackage> </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.
<project> ... <build> ... <plugins> ... <plugin> <groupId>com.intersult</groupId> <artifactId>com.intersult.maven</artifactId> <executions> <execution> <goals> <goal>generate-ws</goal> </goals> <configuration> <services> <service> <outputPath>${project.build.directory}/generated/weather</outputPath> <wsdl>http://www.webservicex.net/globalweather.asmx?WSDL</wsdl> <packageName>net.webservicex.globalweather</packageName> </service> </services> </configuration> </execution> </executions> </plugin> ... </plugin> ... </build> ... </project>
Der Global Weather Service generiert einen Service, der durch folgenden Code ansprechbar ist:
GetWeatherResponse weather = (GetWeatherResponse)new GlobalWeatherSoap().getWeather("nuernberg", "germany"); System.out.println(weather.getGetWeatherResult());