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 Inc.; http://wso2.org
email: [email protected]; cell: +94 77 341 3097
blog: http://ruwansblog.blogspot.com

Reply via email to