Generate REST API from SOAP Backend

This feature allows users to expose their legacy SOAP backends as REST APIs through WSO2 API Manager. WSO2 API Manager supports WSDL 1.1 based SOAP backends.

Follow the instructions below to generate REST APIs in WSO2 API Manager for an existing SOAP backend.

Note

    Before you begin...
    Make sure that you have a valid WSDL URL from the SOAP backend. It should belong to the WSDL 1.1 version.

  1. Sign in to the API Publisher and click CREATE API.

    Create SOAP API

    Info

      The following are two options to create APIs for SOAP backends
    • Pass Through – Creates a pass-through proxy for SOAP requests coming to the API Gateway.
    • Generate REST APIs – Generates REST API definitions from the given WSDL URL.

  2. Select Generate REST APIs and provide the WSDL URL for the SOAP backend.

    Create SOAP API as a generated API

  3. Click Next and provide the information in the table below.

    Field Sample value
    Name PhoneVerification
    Context /phoneverify
    Version 1.0.0
    Endpoint http://ws.cdyne.com/phoneverify/phoneverify.asmx

    Create REST API using WSDL

  4. Click CREATE.

    The created API appears in the publisher as follows. generate rest api from soap backend overview

  5. Click API Definition and click Edit to modify the open API Definition of the API. API definition of generated rest api from soap backend

    The generated API resources are added to the API, as shown below. Generated resources of SOAP backend

  6. Click on a resource to view the In and Out sequences of the API. In out sequences of generated rest API

    The following sample shows the generated API In-sequence for a POST method.

       <header description="SOAPAction" name="SOAPAction" scope="transport" value="http://ws.cdyne.com/PhoneVerify/query/CheckPhoneNumber"/>
       <property name="REST_URL_POSTFIX" scope="axis2" action="remove"/>
       <property expression="json-eval($.CheckPhoneNumber.LicenseKey)" name="req.var.CheckPhoneNumber.LicenseKey"/>
       <property expression="json-eval($.CheckPhoneNumber.PhoneNumber)" name="req.var.CheckPhoneNumber.PhoneNumber"/>
    
    
       <payloadFactory description="transform" media-type="xml">
       <format>
       <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://ws.cdyne.com/PhoneVerify/query">
       <soapenv:Header/>
       <soapenv:Body>
           <web:CheckPhoneNumber xmlns:web="http://ws.cdyne.com/PhoneVerify/query">
       <web:LicenseKey>$1</web:LicenseKey>
       <web:PhoneNumber>$2</web:PhoneNumber>
       </web:CheckPhoneNumber>
    
       </soapenv:Body>
       </soapenv:Envelope>
       </format>
       <args>
           <arg evaluator="xml" expression="get-property('req.var.CheckPhoneNumber.LicenseKey')"/>
       <arg evaluator="xml" expression="get-property('req.var.CheckPhoneNumber.PhoneNumber')"/>
    
       </args>
       </payloadFactory>
       <property description="messageProperty" name="messageType" scope="axis2" type="STRING" value="application/soap+xml"/>

    The incoming JSON message parameters are stored using properties. A payload factory mediator is used to generate the SOAP payload required for the backend.

Top