Apache Camel sql-component Не удалось преобразовать во внутреннее представление
Когда я использую sql-compenent
извлекать записи из базы данных как Map<String,Object>
все в порядке.
<to uri="sql-clsivtrk:{{clsiv_tracker_config_se}}?outputType=SelectOne" />
Но когда я определяю outputClass
как это:
<to uri="sql-clsivtrk:{{clsiv_tracker_config_se}}?outputType=SelectOne&outputClass=br.com.rwit.clsi.m2m.rs.model.TrackerConfig" />
Я получил ошибку java.sql.SQLException: Fail to convert to internal representation
Message History
---------------------------------------------------------------------------------------------------------------------------------------
RouteId ProcessorId Processor Elapsed (ms)
[route9 ] [route9 ] [servlet:/events/config?httpMethodRestrict=PUT ] [ 93]
[route9 ] [to39 ] [direct:save-config ] [ 0]
[tracker-configurat] [convertBodyTo4 ] [convertBodyTo[java.lang.String] ] [ 0]
[tracker-configurat] [unmarshal4 ] [unmarshal[ref:trackerConfigJsonList] ] [ 2]
[tracker-configurat] [log4 ] [log ] [ 1]
[tracker-configurat] [split3 ] [split[simple{${body}}] ] [ 6]
[tracker-configurat] [to6 ] [sql-tracker:{{tracker_config_se}}?outputType=SelectOne&outputClass=br.com.acme] [ 83]
Stacktrace
---------------------------------------------------------------------------------------------------------------------------------------
org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException; SQL state [99999]; error code [17059]; Fail to convert to internal representation; nested exception is java.sql.SQLException: Fail to convert to internal representation
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:89)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1402)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:620)
at org.apache.camel.component.sql.SqlProducer.process(SqlProducer.java:116)
at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:148)
Caused by: java.sql.SQLException: Fail to convert to internal representation
at oracle.jdbc.driver.CharCommonAccessor.getBoolean(CharCommonAccessor.java:185)
at oracle.jdbc.driver.T4CVarcharAccessor.getBoolean(T4CVarcharAccessor.java:794)
at oracle.jdbc.driver.OracleResultSetImpl.getBoolean(OracleResultSetImpl.java:640)
at com.sun.gjc.spi.base.ResultSetWrapper.getBoolean(ResultSetWrapper.java:169)
at org.springframework.jdbc.support.JdbcUtils.getResultSetValue(JdbcUtils.java:148)
at org.springframework.jdbc.core.BeanPropertyRowMapper.getColumnValue(BeanPropertyRowMapper.java:377)
at org.springframework.jdbc.core.BeanPropertyRowMapper.mapRow(BeanPropertyRowMapper.java:298)
at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:93)
at org.apache.camel.component.sql.DefaultSqlEndpoint.queryForObject(DefaultSqlEndpoint.java:488)
at org.apache.camel.component.sql]]
мой outputType
import java.util.Calendar;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Calendar;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
public class TrackerConfig
{
private static final String HOST1 = "http://locahost/";
private static final String HOST2 = "http://localhost/";
private static final String CONTEXT = "my-ctx/";
private static final String API = "api/";
private static final int DEFAULT_INTERVAL_TRANSM = 60;
private static final int DEFAUL_INTERVAL_CAPT = 30;
private static final int DEFAUL_BATCHSIZE = 100;
private static final int DEFAUL_RENEW_CONF = 3600;
private String deviceImei1;
private String deviceImei2;
private String phoneNumber;
private String deviceSO;
private String deviceModel;
private String deviceSNumber;
private String myIp;
private String host1;
private String host2;
private String context;
private String api;
private Number intervalOftransmission;
private Number intervalOfCapture;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
private Date captureBegin;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
private Date captureFinal;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
private Date transmissionBegin;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
private Date transmissionFinal;
private Double minDistance;
private Double maxDistance;
private Number intervalOfRenewConfig;
private String levelConfig;
private String deprecated;
private String route;
private String version;
private Double accuracy;
private Number batchSize;
public TrackerConfig()
{
this.intervalOftransmission = DEFAULT_INTERVAL_TRANSM;
this.intervalOfCapture = DEFAUL_INTERVAL_CAPT;
this.batchSize = DEFAUL_BATCHSIZE;
this.intervalOfRenewConfig = DEFAUL_RENEW_CONF;
this.captureBegin = newTime(7, 0, 0);
this.captureFinal = newTime(18, 0, 0);
this.transmissionBegin = newTime(4, 6, 0);
this.transmissionFinal = newTime(23, 59, 59);
this.minDistance = 10D;
this.maxDistance = 10001D;
this.host1 = HOST1;
this.host2 = HOST2;
this.context = CONTEXT;
this.api = API;
this.levelConfig = "INFO";
}
// ommit getters and setters
}
с помощью 2.22.2
1 ответ
Не могли бы вы показать свой outputClass
?
Под outputType
Говорится:
Сделайте вывод потребителя или производителя в SelectList в качестве List of Map или SelectOne в качестве отдельного Java-объекта следующим образом: a) Если запрос имеет только один столбец, возвращается этот объект JDBC Column. (например, SELECT COUNT() FROM PROJECT вернет объект Long. b) Если запрос имеет более одного столбца, он вернет карту этого результата. c) Если установлен выходной класс, он преобразует результат запроса в объект Java-бина, вызывая все установщики, которые соответствуют именам столбцов. Предполагается, что у вашего класса есть конструктор по умолчанию для создания экземпляра. d) Если запрос дал более одной строки, он генерирует неуникальное исключение результата.
Одна из вещей, которая должна быть сделана, состоит в том, что имена столбцов должны соответствовать установщикам, и должен присутствовать конструктор по умолчанию. Это тот случай?