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, tools, and much more.

Current Customers and Partners

Log in for full access

Log In

New to Red Hat?

Learn more about Red Hat subscriptions

Using a Red Hat product through a public cloud?

How to access this content