1

I do want to build a generic gateway from a nested map (generated from binary data stream) to SOAP- clients.

Background: a non-java-application which needs to call SOAP-Services can't generate json or SOAP/XML, but easily generate a custom protocol (which is under our control).

So a proxy is needed. That proxy should not be rewritten on every change of the WSDL or rollout of the next Webservice.

My plan is:

  • to have url, port and service-name (url:port/service-name) as "strict" defined parameters of that proxy,

  • to have the SOAP Action as a "strict" defined parameter

  • to request (possibly cached) the wsdl of url:port/service-name?wsdl and initiate the stub-call dynamically (cached),

  • to fill the values, which are present in the nested map, to that stub

  • call the SOAP-Service

  • convert the answer back to that binary protocol.

If some necessary values are missing it should send the equivalent of a SOAP-Error.

All that of course with small (affordable) latency, high stability, absolute minimal deployment downtime (for updates) and quite some load.

I see several possibilities:

a) Using a ESB like WSO2ESB. There I would implement the stream format as a special input format adapter, convert it to internal XMLStream (at least the json-adapters seem to work that way) and send it to mediator. That mediator would try something like in http://today.java.net/pub/a/today/2006/12/13/invoking-web-services-using-apache-axis2.html "Creating a Dynamic Client" and call the SOAP-Service directly.

b) using a MOM-Middleware like ApacheMQ with Camel,

c) reduce it to something like Apache Karaf and CXF

I'm a bit lost between all those possibilities, and those are just more or less arbitrary samples of each kind.

Thoughts to a):

  • minus: It feels a bit odd to have no ESB-Target, since the mediator would directly call the given SOAP-Requests

  • minus: I wonder if internally converting into XML-Stream would not cost extra time and resources

  • minus: changing the code needs restart of the WSO2ESB as far as I got it

  • plus: instead of url, port, service-name I could define symbolic names which are resolved using the ESB -- iff that doesn't take extra milliseconds.

For b) I have not yet checked how easily those format conversions are in Camel and if SOAP-Service-Requests fit into Message Sending and Queueing.

I did already some searches to that topic but it's really confusing because of the overlapping scopes of quite different products. I thought it to be a standard problem but apparently there are no obvious solutions - at least I didn't find them.

I do hope to get a clue which of those solutions could lead into trouble or much work (and which into easy success), and I hope that there is some reason in my approach.

Thanks for any qualified comments!

Marco

flaschenpost
  • 2,205
  • 1
  • 14
  • 29

0 Answers0