ato*_*man 2 java mapping jenkins orika
我正在尝试使用orikaDateMidnight将 a 映射到a 。但无论我尝试什么,我都会收到此错误LocalDatema.glasnost.orika.MappingException: No concrete class mapping defined for source class org.joda.time.chrono.ISOChronology。但它只在jenkins服务器(unix)上失败,在本地(win)上失败。
DateMidnight从到 的映射LocaleDate配置如下:
public LocaleDate convert(DateMidnight source, Type<? extends LocaleDate> destinationType) {
if (source == null) { return null; }
return new LocaleDate(source);
}
Run Code Online (Sandbox Code Playgroud)
无论如何,我尝试在 jodatime 中找到的年表之间添加具体映射。
例如
ISOChronology->ISOChronology
ISOChronology->Chronology
Chronology->ISOChronology
Chronology->Chronology
使用registerClassMap如下所示:
mapperFactory.registerClassMap(mapperFactory.classMap(ISOChronology.class, ISOChronology.class).byDefault().toClassMap());
ISOChronology->ISOChronology给我exception while creating object factory for org.joda.time.chrono.ISOChronology。
任何帮助将不胜感激
编辑 - 解决方案和更多信息
所以,我在第一次注册使用ObjectFactory后找到了一个解决方案ChronologyMapperFactory.registerObjectFactory.
然后代码失败并出现异常,解释为什么hoursInDay在创建LocaleDateTime. 现在,所有映射器都设置为从DateMidnightto映射LocaleDate,为什么它会尝试初始化一个LocaleDateTIme对象...下面是Period它尝试映射到的类(从内存写入)
public class Period {
public final LocaleDate from;
public final LocaleDate to;
public Period() {}//Rank: 0
public Period(LocaleDate from, LocaleDate to) {//Rank: 2000
this.from = from;
this.to = to;
}
public Period(LocaleDateTime from, LocaleDateTime to) {//Rank: 2000
this.from = from.toLocaleDate();
this.to = to.toLocaleDate();
}
}
Run Code Online (Sandbox Code Playgroud)
映射器从XMLPeriod到Period使用field("fom", "from")和field("to", "to")。
事实证明,Orika 的构造函数解析策略是基于启发式尝试找到具有可满足的最大参数数量的构造函数。但是,启发式方法不会考虑您已注册的映射或转换器,而纯粹查看参数名称。
由于最后两个构造函数具有相同的等级。然后它会忽略构造函数 using LocaleDate,并尝试使用initialize LocaleDateTime。然后残酷地失败,因为它没有参数顺序的概念LocaleDateTime(并且也会因为ISOChonology类似单例而失败,但这是固定的)
所以...我所有问题的解决方案...
//DONT change wtf name, orika-mappings will break.
public Period(LocaleDateTime from, LocaleDateTime wtf) {
this.from = from.toLocaleDate();
this.to = wtf.toLocaleDate();
}
Run Code Online (Sandbox Code Playgroud)
是的,重命名参数解决了问题......
附言。这可能不是解决这个问题的最佳方案。但这是一个解决方案。如果有人知道如何以更好的方式解决这个问题,请告诉我。
我遇到了类似的问题,您是否尝试以下操作,也许有帮助:
factory.getConverterFactory().registerConverter(new PassThroughConverter(org.joda.time.Chronology.class));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1523 次 |
| 最近记录: |