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:
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:
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">
http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="createPerson">
<wsdlsoap:operation soapAction="createPerson"/>
<wsdl:input name="createPersonRequest">
http://schemas.xmlsoap.org/soap/encoding/" namespace="http://myNS"/>
</wsdl:input>
<wsdl:output name="createPersonResponse">
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