WS-Addressing

wsa:Action, wsa:MessageID and the other routing headers - added and parsed with one checkbox.

WS-Addressing puts the routing metadata of a SOAP exchange - what operation this is, which message it is, where it goes and where replies belong - into standard wsa:* header elements instead of leaving it to the transport. Document-exchange profiles in healthcare (IHE) and many government endpoints require these headers on every request.

In Zato it is one checkbox - WS-Addressing on the SOAP tab of an outgoing connection.

What is sent

With the checkbox on, every request includes:

  • wsa:Action - the connection's SOAP action
  • wsa:MessageID - a fresh unique identifier per request
  • wsa:To - the connection's address
  • wsa:ReplyTo - the anonymous reply endpoint, meaning replies come back on the same HTTP response

Your service does not build any of these - it assigns business fields to a SOAPMessage and the headers are added when invoke runs.

What is read

The reply's addressing headers are parsed off the response and exposed as the reserved addressing attribute - a service can inspect them when it cares and ignore them when it does not:

response = self.soap['Document Registry'].invoke('DocumentQuery', request)

addressing = response.addressing

self.logger.info('Reply action: %s', addressing.action)
self.logger.info('Reply message id: %s', addressing.message_id)
self.logger.info('In reply to: %s', addressing.relates_to)

relates_to echoes the wsa:MessageID of the request that the reply answers, which is what correlation-aware endpoints use to tie exchanges together.

Learn more