ALERT: Some images may not load properly within the Knowledge Base Article. If you see a broken image, please right-click and select 'Open image in a new tab'. We apologize for this inconvenience.

API Gateway: Unable to find payload element QNames for BindingOperation

book

Article ID: 241352

calendar_today

Updated On:

Products

CA API Gateway

Issue/Introduction

Gateway unable to properly load the custom WSDL file.

2021-10-21T12:17:17,687+0200 INFO 1055 com.l7tech.server.service.resolution.SoapOperationResolver: 103: Unable to find payload element QNames for BindingOperation (xxxxxxxx)

Cause

When a gateway starts, ServiceCache calls SoapOperationResolver to resolve published services using the QNames of the payload elements and validate the WSDL of each service. The services won't be resolved if their WSDLs miss any expected data such as in Binding Operation, the element "input" or the attribute "use" of the element "body" of "input".  The service resolution mapping will not contain any match between an unresolved service and its SOAP QNames of the binding operation.  So, the service consumption for a certain soap:operation will be failed since the service resolution mapping cannot find any unresolved service mapping to the soap:operation.

Here is a reference (w3cschool.com XML WSDL) showing <For each operation the corresponding SOAP action has to be defined. You must also specify how the input and output are encoded. In this case we use "literal".>

Environment

Release : 10.0

Component : API GATEWAY

Resolution

  The solution is to add an attribute "use" to the element, [binding/operation/input/body], so it is not necessary to disable the WSDL validation by enabling "Allow requests intended for operations not supported by the WSDL".

eg:

<wsdl:binding name="e-pgbmatch-soap-apiBinding" type="tns:e-pgbmatch-soap-apiPortType">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="Sample">
      <soap:operation soapAction="Sample" style="document" />
      <wsdl:input>
        <soap:body use="literal" parts="payload" />
      </wsdl:input>
      <wsdl:output>
        <soap:body parts="payload" />
      </wsdl:output>
      <wsdl:fault name="fout">
        <soap:fault use="literal" name="fout" namespace="" />
      </wsdl:fault>
    </wsdl:operation>

  </wsdl:binding>