我正在尝试使用 orika 将 DateMidnight
映射到 LocalDate
。但无论我尝试什么,我都会收到此错误 ma.glasnost.orika.MappingException:没有为源类 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);
}
无论如何,我尝试在 jodatime 中找到的年表之间添加具体映射。
例如
ISOChronology
-> ISOChronology
ISOChronology
-> 年表
年表
-> ISOChronology
年表
-> 年表
使用registerClassMap
,如下所示:
mapperFactory.registerClassMap(mapperFactory.classMap(ISOChronology.class, ISOChronology.class).byDefault().toClassMap());
ISOChronology
-> ISOChronology
在为 org.joda.time.chrono.ISOChronology 创建对象工厂时出现异常
。
任何帮助将不胜感激
编辑 - 解决方案和更多信息
因此,我在首先使用 MapperFactory.registerObjectFactory
为 Chronology
注册 ObjectFactory
后找到了解决方案。
代码随后失败并出现异常,解释了在创建 LocaleDateTime
时 280 为何不是 hoursInDay
的有效值。现在,所有映射器都设置为从 DateMidnight
映射到 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();
}
}
从 XMLPeriod
到 Period
的映射器使用 field("fom", "from")
和 field("to",“到”)
。
事实证明,Orika 的构造函数解析策略是基于启发式尝试找到具有可满足的最大参数数量的构造函数。但是,启发式方法不会考虑您已注册的映射或转换器,而纯粹查看参数名称。
因为最后两个构造函数具有相同的等级。然后,它会忽略使用 LocaleDate
的构造函数,并尝试使用初始化 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();
}
是的,重命名参数解决了问题......
PS。这可能不是解决这个问题的最佳方案。但这是一个解决方案。如果有人知道如何以更好的方式解决这个问题,请告诉我。最佳答案
我遇到了类似的问题,您是否尝试以下操作,也许有帮助:
factory.getConverterFactory().registerConverter(new PassThroughConverter(org.joda.time.Chronology.class));
关于java - jodatime DateMidnight 的 Orika 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35130700/