Any way to retrieve original SOAP action?

When a message gets processed by the Session Engine, the original SAOP action gets lost. For example, consider the following route (borrowed from the Intercept example)

<Route>
<Criteria>(ACTION EQ 'http://www.contoso.com/intercept/AddResponse')</Criteria>
<Destination>UIParticipant[http://www.contoso.com/SampleServices/RouteResponse]</Destination>
</Route>

In the resulting SOAP call to the UIParticipant, the original action (AddResponse) is never mentioned. Is there a way to retrieve this original action and why isn't this provided Almost all other information (OriginalFrom, OriginalMessagId) is provided in the wsa:From > wsa:ReferenceProperties xml element...



Answer this question

Any way to retrieve original SOAP action?

  • Benny Chang

    That's indeed what I'm doing here. However, this "catch-all" observer service has no way to determine the original soap action of the message (the one it had before it was re-routed by the session engine to the observer). For example:

    1. A message with SOAP action "DUMMY" is sent to the session
    2. The session routes this message to the observer service, via the rule (TRUE) ==> observerService[GenericAction]
    3. The message received by the observer service will have a soap action "GenericAction" and the observer service is unable to retrieve the original soap action of the message ("DUMMY" in this case).

    It would be nice if the session engine would store this information just like it stores the original sender and the original message id...


  • Thomas Hirte

    why isnt this provided because CSF works on SOA principles which says each and every web servies should be independent and complete within itself. Thus, there is no need to know where all your message had been routed, as each service(Web Service) calls just adds value to your message.

    As far as I know you can retrieve a SoapAction by persisting it somewhere which can be a State recorder of your message. You can do so, where you are routing your message OR at ServiceLogic



  • mmix

    OK. it means you want to route message to Service Logic which are coming from different Web Services.

    It this is what you want then this can easily be done by setting up some kind of routing test that always evaluates to true and then routing all the messages to a method on the observer service. For example, (TRUE) or (Action EQ ’DUMMY’) will perform the required test. However, the method on the observer class should take in a SoapEnvelope as its only parameter so that Session will send it messages of any body type.

    I hope it will help!



  • js06

    Hi Marcel,

    Thanks for your note - I will check if we can get this capability added to a future version of the CSF Session... I greatly appreciate your suggestion!!!

    Many Thanks Again, Marcel!!

    -Rob.


  • Alquimista09

    I need the original SOAP action because I re-route every message not sent by the service logic (external webservice providing the orchestration) to the service logic. Example:

    <Route>
    <Criteria>(SOURCE NEQ SERVICELOGIC)</Criteria>
    <Destination>SERVICELOGIC[http://servicelogic/GenericFunction]</Destination>
    </Route>

    Within this Generic Function, I determine what to do with the message based on the original SOAP action (at least, that's what I want to do).
    This way, a manifest won't be cluttered with too many routes (one for any response possible by a participant that's not the service logic itself)...


  • Any way to retrieve original SOAP action?