Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

SAOP: AXIS returns "Operation not supported". ABAP ommits the operation

Former Member
0 Kudos
542

Hello Experts,

I try to call a Web Service based on an AXIS 1.4 Servlet running on Apache.

This call is sent from an ABAP Proxy I generated within my WebAS ABAP 700, in the Object Navigator (SE80).

I have written my own small test program to fill the input of my structures and to call a WebService using a Proxy..

When I sent a SAOP Request I receive the following error from my Apache Server:

'Operation not supported: "PersonData"'.

I tried to send the SOAP Request from another NON-SAP-Client and it works.

the difference between the succesful request and my faulty request is the following:

Here is the (simplified) succesful request:

<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">

<soap-env:Header>...</soap-env:Header>

<soap-env:Body>

<createPerson>

<PersonData xmlns:nr1="http://localhost">

<birthCity>Bad Hausen</birthCity>

<birthCountry></birthCountry>

<birthDate>21.06.1951</birthDate>

...

</nr1:PersonData>

</createPerson>

</soap-env:Body>

</soap-env:Envelope>

BUT, the request from WebAS ABAP looks different:

<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">

<soap-env:Header>...</soap-env:Header>

<soap-env:Body>

<PersonData xmlns:nr1="http://localhost">

<birthCity>Bad Hausen</birthCity>

<birthCountry></birthCountry>

<birthDate>21.06.1951</birthDate>

...

</nr1:PersonData>

</soap-env:Body>

</soap-env:Envelope>

The Element <createPerson> is missing in the request coming from my ABAP. This element is the operation and the soapAction defined in my WSDL.

One can find it in the WSDL in the binding:

<wsdl:binding name="PersonDataSoapBinding" type="impl:someImplementationEndpoint">

<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>

<wsdl:operation name="createPerson">

<wsdlsoap:operation soapAction="createPerson"/>

<wsdl:input name="createPersonRequest">

<wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://myNS"/>

</wsdl:input>

<wsdl:output name="createPersonResponse">

<wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="https://myNS"/>

</wsdl:output>

</wsdl:operation>

</wsdl:binding>

My guess is that ABAP does not support multiple operations within one WSDL. Right or not? Anyway, I do have only one. I am not sure.

And therefore my Proxy ommitts the operation-element completely. But is this an option not to send the operation?

My AXIS-Server assumes the first elemnt after the body as the operation, but ABAP sends the name of the structure there and ommits the operation. So the response is right so far, it is not correct NOT TO SEND the operation, or is it?

In fact my AXIS does not understand this request. It takes the first element after the body as the operation,

but my ABAP-Prxy sends the paylod structure there.

I do define the operation by calling the method within my ABAP-Proxy.

-


ABAP----


TRY.

CREATE OBJECT person_proxy

EXPORTING

logical_port_name = 'LP01'.

ENDTRY.

TRY.

CALL METHOD person_proxy->create_person

EXPORTING

create_person_request = input

IMPORTING

create_person_response = output.

-


ABAP----


Is there an additional place to set the operation?

Can anybody help me, any ideas?

Kindest regards Joerg Hopmann

1 REPLY 1

stefan_grube
Active Contributor
0 Kudos
36

<wsdl:binding name="PersonDataSoapBinding" type="impl:someImplementationEndpoint">

<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>

The WSDL is rpc style, so you have to set the mode to rpc style in your external definition object, where you upload the WSDL.

Regards

Stefan