0

I am using retrieving value from oracle database, I want to pass this parameter to setpayload component in mule ESB 3.4.

I am passing my parameter in below format.

'#[{10,2,payload[0]['rate'],payload[0]['name']}]'

I am getting an argument type mismatch error.

How to pass the parameter , please help me with correct syntax.

Thanks in advance

Here is my xml code

<jdbc-ee:oracle-data-source name="Oracle_Data_Source" user="abcd" password="123434" url="jdbc:oracle:thin:@//localhost:1522/xe" transactionIsolation="UNSPECIFIED" doc:name="Oracle Data Source"/>
<jdbc-ee:connector name="Database" dataSource-ref="Oracle_Data_Source" validateConnections="true" queryTimeout="-1" pollingFrequency="0" doc:name="Database">
    <jdbc-ee:query key="Select" value="select applicant_name,rate from interestcalculation where applicant_name = #[message.payload]"/> </jdbc-ee:connector>

<flow name="SetApplicantNameflow" doc:name="SetApplicantNameflow">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8082" doc:name="HTTP" path="interest"/>
    <set-payload value="kanagaraj" doc:name="ApplicantName"/>
    <jdbc-ee:outbound-endpoint exchange-pattern="request-response" queryKey="Select" queryTimeout="-1" connector-ref="Database" doc:name="Applicant Rate"/>
    <logger message="#[payload[0]['RATE']],#[payload[0]['APPLICANT_NAME']]" level="INFO" doc:name="Logger"/>
    <flow-ref name="interestcalcultionflow" doc:name="InterestCalculationFlow Reference"/>
    <jdbc-ee:outbound-endpoint exchange-pattern="request-response" queryKey="update" queryTimeout="-1" connector-ref="Database" doc:name="Save interest">
        <jdbc-ee:query key="update" value="update interestcalculation set interest = #[message.payload.interest] where appid= #[message.payload.appid]"/>
    </jdbc-ee:outbound-endpoint>
    <mulexml:object-to-xml-transformer doc:name="Object to XML"/>
</flow>
<sub-flow name="interestcalcultionflow" doc:name="interestcalcultionflow">
    <set-payload value="#[{1,10,payload[0]['RATE'],payload[0]['APPLICANT_NAME']}]" doc:name="Principle,years&amp; Rates"/>
    <cxf:jaxws-client  clientClass="pack.interest.InterestclassService"  doc:name="SOAP" operation="calculateInterest" port="interestclassPort"/>
    <http:outbound-endpoint exchange-pattern="request-response" method="POST" address="http://localhost:8080/calculateInterest/services/interestclassPort" doc:name="HTTP"/>
</sub-flow>`
Mangoski
  • 2,058
  • 5
  • 25
  • 43
  • Please include a complete flow & stack trace, and preferably also use logger to print out the payload before the failing component. – Anton Kupias Apr 07 '14 at 14:27
  • @AntonKupias Hi edited my question with xml format I am passing my parameter in set payload component – Mangoski Apr 07 '14 at 14:40
  • @AntonKupias Or I like to know how to pass parmaeters dynamically via setpayload component. – Mangoski Apr 07 '14 at 14:47
  • I am confused. Your question talks about passing a database result to set-component, but in your flow you try to parse an http call as an array, and your db query is named "Insert". Also I cannot say what is going on in your flow, as it is mostly references to services/components that you are not sharing. – Anton Kupias Apr 07 '14 at 14:51

1 Answers1

0

You can get the set-payload to work correctly by doing

<set-payload value="#[{1,10,(payload[0]['rate']),(payload[0]['applicant_name'])}]"/>
Anton Kupias
  • 3,945
  • 3
  • 16
  • 20
  • Now I am getting this error "null. Failed to route event via endpoint: org.mule.module.cxf.CxfOutboundMessageProcessor. Message payload is of type: Object[]" – Mangoski Apr 08 '14 at 06:47
  • Well, that would be something related to your cxf:jaxws-client to which you are passing the array that is set with set-payload. – Anton Kupias Apr 08 '14 at 06:50
  • Can you please help me by providing a sample like how the cxf:jaxws-client would be written or configured. – Mangoski Apr 08 '14 at 06:54
  • @Anon Kupias I found the error ,I just need to type cast the parameter passing to web service. Thanks Anton. – Mangoski Apr 08 '14 at 08:40