[
https://issues.apache.org/jira/browse/CAMEL-7432?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Narayanan Harihara updated CAMEL-7432:
--------------------------------------
Description:
I am using camel-mybatis (version 2.12.0) component in Fuse 6.1 environment to
invoke an oracle SP with 2 resultsets. The request is a HashMap and once
mybatis maps the resultsets to java beans, the List is again saved in the
original HashMap itself.
Here is the snippet of SqlMap:
<select
id="searchUsers"
parameterType="java.util.HashMap"
statementType="CALLABLE">
{call ORACLE.SP_NAME_1(
#{userId,mode=IN,jdbcType=VARCHAR},
#{maxResultsCount,mode=IN,jdbcType=DECIMAL},
#{view,mode=IN,jdbcType=VARCHAR},
#{statusInfo,mode=OUT,jdbcType=CURSOR,resultMap=statusInfoRowMap},
#{memberInfo,mode=OUT,jdbcType=CURSOR,resultMap=claimInfoRowMap})}
And here is how I invoke the mybatis component:
<setBody>
<groovy>
[
userId:'ID-1234',
maxResultsCount:20,
view:'MEMBER',
]
</groovy>
</setBody>
<to uri="mybatis:searchUsers?statementType=SelectOne" />
Since there are no result object (all the results are stored in the original
requested HashMap itself), MyBatisProducer is setting null to exchange OUT
message. The original body which contains the results from stored procedure is
lost.
The Question is: is this the expected behaviour? mybatis component already
stores the result in exchange header, so why to update the body as well?
The workaround I had to do was - to store the original body to a header, invoke
mybatis and reset body from the header (which has the stored procedure result
now) :
<setBody>
<groovy>
[
userId:'ID1234',
maxResultsCount:20,
view:'MEMBER'
]
</groovy>
</setBody>
<setHeader headerName="originalRequest">
<simple>${body}</simple>
</setHeader>
<to uri="mybatis:searchUsers?statementType=SelectOne" />
<setBody>
<simple>${in.headers.originalRequest}</simple>
</setBody>
<log message="status: ${body.statusInfo}" />
was:
I am using camel-mybatis (version 2.12.0) component in Fuse 6.1 environment to
invoke an oracle SP with 2 resultsets. The request is a HashMap and once
mybatis maps the resultsets to java beans, the List is again saved in the
original HashMap itself.
Here is the snippet of SqlMap:
<select
id="searchUsers"
parameterType="java.util.HashMap"
statementType="CALLABLE">
{call ORACLE.SP_NAME_1(
#{userId,mode=IN,jdbcType=VARCHAR},
#{maxResultsCount,mode=IN,jdbcType=DECIMAL},
#{view,mode=IN,jdbcType=VARCHAR},
#{statusInfo,mode=OUT,jdbcType=CURSOR,resultMap=statusInfoRowMap},
#{memberInfo,mode=OUT,jdbcType=CURSOR,resultMap=claimInfoRowMap})}
And here is how I invoke the mybatis component:
<setBody>
<groovy>
[
userId:'ID-1234',
maxResultsCount:20,
view:'MEMBER',
]
</groovy>
</setBody>
<to uri="mybatis:searchUsers?statementType=SelectOne" />
Since there are no result object (all the results are stored in the original
requested HashMap itself), MyBatisProducer is setting null to exchange OUT
message. The original body which contains the results from stored procedure is
lost.
The Question is: is this the expected behaviour? mybatis component already
stores the result in exchange header, so why to update the body as well?
The workaround I had to do was - to store the original body to a header, invoke
mybatis and reset body from the header (which has the stored procedure result
now) :
<setBody>
<groovy>
[
userId:'ID1234',
maxResultsCount:20,
view:'MEMBER'
]
</groovy>
</setBody>
<setHeader headerName="originalRequest">
<simple>${body}</simple>
</setHeader>
<to uri="mybatis:searchUsers?statementType=SelectOne" />
<setBody>
<simple>${in.headers.originalRequest}</simple>
</setBody>
<log message="status: ${body.statusInfo}" />
> camel-mybatis - issues with calling Oracle Stored procedure with multiple
> resultsets
> ------------------------------------------------------------------------------------
>
> Key: CAMEL-7432
> URL: https://issues.apache.org/jira/browse/CAMEL-7432
> Project: Camel
> Issue Type: Bug
> Components: camel-mybatis
> Affects Versions: 2.12.0
> Reporter: Narayanan Harihara
>
> I am using camel-mybatis (version 2.12.0) component in Fuse 6.1 environment
> to invoke an oracle SP with 2 resultsets. The request is a HashMap and once
> mybatis maps the resultsets to java beans, the List is again saved in the
> original HashMap itself.
> Here is the snippet of SqlMap:
> <select
> id="searchUsers"
> parameterType="java.util.HashMap"
> statementType="CALLABLE">
> {call ORACLE.SP_NAME_1(
> #{userId,mode=IN,jdbcType=VARCHAR},
> #{maxResultsCount,mode=IN,jdbcType=DECIMAL},
> #{view,mode=IN,jdbcType=VARCHAR},
> #{statusInfo,mode=OUT,jdbcType=CURSOR,resultMap=statusInfoRowMap},
> #{memberInfo,mode=OUT,jdbcType=CURSOR,resultMap=claimInfoRowMap})}
> And here is how I invoke the mybatis component:
> <setBody>
> <groovy>
> [
> userId:'ID-1234',
> maxResultsCount:20,
> view:'MEMBER',
> ]
> </groovy>
> </setBody>
> <to uri="mybatis:searchUsers?statementType=SelectOne" />
> Since there are no result object (all the results are stored in the original
> requested HashMap itself), MyBatisProducer is setting null to exchange OUT
> message. The original body which contains the results from stored procedure
> is lost.
> The Question is: is this the expected behaviour? mybatis component already
> stores the result in exchange header, so why to update the body as well?
> The workaround I had to do was - to store the original body to a header,
> invoke mybatis and reset body from the header (which has the stored procedure
> result now) :
> <setBody>
> <groovy>
> [
> userId:'ID1234',
> maxResultsCount:20,
> view:'MEMBER'
> ]
> </groovy>
> </setBody>
> <setHeader headerName="originalRequest">
> <simple>${body}</simple>
> </setHeader>
> <to uri="mybatis:searchUsers?statementType=SelectOne" />
> <setBody>
> <simple>${in.headers.originalRequest}</simple>
> </setBody>
> <log message="status: ${body.statusInfo}" />
--
This message was sent by Atlassian JIRA
(v6.2#6252)