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.

View Entire Topic
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.