我在Fuse 6.1环境中使用camel-mybatis(版本2.12)组件来调用带有2个结果集的oracle SP。请求是一个HashMap,一旦mybatis将结果集映射到java bean,List就会再次保存在原始的HashMap中。
以下是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})}
以下是我调用mybatis组件的方法:
<setBody>
<groovy>
[
userId:'ID-1234',
maxResultsCount:20,
view:'MEMBER',
]
</groovy>
</setBody>
<to uri="mybatis:searchUsers?statementType=SelectOne" />
由于没有结果对象(所有结果都存储在原始请求的HashMap本身中),MyBatisProducer设置为null以交换OUT消息。包含存储过程结果的原始主体将丢失。
问题是:这是预期的行为吗? mybatis组件已经将结果存储在交换头中,那么为什么还要更新主体呢?
我必须做的解决方法是 - 将原始主体存储到标头,调用mybatis并从标头重置主体(现在具有存储过程结果):
<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]}" />
任何帮助将不胜感激..谢谢。
答案 0 :(得分:0)