Listeners

Listeners receive messages from external systems. A separate listener implementation is needed for each supported protocol (eg: REST, SOAP, Kafka, JMS, etc). The key design concepts of the MDW listener pattern are spelled out here.

Camel Routes

An alternative approach to MDW's Listener/Handler pattern is to process external requests through Apache Camel. This approach can be especially useful when no built-in protocol Listener is available, or when Camel's advanced message filtering capabilities are needed. See the MDW Camel Routes documentation for details.

Built-In Listeners

RESTful Service Listener

MDW's REST listener handles three types of HTTP requests:

Document (SOAP) Web Service Listener

MDW includes a number of prebuilt, extensible options for hosting SOAP Web services. See the SOAP Web Service documentation for details. To expose document-literal style services using a custom WSDL definition, MDW provides a mechanism whereby the WSDL document is created as an asset. An HTTP GET request against a custom WSDL asset called Employee looks like:
http://localhost:8080/mdw/services/SOAP/Employee.wsdl

A similar URL can be used as the endpoint for an HTTP POST request which will invoke the service. In this case the request is unwrapped from the SOAP envelope, and based on the top-level element the usual message pattern matching procedure is followed. Likewise, the response content is presumed to be XML and is inserted into a SOAP envelope.

The endpoint location in the WSDL asset can be parameterized as follows based on environment-specific property settings:
<soap:address location="${mdw.services.url}/SOAP/Employee.wsdl" />

RPC SOAP Listener

MDW has a standard WSDL/endpoint for handling SOAP RPC requests at <context-root>/SOAP/MDWWebService.

Kafka Listener

The Kafka listener is provided in an optional asset package:
https://github.com/CenturyLinkCloud/mdw/blob/master/mdw-workflow/assets/com/centurylink/mdw/kafka/readme.md

JMS Listener

External JMS messages are handled through the com.centurylink.mdw.external.event.queue.