Hi,
Our team is trying to upgrade to camel 3.14.4 from camel 2.25.1
We use mybatis with camel-mybatis.
In 2.25.1 was possible to set Map as body to camel parameter binding:
Example:
Mybatis Mapper:
@Insert(value = "INSERT INTO TABLE_X (COL1, COL2, COL2) VALUES (#{col1},
#{col2}, #{col3})")
void insertRecord(
@Param("col1") String col1,
@Param("col2") String col2,
@Param("col3") String col3);
Camel:
.process(exchange -> {
Map<String, String> params = new HashMap<>();
params.put("col1", "a");
params.put("col2", "b");
params.put("col3", "c");
exchange.getIn().setBody(params);
})
.to("mybatis:insertRecord?statementType=Insert&transacted=true")
After migrating to 3.14.4 following error is received:
Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter
for property named 'col1' in 'class java.util.HashMap$Node'
After having a look on the code looks like issue is caused by
org.apache.camel.support.ObjectHelper used in
org.apache.camel.component.mybatis.MyBatisProducer
MyBatisProducer Line 129 Iterator<?> iter =
ObjectHelper.createIterator(in);
ObjectHelper Line 693 } else if (value instanceof Map) {
Map<?, ?> map = (Map<?, ?>) value;
return map.entrySet();
}
In version 2.25.1 the create iterator did not had this piece of code so it
allowed support to use Map for parameter binding
---
Die Europ?ische Kommission hat unter http://ec.europa.eu/consumers/odr/ eine
Europ?ische Online-Streitbeilegungsplattform (OS-Plattform) errichtet.
Verbraucher k?nnen die OS-Plattform f?r die au?ergerichtliche Beilegung von
Streitigkeiten aus Online-Vertr?gen mit in der EU niedergelassenen Unternehmen
nutzen.
Informationen (einschlie?lich Pflichtangaben) zu einzelnen, innerhalb der EU
t?tigen Gesellschaften und Zweigniederlassungen des Konzerns Deutsche Bank
finden Sie unter https://www.deutsche-bank.de/Pflichtangaben. Diese E-Mail
enth?lt vertrauliche und/ oder rechtlich gesch?tzte Informationen. Wenn Sie
nicht der richtige Adressat sind oder diese E-Mail irrt?mlich erhalten haben,
informieren Sie bitte sofort den Absender und vernichten Sie diese E-Mail. Das
unerlaubte Kopieren sowie die unbefugte Weitergabe dieser E-Mail ist nicht
gestattet.
The European Commission has established a European online dispute resolution
platform (OS platform) under http://ec.europa.eu/consumers/odr/. Consumers may
use the OS platform to resolve disputes arising from online contracts with
providers established in the EU.
Please refer to https://www.db.com/disclosures for information (including
mandatory corporate particulars) on selected Deutsche Bank branches and group
companies registered or incorporated in the European Union. This e-mail may
contain confidential and/or privileged information. If you are not the intended
recipient (or have received this e-mail in error) please notify the sender
immediately and delete this e-mail. Any unauthorized copying, disclosure or
distribution of the material in this e-mail is strictly forbidden.