This page (revision-87) was last changed on 16-Aug-2019 12:51 by Dieter Käppel

This page was created on 18-Aug-2009 22:25 by Dieter Käppel

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
87 16-Aug-2019 12:51 53 KB Dieter Käppel to previous Technologie ==> Technologien
86 16-Aug-2019 12:51 53 KB Dieter Käppel to previous | to last
85 28-Nov-2015 11:16 53 KB Dieter Käppel to previous | to last
84 28-Nov-2015 11:16 53 KB Dieter Käppel to previous | to last
83 18-Feb-2015 09:14 52 KB Dieter Käppel to previous | to last
82 18-Feb-2015 08:51 52 KB Dieter Käppel to previous | to last
81 25-Jul-2014 11:27 52 KB Dieter Käppel to previous | to last

Page References

Incoming links Outgoing links

Version management

Difference between version and

At line 1 changed one line
[Intersult] [Abraxas] ist ein Werkzeug für die automatisierte Kommunikation im Netzwerk. Anwender sind alle, die auf Services im eigenen oder anderen Unternehmen zugreifen wollen.
[Intersult] [Abraxas] - M2M-Kommunikation und XML-Dateien im Netzwerk. Mit [Abraxas] wird die Kommunikation von Machine-2-Machine erstmals verständlich und einfach zu nutzen. Auch bei komplexen Anforderungen.
At line 3 changed one line
[Technologisch|Technologie] handelt es sich um das Einlesen und Speichern im XML-Format, die Kommunikation über [SOAP], REST, sowie das Generieren von Java-Klassen, Serialisieren von Java-Objekten in XML und umgekehrt.
%%(
text-align: center;
margin: 20px 0;
font-size: larger;
)
Testen sie [Abraxas] noch heute - und sehen sie, wie einfach XML werden kann!
%%
At line 5 changed one line
Bugs und Feature-Requests können über [https://code.google.com/p/abraxas-maven/issues/list] eingegeben werden.
[Technologisch|Technologien] handelt es sich um das Einlesen und Speichern im XML-Format, die Kommunikation über [SOAP], REST, sowie das Generieren von Java-Klassen, XML-Schema (XSD), WSDL (SOAP- und andere Web-Services), Serialisieren (Marshalling) von Java-Objekten in XML und umgekehrt.
At line 7 changed one line
Ein Beispiel-Projekt mit [Maven] ist als ZIP-Datei [Abraxas/abraxas-example.zip] verfügbar.
Bugs und Feature-Requests können über [https://www.sub-flow.com/] eingegeben werden.
At line 15 added 2 lines
Ein Beispiel-Projekt mit [Maven] ist als ZIP-Datei [Abraxas/abraxas-client-1.4.zip] verfügbar.
At line 20 added 5 lines
!!!Tutorials
[Abraxas] Example Tutorial mit SOAP-Service, SOAP-Client und JUnit-Test innerhalb eines Maven-Projekts:
[{Flash src='https://www.youtube.com/v/LRnZMHzXO3c' controls='false' play='true'}]
At line 29 changed one line
Die Bibliotheken können aus dem [Intersult Maven Repository] bezogen werden.
Die Bibliotheken können aus dem [Maven Central Repository|http://search.maven.org/] oder dem [Intersult Maven Repository] bezogen werden.
At line 35 changed one line
|version|1.3-SNAPSHOT
|version|1.4
At line 41 changed one line
|version|1.3-SNAPSHOT
|version|1.4
At line 47 changed one line
|version|1.3-SNAPSHOT
|version|1.4
At line 72 added 2 lines
|export-schema|Damit können Schema-Dateien (XSD) für Klassen aus dem aktuellen Projekt generiert werden. Natürlich können auch Klassen aus JARs herangezogen werden. Das Plugin wird standardmäßig in der Phase process-classes ausgeführt.
|export-test-schema|Wie export-schema, nur dass der Export für Test-Klassen ausgeführt wird. Die Ausfürungs-Phase ist dabei process-test-classes.
At line 134 added 83 lines
Hier ein Beispiel für eine /META-INF/abraxas.xml:
{{{
<?xml version="1.0" encoding="UTF-8"?>
<xmlConfig xmlns="http://intersult.com/abraxas/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://intersult.com/abraxas/config http://intersult.com/xml/abraxas.xsd">
<scanClassPath>true</scanClassPath>
<wsdlStylesheet>wsdl.xsl</wsdlStylesheet>
<serviceFactory>com.intersult.subflow.SpringServiceFactory</serviceFactory>
</xmlConfig>
}}}
In der Konfigurations-Datei abraxas.xml sind im Wesentlichen die selben Attribute verfügbar, wie beim Verwenden der [Klasse XmlConfig|Abraxas#XML-Konfiguration].
Die XmlConfig kann auch beispielsweise mit Xml.marshall(config, config.getSuperConfig()) geschrieben werden. Das Ergebnis kann dann wie folgt aussehen:
{{{
<?xml version="1.0" encoding="UTF-8"?>
<xmlConfig xmlns="http://intersult.com/abraxas/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<validate>true</validate>
<writeEmpty>false</writeEmpty>
<useDefault>false</useDefault>
<writeId>false</writeId>
<encoding>UTF-8</encoding>
<writeType>NONE</writeType>
<throwUnknown>true</throwUnknown>
<mapping xsi:index="{http://intersult.com/test}Foo">com.intersult.xml.Foo</mapping>
<pretty>true</pretty>
<attributeHandlers xsi:index="0" xsi:type="com.intersult.xml.marshal.impl.IgnoreAttributeHandler"/>
<attributeHandlers xsi:index="1" xsi:type="com.intersult.xml.marshal.impl.NamespaceAttributeHandler"/>
<attributeHandlers xsi:index="2" xsi:type="com.intersult.xml.marshal.impl.KeyAttributeHandler"/>
<attributeHandlers xsi:index="3" xsi:type="com.intersult.xml.marshal.impl.SchemaHandler"/>
<attributeHandlers xsi:index="4" xsi:type="com.intersult.xml.marshal.impl.QNameAttributeHandler"/>
<attributeHandlers xsi:index="5" xsi:type="com.intersult.xml.marshal.impl.DefaultAttributeHandler"/>
<elementHandlers xsi:index="0" xsi:type="com.intersult.xml.marshal.impl.RootElementHandler"/>
<elementHandlers xsi:index="1" xsi:type="com.intersult.xml.marshal.impl.KeyHandler"/>
<elementHandlers xsi:index="2" xsi:type="com.intersult.xml.marshal.impl.DefaultElementHandler"/>
<formatMap xsi:index="java.util.Date">com.intersult.xml.marshal.impl.XmlDateFormat</formatMap>
<formatMap xsi:index="byte[]">com.intersult.util.format.Base64Format</formatMap>
<namespaceStack/>
<globalXsi>false</globalXsi>
<processIncludes>true</processIncludes>
<absoluteIncludes>true</absoluteIncludes>
<throwDuplicate>true</throwDuplicate>
<usePrefix>false</usePrefix>
<processEnum>true</processEnum>
<throwFault>true</throwFault>
<serializable>false</serializable>
<handleIds>true</handleIds>
<autoCdata>true</autoCdata>
<logging>false</logging>
<annotations>true</annotations>
<proxy/>
<collectNamespace>true</collectNamespace>
<unwrap>false</unwrap>
<transparentNtlm>true</transparentNtlm>
<induceTypes>true</induceTypes>
<induceNillable>false</induceNillable>
<valueInducer xsi:index="0" xsi:type="com.intersult.xml.xsd.induce.type.IntegerInducer"/>
<valueInducer xsi:index="1" xsi:type="com.intersult.xml.xsd.induce.type.UrlInducer"/>
<valueInducer xsi:index="2" xsi:type="com.intersult.xml.xsd.induce.type.DateTimeInducer"/>
<minStrategy>LAX</minStrategy>
<maxStrategy>MEDIUM</maxStrategy>
<useStrategy>LAX</useStrategy>
<generateXsdElements>true</generateXsdElements>
<keepXmlElements>false</keepXmlElements>
<qualifyElements>true</qualifyElements>
<unqualifiedNamespace>true</unqualifiedNamespace>
<qualifyAttributes>false</qualifyAttributes>
<useAttributeNamespace>true</useAttributeNamespace>
<primitivesAsAttribute>true</primitivesAsAttribute>
<scanClassPath>false</scanClassPath>
<scanPackage>com.intersult.some.package</scanPackage>
<serviceFactory>com.intersult.xml.remote.ReflectiveServiceFactory</serviceFactory>
<transports xsi:index="0" xsi:type="com.intersult.xml.soap.SoapTransport">
<prefix>soap</prefix>
<namespaceUri>http://schemas.xmlsoap.org/wsdl/soap/</namespaceUri>
</transports>
</xmlConfig>
}}}
__Warnung:__ Es sollte keine "vollständige" XmlConfig in abraxas.xml hinterlegt werden, da dies zu Problemen beim Überschreiben von Werten führen kann. Abraxas führt mehrere XmlConfig-Einträge selbständig zusammen. Es wird empfohlen, nur Elemente hinzuzunehmen, die ausdrücklich geändert oder hinzugefügt werden sollen.
At line 380 added one line
|scanPackage|List<String>|Eine Liste von Java-Packages, die gescannt werden soll. Werden hier ein oder mehrere Elemente angegeben, wird scanClassPath durchgeführt und braucht nicht mehr explizit angegeben werden.
At line 382 added one line
|superConfig|XmlConfig|Die Super-Konfiguration ist eine Instanz der XmlConfig, die verwendet wird um eine abraxas.xml auf eine bestehende XmlConfig zu parsen. SuperConfig deshalb, weil Abraxas seine XmlConfig mit sich selbst parst.
At line 512 changed 2 lines
!!Beispiele
!Maven
!!Maven Beispiel
Es liegt folgende XML-Datei als simple.xml vor:
{{{
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="http://intersult.com/test/simple">
<value>
<some-element>1</some-element>
<some-element>2</some-element>
</value>
<another-value>
<some-element>3</some-element>
<some-element>4</some-element>
<nested>
<value>
<another-element>1</another-element>
<another-element>2</another-element>
<another-element>3</another-element>
</value>
</nested>
</another-value>
</root>
}}}
At line 658 added one line
...
At line 537 changed one line
</plugin>
</plugin>
At line 542 changed one line
Ansonst kann die erzeugte XSD auch verwendet werden, um mit generate-schema in einem weiteren Execution-Schritt die Java-Klassen zu generieren.
Ansonst kann die erzeugte XSD auch verwendet werden, um mit generate-schema in einem weiteren Execution-Schritt die Java-Klassen zu generieren. Dies kann innerhalb der selben Instanz des Build-Plugins abraxas-maven geschehen:
At line 544 changed one line
!Java
{{{
<execution>
<id>generate-schema</id>
<goals>
<goal>generate-schema</goal>
</goals>
<configuration>
<schemas>
<schema>
<xsdPath>${project.build.directory}/generated-sources/simple</xsdPath>
<xsd>file:/${project.build.directory}/generated-resources/xsd/simple.xsd</xsd>
</schema>
</schemas>
</configuration>
</execution>
}}}
Die Klasse Root sieht dann wie folgt aus:
{{{
@Name("root")
@XmlNamespace(value = "http://intersult.com/test/simple", localPart = "root")
public class Root {
private Value value;
private AnotherValue anotherValue;
private URI xmlns;
public Value getValue() {
return value;
}
public void setValue(Value value) {
this.value = value;
}
@Name("another-value")
public AnotherValue getAnotherValue() {
return anotherValue;
}
public void setAnotherValue(AnotherValue anotherValue) {
this.anotherValue = anotherValue;
}
public URI getXmlns() {
return xmlns;
}
public void setXmlns(URI xmlns) {
this.xmlns = xmlns;
}
}
}}}
In einem Test kann nun die Datei simple.xml eingelesen werden:
{{{
@Test
public void testUnmarshal() {
XmlConfig config = new XmlConfig();
config.register(Root.class);
InputStream inputStream = getClass().getResourceAsStream("/simple.xml");
Root root = (Root)Xml.unmarshall(inputStream, config, "/simple.xml");
Assert.assertNotNull(root);
}
}}}
!!Java Beispiel
At line 741 added 38 lines
!!!Schema Export
Es sind auch Fälle vorstellbar, in denen ein Schema für Klassen aus einem Projekt erzeugt werden soll. Dieses Schema kann dann als Bestandteil des Projekts während der Phase package in ein JAR oder WAR eingepackt werden. Dies kann den Anwender zum Beispiel im Anwenden des Content Assists beim Editieren von XML-Dateien unterstützen.
Der Eintrag in der pom.xml kann so aussehen:
{{{
<build>
<plugins>
<plugin>
<groupId>com.intersult</groupId>
<artifactId>abraxas-maven</artifactId>
<version>1.5-SNAPSHOT</version>
<executions>
<execution>
<id>export-schema</id>
<goals>
<goal>export-schema</goal>
</goals>
<configuration>
<resourceRoot>${project.build.directory}/generated-resources/export</resourceRoot>
<exports>
<export>
<targetNamespace>http://intersult.com/export</targetNamespace>
<prefix>ex</prefix>
<outputFile>${project.build.directory}/generated-resources/export/classes.xsd</outputFile>
<classes>
<class>com.intersult.test.ExportTest</class>
</classes>
</export>
</exports>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
}}}
At line 558 changed one line
Der Abraxas Remote-Service ist auf einfache Handhabung ausgelegt. Es ist keine Konfiguration nötig, außer das Registrieren des RemoteServlet. Web-Services sind Java-Klassen, die mit der Annotation @XmlService versehen sind. Zusätzlich ist empfohlen, die Annotation @XmlNamespace zu verwenden, um den Target-Namespace des Service festzulegen.
Der Abraxas Remote-Service ist auf einfache Handhabung ausgelegt. Es ist nur das RemoteServlet in der web.xml zu registrieren und eine META-INF/abraxas.xml anzulegen. Web-Services sind Java-Klassen, die mit der Annotation @XmlService versehen sind. Zusätzlich ist empfohlen, die Annotation @XmlNamespace zu verwenden, um den Target-Namespace des Service festzulegen.
At line 785 added 16 lines
Grundsätzlich bestehen zwei Möglichkeiten für das Registrieren von Mappings und Service-Klassen:
# Das manuelle Hinzufügen von Service-Klassen in der abraxas.xml mittels Mapping-Tag
# Das Aktivieren des ClassPath-Scanners in der abraxas.xml (Siehe [Abraxas#XML Config Files])
Das manuelle Eintragen erlaubt eine genauere Kontrolle, welche Klassen für das Mapping herangezogen werden:
{{{
<?xml version="1.0" encoding="UTF-8"?>
<xmlConfig xmlns="http://intersult.com/abraxas/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://intersult.com/abraxas/config http://intersult.com/xml/abraxas.xsd">
<mapping>com.intersult.abraxas.test.ExampleService</mapping>
<wsdlStylesheet>wsdl.xsl</wsdlStylesheet>
</xmlConfig>
}}}