...
We will go through creating and implementating web services in our openhub-example module.
WSDL and XSD implementation
- WSDL and XSD is defined in Contract-First design approach - firstly define web service interfaces, secondly implement them in specific language.
- there are two files (in package resources/org.openhubframework.openhub.modules.in.hello.ws.v1_0):
- WSDL definition (e.g. hello-v1.0.wsdl)
- XSD with requests/responses definition (helloOperations-v1.0.xsd). XSD contains request definitions, imports commonTypes-v1.0.xsd with common types from openhub-core module
Info |
---|
VersioningUse versions in format <major>.<minor>. Minor version is for compatible changes, major version indicates non-compatible changes. Versioning should be explicit - it means to present version number in elements, URLs etc.:
If there is change in WSDL's version then change versions of XSDs as well. See Best practices for more development tips. |
...
Code Block |
---|
<?xml version="1.0" encoding="UTF-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:cc="http://openhubframework.org/ws/Common-v1" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://openhubframework.org/ws/HelloService-v1"> <!-- Note: all XSD/WSDL files are copied together at one place during XJC (Maven) code generation --> <xs:import namespace="http://openhubframework.org/ws/Common-v1" schemaLocation="commonTypes-v1.0.xsd"/> <!-- syncHello --> <xs:element name="syncHelloRequest"> <xs:annotation> <xs:documentation>Synchronous calling of hello service</xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"> <xs:annotation> <xs:documentation>Greeting's name</xs:documentation> </xs:annotation> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="syncHelloResponse"> <xs:complexType> <xs:sequence> <xs:element name="greeting" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> <!-- asyncHello --> <xs:element name="asyncHelloRequest"> <xs:annotation> <xs:documentation>Asynchronous calling of hello service</xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"> <xs:annotation> <xs:documentation>Greeting's name</xs:documentation> </xs:annotation> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="asyncHelloResponse"> <xs:complexType> <xs:sequence> <xs:element name="confirmAsyncHello" type="cc:callbackResponse"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> |
Generating Java sources from WSDL/XSD
We use jaxws-maven-plugin plugin for generating Java classes from WSDL/XSD:
...
Code Block |
---|
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jaxws-maven-plugin</artifactId> <configuration> <sourceDestDir>${modules.output.directory}</sourceDestDir> <wsdlDirectory>${modules.import.directory}</wsdlDirectory> <bindingDirectory>${modules.import.directory}</bindingDirectory> <bindingFiles> <bindingFile>jaxb_global_bindings.xjb</bindingFile> </bindingFiles> </configuration> <executions> <execution> <id>WSDL-import-in-hello-model</id> <goals> <goal>wsimport</goal> </goals> <configuration> <staleFile>${project.build.directory}/jaxws/.in.hello.model</staleFile> <packageName>org.openhubframework.openhub.modules.in.hello.model</packageName> <wsdlFiles> <wsdlFile>hello-v1.0.wsdl</wsdlFile> </wsdlFiles> <bindingFiles> <bindingFile>jaxb_global_bindings.xjb</bindingFile> <bindingFile>jaxb_common_bindings.xjb</bindingFile> </bindingFiles> </configuration> </execution> </executions> </plugin> |
Publishing WSDL/XSD
Web service configuration for openhub-example module is in org.openhubframework.openhub.modules.ExampleWebServiceConfig:
...
Code Block |
---|
@Component @Profile(ExampleProperties.EXAMPLE_PROFILE) public class ExampleWebServiceValidatingSources implements WebServiceValidatingSources { @Override public Resource[] getXsdSchemas() { return new Resource[] {ExampleWebServiceConfig.HELLO_OPERATIONS_XSD_RESOURCE}; } @Override public String[] getIgnoreRequests() { return new String[] {"{http://openhubframework.org/ws/HelloService-v1}syncHelloRequest"}; } } |
Route implementations
Tip |
---|
...