I noticed that no matter what the filtering was on the "out" mediator, events still would not arrive at both service endpoints, so I started suspecting that the service-port property in the clone mediator had something to do with that.
Long story short, now I am using the following configuration, and it seems to work, requests are arriving at both endpoints and no more Response already sent/Connection closed exceptions. In my experience though, just because something doesn't throw an exception it doesn't mean it works, so can someone take a look at the following config and do a sanity check on it. <definitions xmlns="http://ws.apache.org/ns/synapse"> <in> <log level="full"/> <filter source="get-property('To')" regex=".*/Event.*"> <clone continueParent="true"> <sequence> <property action="set" name="service-port" value="8080"/> </sequence> <target> <endpoint> <address uri=" http://192.168.239.1:8080/EventService/services/Event"/> </endpoint> </target> </clone> <property action="set" name="service-port" value="9000"/> <send> <endpoint> <address uri="http://192.168.239.128:9000/services/Event "/> </endpoint> </send> <drop/> </filter> </in> <out> <log level="full"/> <filter source="get-property('service-port')" regex=".*9000.*"> <send/> </filter> </out> </definitions> Thank you, Florin 2009/9/24 Florin Bejinaru <[email protected]> > Actually the filter on the out mediator filters the requests as well as the > responses, I just need to filter the responses, I have tried with something > like this: > > <out> > <log level="full"/> > <filter source="get-property('Direction')" regex=".*request.*"> > <send/> > </filter> > <filter source="get-property('service-port')" regex=".*9000.*"> > <send/> > </filter> > </out> > > But it still doesn't send the request for the 8080 service port through. > How do I get it to send all the requests through but only the 9000 response > ? > > Thank you, > Florin > > 2009/9/24 Ruwan Linton <[email protected]> > > Hi Florin, >> >> So, if I understand the requirement correctly you need to filter out the >> response from a specified service, right? If the requirement is to filter >> out any response, that is only look for the first response without waiting >> for the second, you could have done that with the aggregate mediator, with >> the maximum message count to complete the aggregation set to 1. >> >> If that is the former, then you need to have a content based router at the >> out path of the flow and drop the messages from the server that you want >> to >> filter out. See the following config assuming that you want to drop the >> response from the service running at port 8080; If it is the other way >> around you just need to change the regex in the out path filter to >> ".*8080.*" >> >> >> <in> >> <filter source="get-property('To')" regex=".*/Event.*"> >> <clone continueParent="true"> >> <target> >> <sequence> >> <property action="set" name="service-port" >> value="8080"/> >> </sequence> >> <endpoint> >> <address uri=" >> http://192.168.239.1:8080/EventService/services/Event"/> >> </endpoint> >> </target> >> </clone> >> <property action="set" name="service-port" value="9000"/> >> <send> >> <endpoint> >> <address uri=" >> http://192.168.239.128:9000/services/Event >> "/> >> </endpoint> >> </send> >> <drop/> >> </filter> >> </in> >> <out> >> <filter source="get-property('service-port')" regex=".*9000.*"> >> <send/> >> </filter> >> </out> >> >> Hope this helps... >> >> Thanks, >> Ruwan >> >> On Wed, Sep 23, 2009 at 7:18 PM, Florin Bejinaru >> <[email protected]>wrote: >> >> > At the moment I am using the following synapse.xml configuration file to >> > send a WS request to 2 different service implementations (that is a >> > requirement so it can't be changed): >> > >> > <in> >> > <filter source="get-property('To')" regex=".*/Event.*"> >> > <clone continueParent="true"> >> > <target> >> > <endpoint> >> > <address uri=" >> > http://192.168.239.1:8080/EventService/services/Event"/> >> > </endpoint> >> > </target> >> > </clone> >> > <send> >> > <endpoint> >> > <address uri=" >> > http://192.168.239.128:9000/services/Event >> > "/> >> > </endpoint> >> > </send> >> > <drop/> >> > </filter> >> > </in> >> > <out> >> > <send/> >> > </out> >> > >> > >> > The problem is that both of those return a response and I was wondering >> if >> > I >> > could use synapse to filter out the response from a particular response >> > source, or do I need to rewrite one of those services to not return a >> > response (which I'm guessing is a bit tricky since Axis2 might be >> inclined >> > to use a InOutMessageReceiver based on the service's WSDL.) >> > >> > Which would be a decent and simple solution to my problem ? >> > >> > Thank you, >> > Florin >> > >> >> >> >> -- >> Ruwan Linton >> Technical Lead & Product Manager; WSO2 ESB; http://wso2.org/esb >> WSO2 <http://wso2.org/esb%0AWSO2> Inc.; http://wso2.org >> email: [email protected]; cell: +94 77 341 3097 >> blog: http://ruwansblog.blogspot.com >> > >
