How to invoke APIs in SOAP style in Swagger

WSO2 API Manager has integrated Swagger to allow API consumers to explore APIs through a interactive console which is known as 'API Console'

This swagger based API Console supports invoking APIs i REST style out of the box. So this post going to show how we can invoke APIs in SOAP style in API console of WSO2 API Manager 1.7.0. For that we need to do few extra configurations.

1. Send SOAPAction and Content-Type header in the request
2. Enable sending SOAPAction header in the CORS configuration



First create an API for a SOAP Service. In this example I am using HelloService sample SOAP service of WSO2 Application Server. This HelloService has a operation named greet which accepts a payload as below.

<soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typ="http://www.wso2.org/types">
   <soapenv:header>
   <soapenv:body>
      <typ:greet>
         <!--Optional:-->
         <name>lakmali</name>
      </typ:greet>
   </soapenv:body>
</soapenv:header></soapenv:envelope>

1. Create API



Figure-1 : Design API 


Figure-2 : Implement API by giving SOAP endpoint


Figure-3 :Save and Publish API



2. Update Swagger API Definition


Now we have to edit the default Swagger content and add SOAPAction and Content-Type header. For that go to 'Docs' tab and click 'Edit Content' for API definition.


Figure-4: Edit Swagger API definition

Since we have to send a payload in the request, locate the POST http method in the content. Then add below content into the 'parameters' section of POST http method. 

{
                            "name": "SOAPAction",
                            "description": "OAuth2 Authorization Header",
                            "paramType": "header",
                            "required": false,
                            "allowMultiple": false,
                            "dataType": "String"
                        },
                        {
                            "name": "Content-Type",
                            "description": "OAuth2 Authorization Header",
                            "paramType": "header",
                            "required": false,
                            "allowMultiple": false,
                            "dataType": "String"
                        }


Then the complete POST HTTP method definition would look like below.


Figure-5: Edited Swagger API definition

After doing the above changes Save & Close.

Now if you go to API Store and click on the created API, and the go to API Console, you should see the SOAPAction and Content-Type fields are added to the Swagger UI.


Figure-6: API Console with new header parameters

3. Add New Headers to CORS Configuration


Although we have added required headers, those will be sent in the request oly if they are set as allowed headers in the CORS configuration.

For that open APIM_HOME/repository/conf/api-manager.xml file and locate CORSConfiguration. Then add SOAPAction in to available list of Access-Control-Allow-Headers as below (Content-Type is added by default, So we have to only add SOAPAction). 


Figure-7: API Console with new header parameters

After adding the headers, restart the api manager and invoke the API through API Console. 
When invoking the API, set the SOAPAction according to your SOAP service. Also set the COntent-Type header as 'text/xml'


Figure-8: API Console Invoke API


If you face any issues with swagger invoke, please go through this.

Comments

  1. Hi Lakmali,

    Do you have the updated blog for version 1.8.0? The API Console looks differently now. The return is empty. Could you please show how to do the same in 1.8.0?
    Thanks,
    Mark

    ReplyDelete
  2. Hi Lakmali,

    Nice content, I'm trying to use in Swagger 2.0 with editor. If I had success I give you e feed baks.

    Tks

    ReplyDelete
  3. Does this work with the current version of swagger?

    ReplyDelete

Post a Comment

Popular posts from this blog

PHP-SOAP web service with out a WSDL

Boomi Mapping - Removing special chars from an input

How to add Maven dependency from a relative path referencing a local jar