cancel
Showing results for 
Search instead for 
Did you mean: 

SOAP Receiver receiving No such operation

Former Member
0 Kudos

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?

Accepted Solutions (1)

Accepted Solutions (1)

former_member190293
Active Contributor

Hi Brian!

Use RPC-style when importing your wsdl definition.

Regards, Evgeniy.

Former Member

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

Thank you

Answers (4)

Answers (4)

Former Member
0 Kudos

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

Former Member
0 Kudos

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.

former_member190293
Active Contributor
0 Kudos

Hi Brian!

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

Regards, Evgeniy.

Former Member
0 Kudos

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

Former Member
0 Kudos

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.

manoj_khavatkopp
Active Contributor
0 Kudos

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