SwitchYard doesn't accept a WSDL interface having multiple message part to input and output of the wsdl operation

Solution Unverified - Updated -

Issue

  • SwitchYard throws the following ERROR , when the WSDL used in the SwitchYard service's wsdl interface contains multiple message part to input and output of the wsdl operation.
SWITCHYARD012801: Service operations on a WSDL interface must have exactly one parameter
  • The sample switchyard.xml configuration and a sample WSDL is shown below for reference. How to fix this issue?
switchyard.xml
...
  <sca:component name="Sample-Camel-Route">
     <camel:implementation.camel>
       <camel:xml path="META-INF/sample-camel-route.xml"></camel:xml>
     </camel:implementation.camel>
     <sca:service name="SampleServiceProxy">
       <sca:interface.wsdl interface="META-INF/Sample_proxy.wsdl#wsdl.porttype(SampleService)"></sca:interface>
     </sca:service>
     <sca:reference name="SampleService">
       <sca:interface.wsdl interface="META-INF/Sample_1.wsdl#wsdl.porttype(SampleService)"></sca:interface>
     </sca:reference>
   </sca:component>
   <sca:service name="SampleServiceProxy" promote="Sample-Camel-Route/SampleServiceProxy">
     <sca:interface.wsdl interface="META-INF/Sample_proxy.wsdl#wsdl.porttype(SampleService)"></sca:interface>
     <soap:binding.soap>
<soap:wsdl>META-INF/Sample_proxy1.wsdl</soap:wsdl>
<soap:wsdlPort>SampleServiceImplPort</soap:wsdlPort>
       <soap:socketAddr>:8080</soap:socketAddr>
<soap:contextPath>SampleProxy</soap:contextPath>
     </soap:binding.soap>
   </sca:service>
...
  • Looking at the following WSDL it is visible how it contains the additional header which causes the aforementioned issue.
Sample_proxy.wsdl
...

       <wsdl:operation name="SampleData">
           <soap:operation soapAction="" style="document" ></soap:operation>
           <wsdl:input name="saveData">
               <soap:body parts="parameters" use="literal" ></soap:body>
               <soap:header message="tns:saveData" part="partCode" use="literal">
               </soap:header>
               <soap:header message="tns:saveData" part="secondPartCode" use="literal">
               </soap:header>
               <soap:header message="tns:saveData" part="thirdPartCode" use="literal">
               </soap:header>
           </wsdl:input>
           <wsdl:output name="saveDataResponse">
               <soap:header message="tns:saveDataResponse"
                   part="partCode" use="literal">
               </soap:header>
               <soap:header message="tns:saveDataResponse"
                   part="secondPartCode" use="literal">
               </soap:header>
               <soap:header message="tns:saveDataResponse"
                   part="thirdPartCode" use="literal">
               </soap:header>
               <soap:body parts="result" use="literal" ></soap:body>
           </wsdl:output>
       </wsdl:operation>
...
  • On the other hand the other WSDL does not contain the additional headers which works fine.
Sample_proxy1.wsdl
...
        <wsdl:operation name="saveData">
            <soap:operation soapAction="" style="document" />
            <wsdl:input name="saveData">                
                <soap:body parts="parameters" use="literal" />
            </wsdl:input>
            <wsdl:output name="saveDataResponse">               
                <soap:body parts="result" use="literal" />
            </wsdl:output>
        </wsdl:operation>
...

Environment

  • Red Hat JBoss Fuse Service Works (FSW)
    • 6.0.0

Subscriber exclusive content

A Red Hat subscription provides unlimited access to our knowledgebase of over 48,000 articles and solutions.

Current Customers and Partners

Log in for full access

Log In