I know we are about ready for a release candidate. I would like to propose a change for after our first release.

(By the way... we cannot "release" anything from Apache while we are an incubator, so we can only get a M1 RC ready until we pass through incubation).

The change I propose I already posted about. The feeling I have is that the current model of dropping messages unless they are explicitly sent on is probably a little confusing.

I propose that we change the behaviour as follows:

1) boolean process(SynapseMessage sm) :
 if the response is true, continue processing. If the response is false: check sm. If sm.getTo==null, then drop, if sm.getTo!=null then send on.

2) So then we could add the following two XML config elements:

  <drop/> -- would set the To address to null and then return false. This drops the message immediately and ends processing
  <sendNow/> - this ends processing and sends the message on now. Effectively this simply returns false.

3) This model seems to me simpler for unit test. Rather than having to fake up a special send() in the Axis2SynapseEnvironment, you can simply call a processor and check the SM and return values to see if they match what you expect.

4) I also think this would make it easier to embed Synapse in a "co-locate" model with Axis2, because the implicit send could actually be used to simply dispatch the message to the right Axis2 service instead of always opening up new connection.

I think this is a more logical model, but I'd appreciate your thoughts. Both models are similar, so it just comes down to the simplest for the user. I think its better that you say <drop> if you want to drop it rather than it dropping it by default.


Paul Fremantle
VP/Technology, WSO2 and OASIS WS-RX TC Co-chair

"Oxygenating the Web Service Platform",