Yes but if it is inside the target element it doesn't replicate the request and 8080 doesn't receive any request. And this way it seems to work ok.
I did try it exactly the way you said, and the service on the 8080 port never received any request. I don't know exactly why that happens, but that's what it does. 2009/9/24 ruwan.linton <[email protected]> > Hi Florin, > > This configuration has an issue, the sequence which is setting the property > inside the clone mediator has to be inside the target element, if you > carefully have a look at the above config fragment I pasted on the earlier > reply, the sequence is inside the target element, so please change the > configuration to include that in the target element; > > Being said that it doesn't really affect the scenario that you are trying > to > implement, because you are not using the property value 8080 on the out > path > in this particular instance; > > So the modified config should read as; > > <definitions xmlns="http://ws.apache.org/ns/synapse"> > > <in> > <log level="full"/> > <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> > <log level="full"/> > > <filter source="get-property('service-port')" regex=".*9000.*"> > <send/> > </filter> > </out> > </definitions> > > Thanks, > Ruwan > > On Thu, Sep 24, 2009 at 5:08 PM, Florin Bejinaru > <[email protected]>wrote: > > > 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 > > >> > > > > > > > > > > > > -- > 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 >
