You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by mta38 <mt...@orange-ftgroup.com> on 2008/10/16 16:06:18 UTC

Is it possible to use aggregator with xpath

Hi all,
I try to use "aggregator" with "xpath" but i have some strange behaviour.
Here is my spring config file :

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:tns="http://activemq.apache.org/schema/core"
	xmlns:g1="urn:mynamespace:myservice"
	xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://activemq.apache.org/camel/schema/spring
http://activemq.apache.org/camel/schema/spring/camel-spring-1.4.0.xsd 
 		http://activemq.apache.org/schema/core
http://activemq.apache.org/schema/core/activemq-core.xsd">



	<bean id="myProcessor" class="aggregator.MyProcessor" />
	<bean id="myAggregatorStrategy" class="aggregator.MyAggregationStrategy"/>
	

	<camelContext id="myCamelContext"
xmlns="http://activemq.apache.org/camel/schema/spring">

		<!-- Let's try processor "aggregator"  -->	
		<!-- We use our own aggregation strategy define in
aggregator.MyAggregationStrategy class -->

		<!-- Route with a defined batch size to stop collection of exchange. -->
		<route>
			<from uri="direct:aggreg-start" />		
			 <aggregator strategyRef="myAggregatorStrategy" batchSize="2">			 	
							
				<xpath>/soapenv:Envelope/soapenv:Body/g1:creerMarche</xpath>	
				<!-- simple>header.client</simple-->
									
				<to uri="mock:result" /> 					
			</aggregator>	
		</route>

	
	</camelContext>

</beans>

This is my java code

public void testSendingMessagesWithCustomAggregator() throws Exception {
        
        result.expectedMessageCount(1);
             
        producer.sendBodyAndHeader(REQUEST_MESSAGE, "client","client");
        producer.sendBodyAndHeader(REQUEST_MESSAGE2, "client","client");        
        result.await(20,TimeUnit.SECONDS);
        
        
          
        List<Exchange> list = result.getReceivedExchanges();
        for (Exchange exchange : list) {
            Message in = exchange.getIn();
            String body = in.getBody(String.class);        
            LOG.info("Result: " + body); 
        }
        

When I use <simple>header.client</simple> as predicate, my aggregation
strategy code is executed.
But when I try to use
<xpath>/soapenv:Envelope/soapenv:Body/g1:creerMarche</xpath> my aggregation
strategy code is never executed.

Here is the REQUEST_MESSAGE values:
	
private static final String REQUEST_MESSAGE = "<soapenv:Envelope
xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:g1=\"
urn:mynamespace:myservice\" xmlns:g11=\"urn:mynamespace:myservice \">"
		  +"<soapenv:Header/>"
		  + "<soapenv:Body>"
		  +  "<g1:creerMarche>" 
		   + "<g1:marche>"     
		  +  "<g11:description>une desc1</g11:description>"        
		  +  "<g11:nom>nom1</g11:nom>"       
		  +  "<g11:id>id1</g11:id>"        
		 +   "</g1:marche>"     
		 + "</g1:creerMarche>"    
		+ "</soapenv:Body>" 
		+ "</soapenv:Envelope>";

All help are welcome.
Thanks in advance
Mta38

-- 
View this message in context: http://www.nabble.com/Is-it-possible-to-use-aggregator-with-xpath-tp20014324s22882p20014324.html
Sent from the Camel - Users mailing list archive at Nabble.com.