Hello,
I have problem with aggregating messages when some of them is turned
off e.g. my request have two tags which let to ask webservices about
some things, and not other:
<book:getPackage>
<!-- we do not ask for flights -->
<flights>false</flights>
<hotels>true</hotels>
<!--Optional:-->
<departure>PAR</departure>
<!--Optional:-->
<destination>BER</destination>
<!--Optional:-->
<date>2008-12-13</date>
</book:getPackage>
I think something like this should work, but client who is asking for
data wait for other endpoint also, which we really not ask for data:
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://ws.apache.org/ns/synapse"
xmlns:book="http://test.com/booking">
<sequence name="flights-sequence">
<filter source="//book:getPackage/flights" regex="true">
<then>
<send>
<endpoint>
<address
uri="http://localhost:8166/" />
</endpoint>
</send>
</then>
<else>
<!-- i try to <drop /> message, but don't work,
aslo make
fault and also property name="RESPONSE" value="true" still not work
-->
<send>
<makefault>
<code value="tns:Receiver"
xmlns:tns="http://www.w3.org/2003/05/soap-envelope"/>
<reason value="book:DROPPED"/>
</makefault>
</send>
</else>
</filter>
</sequence>
<sequence name="hotels-sequence">
<filter source="//book:getPackage/hotels" regex="true">
<then>
<send>
<endpoint>
<address
uri="http://localhost:8177/" />
</endpoint>
</send>
</then>
<else>
<makefault>
<code value="tns:Receiver"
xmlns:tns="http://www.w3.org/2003/05/soap-envelope"/>
<reason value="book:DROPPED"/>
</makefault>
<send />
</else>
</filter>
</sequence>
<proxy name="BookingSystemProxy">
<target>
<inSequence>
<clone continueParent="false">
<target sequence="flights-sequence" />
<target sequence="hotels-sequence" />
</clone>
</inSequence>
<outSequence>
<aggregate>
<onComplete
expression="//fareResponse|//Response">
<send />
</onComplete>
</aggregate>
</outSequence>
</target>
<publishWSDL
uri="file:repository/conf/resources/BookingService.wsdl" />
</proxy>
</definitions>
I look for the best pattern to split message and send them to
different endpoints, recieve output and aggregate after - if on given
example are some conceptual mistakes, please let me know. we don't
really not need to produce fault message, we just want to split
request into different subrequests, and make not pause when system
want to aggregarte 2 of them, but only one was send further by the
filter.
Best regards and thx for help in advance,
Adr