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
>