Intersult Abraxas ist ein Werkzeug zur Kommunikation mit SOAP und anderen Protokollen. Abraxas besteht im wesentlichen aus folgenden Bestandteilen:
Das XML-Paket kann unter Maven 2 direkt aus dem Intersult Maven Repository bezogen werden. Für Rechte und Einsatz in kommerziellen Anwendungen nehmen Sie bitte Kontakt zu uns auf.
The XML Tools are accessible using the following ids:
group-id | com.intersult |
artifact-id | abraxas |
version | 1.3-SNAPSHOT |
The Maven Plugin is accessible under:
group-id | com.intersult |
artifact-id | abraxas-maven |
version | 1.3-SNAPSHOT |
The Remote-Service:
group-id | com.intersult |
artifact-id | abraxas-service |
version | 1.3-SNAPSHOT |
Das Marshalling und Unmarshalling stellt ein Default-Verhalten zur Verfügung, das einen sehr weiten Bereich von denkbaren Java-Objekten abdeckt. Darüber hinaus besteht die Möglichkeit durch einige Annotations das Marshalling zu steuern.
String xml = "<java.lang.String>Test</java.lang.String>"; String string = (String)Xml.unmarshall(xml); System.out.println(string);
Erklärung: Die XML "Datei" wird direkt als String im Java-Code erzeugt und der lokalen Variablen xml zugewiesen. Danach wird mit die Methode marshall der Klasse com.intersult.xml.Xml aufgerufen, welche Strings, Streams und andere Quellen in Java-Objekte umwandelt (sog. Unmarshalling).
Folgendes Code-Beispiel zeigt einen Unmarshal-Marshal-Roundtrip:
Foo objectInput = new Foo(); objectInput.setValue("Test-Wert"); String xml = Xml.marshall(objectInput); System.out.println(xml); Foo objectOutput = (Foo)Xml.unmarshall(xml); System.out.println(objectOutput.getValue());
Mit Foo.java:
public class Foo { private String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } }
Um einen Web-Service auf SOAP-Basis anzusprechen, braucht man zunächst Java-Klassen, die die entsprechenden Daten übertragen. Diese werden aus der sogenannten WSDL (Web Service Description Language) generiert, die der SOAP-Service zur Verfügung stellt. Darin ist beschrieben, welche Methoden der Service anbietet und welche Objekte für die Kommunikation verwendet werden.
Die Generierung von Web Services aus WSDL-Dateien baut zum Teil auf der Generierung von XML-Schemata aus XSD-Dateien auf. Durch folgende Konfiguration kann ein Web Service Client generiert werden:
<project> ... <build> ... <plugins> ... <plugin> <groupId>com.intersult</groupId> <artifactId>com.intersult.maven</artifactId> <version>1.3-SNAPSHOT</version> <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:
GlobalWeatherSoap soap = new GlobalWeatherSoap(); GetWeatherResponse weather = soap.getWeather("nuernberg", "germany"); System.out.println(weather.getGetWeatherResult());
Dies kann in der pom.xml dann so aussehen:
<plugin> <groupId>com.intersult</groupId> <artifactId>abraxas-maven</artifactId> <version>1.3-SNAPSHOT</version> <executions> <execution> <id>generate-schema</id> <goals> <goal>generate-schema</goal> </goals> <configuration> <schemas> <schema> <xsdPath>${project.build.directory}/generated/web</xsdPath> <xsd>http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd</xsd> </schema> </schemas> </configuration> </execution> </executions> </plugin>
Das Beispiel zeigt, wie das XML-Schema der web.xml Version 2.5 über HTTP gestreamt wird und darauf Java-Klassen generiert. Dies kann eingesetzt werden, um Java-Klassen zu erzeugen mit der eine web.xml abgebildet werden könnte mit dem Zweck diese auszulesen oder zu generieren.
Es können beliebige Protokolle hinzugefügt werden, wenn diese ProtocolFactory unterstützen:
<plugin> <groupId>com.intersult</groupId> <artifactId>abraxas-maven</artifactId> <version>1.3-SNAPSHOT</version> <executions> <execution> <id>generate-ws</id> <goals> <goal>generate-ws</goal> </goals> <configuration> <protocols> <com.intersult.testing.httpunit.HttpUnitProtocol> <webXmlFile>${basedir}/src/main/webapp/WEB-INF/web.xml</webXmlFile> <translateProtocol>false</translateProtocol> </com.intersult.testing.httpunit.HttpUnitProtocol> </protocols> <service> <outputPath>${project.build.directory}/generated/test</outputPath> <wsdl>unit://localhost/remote/HelloService?wsdl</wsdl> <packageName>com.intersult.hello</packageName> <xmlConfig> <unwrap>true</unwrap> </xmlConfig> </service> </services> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>com.intersult</groupId> <artifactId>testing</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> </plugin>
Das Artifact mit dem entsprechenden Protocol wird also als Dependency des Abraxas Plugin hinzugefügt. Damit sind die entsprechenden Klassen während der Ausführung des Abraxas Plugins im Classpath zugreifbar und können in der Konfiguration unter "protocols" hinzugefügt und selbst mit Parametern versehen werden.