Skip to Content
0

SOAP Receiver receiving No such operation

Jul 10, 2017 at 07:02 PM

105

avatar image

Hello all,

I have setup a few HTTP, REST and AS2 CCs but I am setting up my first SOAP communication channel. I received the WSDL from the web-servce, imported it and setup the proper Service interfaces, message maps, operation maps (this is a synchronous service).

However all I get back from the SOAP call is the following:

<html><head><title>Error</title></head>
<body><h1>Error</h1><pre>
Error while sending message to module processor: Sender Channel <Communication Channel>(ID: 4869e9b9920f3da895cfd870a0c5ca6b): Catching exception calling messaging system: No such operation 'enq'
</pre></body></html>

I imported the WSDL into SOAPUI (From Smart Bear) and ran a few tests. I can get the SOAP call to work via SOAPUI but not SAP PO SOAP. Here is the proper SOAP call per SOAPUI:

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://services.webservices.odysseylogistics.com">
<soapenv:Header/>
<soapenv:Body>
<ser:getShipmentByRefNo soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<enq xsi:type="bean:Enquiry" xmlns:bean="http://beans.webservices.odysseylogistics.com/">
<userName xsi:type="xsd:string">?</userName>
<password xsi:type="xsd:string">?</password>
<shipmentID xsi:type="xsd:string">?</shipmentID>
</enq>
</ser:getShipmentByRefNo>
</soapenv:Body>
</soapenv:Envelope>

However, when SAP reads in the WSDL it says the only mapping needed is the following:

<ns0:enq xmlns:ns0="http://services.webservices.odysseylogistics.com">
<userName>?</userName>
<password>?</password>
<shipmentID>?</shipmentID>
</ns0:enq>

I ran some tests in SOAP UI and if I remove the "getShipmentByRefNo" xml elements and send the test I get the same error as SAP does - No such operation.

What do I need to configure to get SAP to send a similar SOAP call as SOAP UI?

10 |10000 characters needed characters left characters exceeded
* Please Login or Register to Answer, Follow or Comment.

5 Answers

Best Answer
Evgeniy Kolmakov Jul 11, 2017 at 02:40 PM
2

Hi Brian!

Use RPC-style when importing your wsdl definition.

Regards, Evgeniy.


wsdl-rpc.png (15.6 kB)
Show 1 Share
10 |10000 characters needed characters left characters exceeded

That is exactly what I was looking for. I never knew this option was there.

Thank you

1
avatar image
Former Member Jul 11, 2017 at 05:17 AM
0

SAP adds it's own SOAP header which may not be what the end service is expecting. You need to select 'Do Not use SOAP envelope' in the channel and then build your own SOAP envelope through xslt as mentioned by Manoj.

Best,

Vibhu

Show 1 Share
10 |10000 characters needed characters left characters exceeded

Thank you for your answer.

However, this is not an envelope issue. The problem is the data being sent in the body. The SOAP UI has a different root element than what is generated by SAP PI. SOAP UI has the following:

<getShipmentByRefNo>

<enq>

<fields>

</enq>

</getShipmentByRefNo>

SAP PI only generates the following:

<enq>

<fields>

</enq>

It would be far easier to generate a new schema to force PI to include the root tag of <getShipmentByRefNo> than to use XSLT to force that root tag into the message.

0
Manoj K Jul 10, 2017 at 07:11 PM
0

Brian,

If you want to prepare same SOAP Envelope as the one in SOAP UI then you cans use xslt/java to build the soap envelope.

And Tick "Do not use Soap Envelope" in your receiver channel so to make receiver soap channel to not prepare any soap envelope as you are already doing it in mapping.

You will find a lots of refrence for building soap enevlope below are few :

https://archive.sap.com/discussions/thread/3887128

https://archive.sap.com/discussions/thread/224911

https://archive.sap.com/discussions/thread/3891408

Br,

Manoj

Share
10 |10000 characters needed characters left characters exceeded
Brian Schroll Jul 10, 2017 at 07:33 PM
0

I appreciate the response, but this does not seem like the best solution.

Why would SAP generate the wrong SOAP call where SOAP UI does (with the same WSDL)? Are there no ways to force SAP to behave like SOAP UI? (in that I mean to generate the proper SOAP message that the web service call is expecting).

I have reached out to the customer and I know the web service call is AXIS based. I have also setup a SOAP AXIS communication channel and that doesn't work either. It just seems like SAP PI reads the WSDL completely differently than SOAP UI.

Share
10 |10000 characters needed characters left characters exceeded
Evgeniy Kolmakov Jul 10, 2017 at 08:54 PM
0

Hi Brian!

Wouldn't you please provide wsdl file for that web service?

Regards, Evgeniy.

Show 1 Share
10 |10000 characters needed characters left characters exceeded

I have modified the file to remove customer specific details and attached the file.scn-uploadwsdl.txt

0