cancel
Showing results for 
Search instead for 
Did you mean: 

Problem with RPC/encoded WSDL

Former Member
0 Kudos

I'm having trouble calling a web service that is based on an RPC-encoded WSDL. I've already made slight changes to the WSDL, so that I get a work-able message type for mapping purposes. These changes are based on <a href="http://www.ws-i.org/Profiles/BasicProfile-1.0-2004-04-16.html#refinement16556272"><b>soapenc:Array</b> recommendations in WSDL 1.1 Section 2.2</a> for declaration of array types.

Here's a snippet of the WSDL:

<wsdl:definitions ...>  
  <wsdl:types>    
    <schema ...>
      <complexType name="ArrayOf_tns1_ServiceOption">
        <complexContent>
          <restriction base="soapenc:Array">
            <attribute ref="soapenc:arrayType"
              wsdl:arrayType="tns1:ServiceOption[]"
              xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"/>
          </restriction>
        </complexContent>
      </complexType>
    </schema>
    <schema ...>
      <complexType name="ServiceOption">
        <sequence>
          <element name="key" nillable="true"
                    type="xsd:string"/>
          <element name="value" nillable="true"
                    type="xsd:string"/>
        </sequence>
      </complexType>
    </schema>
  </wsdl:types>
  . . .
</wsdl:definitions>

I've changed it to:

<wsdl:definitions ...>  
  <wsdl:types>    
    <schema ...>
      <complexType name="ArrayOf_tns1_ServiceOption">
        <sequence>
          <element name="ServiceOption"
                    type="tns1:ServiceOption"
                    minOccurs="0" maxOccurs="unbounded"/>
        </sequence>
      </complexType>
    </schema>
    </schema>
    <schema ...>
      <complexType name="ServiceOption">
        <sequence>
          <element name="key" nillable="true"
                    type="xsd:string"/>
          <element name="value" nillable="true"
                    type="xsd:string"/>
        </sequence>
      </complexType>
    </schema>
  </wsdl:types>
  . . .
</wsdl:definitions>

The above changes have allowed me to make message mappings. But the I still get an error when sending a request to the web service. It seems that it requires the <b>xsi:type</b> and <b>soapenc:arrayType</b> attributes for arrays.

<b>How can I create these attributes? How does XI handle RPC-encoded WSDLs?</b> I haven't encountered these problems with document-literal WSDLs.

Thanks in advance.

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

Hi Lorenzo,

I fear there is no easy solution. XI sticks to the WS-I standard which prohibits the use of soapenc:array (http://www.ws-i.org/Profiles/BasicProfile-1.0-2004-04-16.html#refinement16556272). Thus, it does not support this kind of type declarations. If you are familiar with XSD, you might try to add the definition of the missing attributes to the XSD by yourself. Alternatively, you can try to add the missing attributes in a java or XSLT-mapping which you perform after your Message Mapping.

Greetings

Stephan

Former Member
0 Kudos

Hi Stephan,

You've mentioned in another post that SP16 provides better support for RPC-styled web services. Can you point me to SP16?

Where can I find specific documentation from SAP to point out XI's limitation when dealing with RPC-style web services? I need this doco to encourage the web service development team to use document/literal.

Thanks

Former Member
0 Kudos

Hi Lorenzo,

the extended support of rpc-style does <b>not</b> include the support of soapenc:array. It just addresses the root of the message and its direct children (as discussed in the thread where I added this hint).

In the documentation of External Definitions you can find a hint where to find a list of supported XSD/DTD/WSDL-features. However, also there you will find no hint on the fact that soapenc:array is not supported. The reason for this is, that soapenc:array is specified in none of these standards. It is some artifact that SOAP smuggled into XSD. For good reasons WS-I prohibits the use of this artifact.

Hence, if you need support for argumentation I can only point out the WS-I document I already linked.

Greetings

Stephan