WSDL/XSD to textual gApp Model Conversion
The generator WSDL to gApp
takes .wsdl and .xsd files as input and creates .gapp files that use the DSLs Function, Persistence, Basic and Rest.
For every .wsdl or .xsd file a corresponding .gapp file is going to be created in the subdirectory gapp.
Object and Purpose¶
Assuming that there are some existing SOAP services or at least some XML data structures defined with XSD and you want to modernize your software stack by implementing web services that use pure HTTP/S as the data transfer protocol and that use JSON as the data format.
These new web services then shall provide the same business logic as your existing SOAP services.
The .gapp files that are generated by the WSDL to gApp
generator are going to be used as input for other generators that create web service implementations and web service clients based on state-of-the-art technologies like for instance Jakarta EE (JAX-RS) or Eclipse Microprofile.
Libraries used for WSDL/XSD Parsing¶
Apache Woden and Apache XmlSchema are used in the generator to parse .wsdl and .xsd files. Any limitation of those libraries represents a restriction for the generator.
Main Mappings of Concepts¶
XSD Type or File | gApp Type or File |
---|---|
.wsdl or .xsd file | a .gapp file (in other words: a module) |
<xs:simpleType> |
type |
<xs:complexType> |
entity |
<xs:element> |
field |
<xs:enumeration> |
entry (member of enumeration) |
<wsdl:operation> |
function |
<wsdl:input> |
in (parameters of a function) |
<wsdl:output> |
out (parameters of a function) |
targetNamespace |
the gApp module/file’s namespace |
Every generated function gets some REST-… options set:
...
function MyFunction {
set REST-Operation = POST;
set REST-Path = "myfunction";
...
}
...
These options are needed by other generators that generate web services for the given gApp model files.
Note
The options have the prefix REST-
, but the input model doesn’t really define a RESTful webservice. On the internet you find dozens of discussions about what is RESTful and what isn’t RESTful . Please read these discussion if you want to know more about the difference. We won’t hold that discussion here.
Prerequisites and Limitations¶
WSDL Version 1.0/1.1 vs 2.0¶
The generator can only process WSDL 2.0 files. When you use WSDL 1.0/1.1 as input files, the generator automatically converts them to the 2.0 format first. If that conversion raises errors, the generation stops and the errors are displayed.
Unsupported Constructs¶
WSDL and XSD lets you define a great many of different data structures, restrictions and operations.
The WSDL to gApp
generator supports a growing number of scenarios but doesn’t claim to be complete.
If you find unsupported definitions, please report them to us.
XSD Namespaces¶
Certain .xsd files won’t work, depending on their namespace settings. The following example won’t work:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
...
</xs:schema>
However, when you define a targetNamespace
and a default namespace (xmlns=…), the generator runs successfully:
<schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://dummy"
xmlns="http://dummy">
...
</schema>
Any .xsd file must have a targetNamespace
defined, otherwise the generator will raise an error.
Note
The namespace definitions are only needed to parse the .wsdl and .xsd files. The targetNamespace
attribute is an exception from this rule. Its setting becomes a gApp module/file’s namespace.
Unsupported WSDL Tags¶
When the .wsdl file contains a <wsp:Policy>
tag, the generator will raise an error.
Simply remove that tag from the input file prior to runing the generator.
Number of Input Files¶
Only one .wsdl file is allowed as input. If you provide more than one .wsdl file, the generator will raise an error. Multiple .xsd files are allowd, though. Imports of .xsd files work fine, too.
XSD Annotations¶
Certain usage of <xs:annotation>
is not supported and lead to generation errors.
Simply remove the <xs:annotation>
or comment them in order to make the generation succeed.
The following cases are not supported:
annotation on the top level of a .wsdl file¶
<wsdl:definitions
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
...>
<xs:annotation>
<xs:appinfo>W3Schools Note</xs:appinfo>
<xs:documentation xml:lang="en">
This Schema defines a W3Schools note!
</xs:documentation>
</xs:annotation>
...
</wsdl:definitions>
annotation within the binding
tag in a .wsdl file¶
<wsdl:definitions
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
...>
...
<wsdl:binding>
<xs:annotation>
<xs:appinfo>W3Schools Note</xs:appinfo>
<xs:documentation xml:lang="en">
This Schema defines a W3Schools note!
</xs:documentation>
</xs:annotation>
....
</wsdl:binding>
</wsdl:definitions>
Location of multiple Input Files¶
When you have more than one input file, those input files have to be located in the same directory.