Apache Camel 2.11.0,  2.10.4

Below route does not return "foo"


=========
<route xmlns="http://camel.apache.org/schema/spring"; trace="true">
  <from uri="servlet:///nimbus/testTryCatch"/>
    <setHeader headerName="foo">
        <constant>bar</constant>
    </setHeader>
    
    <doTry>
        
        <setHeader headerName="MAP_NAME">
            <constant>fooName</constant>
        </setHeader>
        <setHeader headerName="MAP_KEY">
            <constant>bar</constant>
        </setHeader>
      <to uri="bean:myService?method=getMapEntry"/>
    
        <doCatch>
            <exception>java.lang.Throwable</exception>
        </doCatch>
    </doTry>

     <setBody>
        <header>foo</header>
    </setBody>
</route>


class myServices
{
public void getMapEntry(Exchange e) {
def EEL_METHOD = "getMapEntry"
def mapKey
def mapName
try{
mapKey = e.getIn().getHeader("MAP_KEY", String.class)
mapName =e.getIn().getHeader("MAP_NAME", String.class)
// support inout pattern
def headers = e.getIn().getHeaders()

def res = this.getMap(mapName).get(mapKey)
if( res != null){
headers.put("CACHE_ENTRY_FOUND", "true")
e.getOut().setBody( res )

}else{
headers.put("CACHE_ENTRY_FOUND", "false")
// support inout pattern
e.getOut().setBody( e.getIn().getBody() )

}

e.getOut().setHeaders(headers)

}catch(all){

throw all
}
}
}

Below route does return "foo" since i removed try catch
=========

<route xmlns="http://camel.apache.org/schema/spring"; trace="true">
  <from uri="servlet:///nimbus/testTryCatch"/>
    <setHeader headerName="foo">
        <constant>bar</constant>
    </setHeader>
    
   
        
        <setHeader headerName="MAP_NAME">
            <constant>fooName</constant>
        </setHeader>
        <setHeader headerName="MAP_KEY">
            <constant>bar</constant>
        </setHeader>
      <to uri="bean:myService?method=getMapEntry"/>
       <setBody>
        <header>foo</header>
    </setBody>
</route>



Below route does return "foo"  since i add  <to uri="mock:results"/>  that
set exchange.out= exchange.in
========

<route xmlns="http://camel.apache.org/schema/spring"; trace="true">
  <from uri="servlet:///nimbus/tesTryCatch"/>
    <setHeader headerName="foo">
        <constant>bar</constant>
    </setHeader>
    
    <doTry>
        
        <setHeader headerName="MAP_NAME">
            <constant>fooName</constant>
        </setHeader>
        <setHeader headerName="MAP_KEY">
            <constant>bar</constant>
        </setHeader>
      <to uri="bean:myService?method=getMapEntry"/>
       
      <to uri="mock:results"/>
        <doCatch>
            <exception>java.lang.Throwable</exception>
        </doCatch>
    </doTry>

     <setBody>
        <header>foo</header>
    </setBody>
</route>


Also if i changes myService method to set exchange.out =  exchange.in it
works.


class myServices
{
public void getMapEntry(Exchange e) {

def mapKey
def mapName
//I added e.setOut(e.getIn())
e.setOut(e.getIn()) 

try{
mapKey = e.getIn().getHeader("MAP_KEY", String.class)
mapName =e.getIn().getHeader("MAP_NAME", String.class)
// support inout pattern
def headers = e.getIn().getHeaders()

def res = this.getMap(mapName).get(mapKey)
if( res != null){
headers.put("CACHE_ENTRY_FOUND", "true")
e.getOut().setBody( res )

}else{
headers.put("CACHE_ENTRY_FOUND", "false")
// support inout pattern
e.getOut().setBody( e.getIn().getBody() )

}

e.getOut().setHeaders(headers)

}catch(all){

throw all
}
}
}


I believe it occurred in any Async processor.


Thanks for your help!!!   



--
View this message in context: 
http://camel.465427.n5.nabble.com/Route-with-doTry-calling-service-does-not-have-exchange-in-exchange-out-does-not-work-tp5732293.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to