cancel
Showing results for 
Search instead for 
Did you mean: 

Problems with SOAP Receiver (async) and web services that return data

js2
Product and Topic Expert
Product and Topic Expert
0 Kudos

Based on the SOAP adapter FAQ when your integration scenario is using asynchronous messaging and you want to call a web service that web service must only return one of the following for success:

HTTP200 with empty soap body, or

HTTP202 with no body.

All other responses will be treated as an error.

So what if the web services we need to call all return values. We don't need these values but the receiving systems cannot be changed.

It seems bizzare that we would now be forced to use a synchronous scenario here and therefore lose allot of the benefits of having PI.

I'm wondering what others have done in this situation as it must be relatively common.

Do you:

1) Force the recevier systems to change their web service api's to return empty soap body's

2) Use BPM (or ccBPM): async/sync bridge. Seems like unnecessary overhead!

3) Possibly write a soap adapter module to strip out the response - though I'm doubting that will work in async scenario. In Sync the module gets access to request and response but I can't find any doco that states the same for async. Will have to just build one to test.

4) Switch to AXIS adapter - however I note that the AXIS FAQ also stipulates the same requirement of webservices replying with an empty soap body for success. Although with axis, a handler could be written and depending on when its called it may be able to strip out or ignore the response. Once again - really need to build one to test.

This must have come up so many times before... Any ideas? Best solutions?

Regards... Jason.

Accepted Solutions (1)

Accepted Solutions (1)

js2
Product and Topic Expert
Product and Topic Expert
0 Kudos

I've continued the development of this interface by using a java proxy as the receiver. This enables an async-sync bridge. Inside the java proxy I have code (using JAX-WS) that calls the sync web-service.

Another option to make this work (but more of a hack) is to use a dummy receiver system, such as a file, but perform the sync web-service call from a mapping lookup.

Using BPM is another option. I think it's a heavy-handed solution but you can do it without any custom java coding which is good.

I don't think the other solution offered above of using sync SI's is a good one even if it does work. It's more like fooling the system. It's also problematic as you start adding more receivers to the interface.

Answers (2)

Answers (2)

baskar_gopalakrishnan2
Active Contributor
0 Kudos

What is your sender adapter?

Create in ESR service interfaces for both sender and receiver as synchoronous. (use receiver response message from wsdl in inbound interface and create one dummy response message in outbound sender too). But if your sender channel is say soap or file or so.. you need to use quality of service is EO (not Best effort). This way the channel in the sender system does not expect the response message. This way even the web service (receiver system) sends the response message, the sender system will not receive. otherwise it will ignore the response message.

You might also check this thread...

http://scn.sap.com/message/13458149

js2
Product and Topic Expert
Product and Topic Expert
0 Kudos

I'll be using IDoc's as the sender, though could change to ABAP proxy if necessary. This techniques that you mention of setting the QoS as EO but using sync SI's - does PI treat this as a proper asynchronous interface such that it will retry when the sender is unavailable and queue messages, etc? Does this simply work by accident or due to a flaw in PI as there seems to be nothing documented about this that I can find. Thankyou for your response though...

Btw. I couldn't access the blog in the link you provided. It says I'm not authorised and has a different URL to all other blogs on here...  😉

baskar_gopalakrishnan2
Active Contributor
0 Kudos

The link was broken during migration I believe. But the idea is is you use sender adaper like soap you can set EO as service and avoid collecting the response message. Actually PI treat this is as async interface even though you create sync si for both outbound and inbound.   Since idoc by nature is async, you might create ESR as I said and the channel you dont have option to specify QOS. So just try and see if that helps. I saw this blog from a expert how to ignore the receiver response using this.

js2
Product and Topic Expert
Product and Topic Expert
0 Kudos

Baskar, With standard abap proxy communication (sender-side) we use the soap adapter with the XI3.0 protocol. Unfortunately this disables the QoS option so its not possible to set a QoS of EO with a synchronous SI. So this solution above is dependatn on what sender-side adapter you are using.

Former Member
0 Kudos

Did you try to just "ignore" the reply by using an async service interface both sides?

It seems there is no need to use any adapter module.

If there is a system error - you will receive it back, and if you receive a reply the PI just "ignores" it because you use an async interface.

please test and tell me if it works for you.

Regards,

Imanuel Rahamim.

js2
Product and Topic Expert
Product and Topic Expert
0 Kudos

Hi Imanuel, the soap adapter FAQ OSS note states that the response will put the message into error. Click on the link in my post above to see... Thx.