neoremind / easy-mapper Goto Github PK
View Code? Open in Web Editor NEWEasy-mapper is a simple, light-weighted, high performance java bean mapping framework
License: Apache License 2.0
Easy-mapper is a simple, light-weighted, high performance java bean mapping framework
License: Apache License 2.0
我创建了一个静态的 Mapper 对象,然后在其它地方使用该对象,看起来似乎没问题,但是在外部容器启动时,项目偶尔会报错,而且错误会一直持续,只能重启,请帮忙看看是什么原因?这个问题很久之前就有,一直没有找到原因,看更新日志 1.0.3 版本貌似解决了,但是我更新后还是会报错……
private static final Mapper mapper = MapperFactory.getCopyByRefMapper().mapClass(Prospect.class, ProspectVo.class).register();
mapper.map(source, ProspectVo.class);
Caused by: com.baidu.unbiz.easymapper.exception.MappingException: No class map found for (String, String), make sure type or nested type is registered beforehand
at com.baidu.unbiz.easymapper.CopyByRefMapper.map(CopyByRefMapper.java:157)
at com.baidu.unbiz.easymapper.CopyByRefMapper.map(CopyByRefMapper.java:116)
at com.baidu.unbiz.generated.EasyMapper_Prospect_TO_ProspectVo_Mapper63926513617948576$0.map(EasyMapper_Prospect_TO_ProspectVo_Mapper63926513617948576$0.java)
at com.baidu.unbiz.easymapper.CopyByRefMapper.map(CopyByRefMapper.java:176)
at com.baidu.unbiz.easymapper.CopyByRefMapper.map(CopyByRefMapper.java:116)
at com.github.trang.copiers.mapper.MapperCopier.copy(MapperCopier.java:40)
... 156 common frames omitted
Class A 和 Class B extend A的两个对象之间进行映射,好像不能直接用。this should not happen, probably the framework could not handle mapping correctly based on your bean
但我又不能直接写一个AtoBMapping的接口,因为Class B是javassist动态生成的类。
I found it seem to be unable to do this ,and I thought it might be useful.Would you like to support this feature ?
The exception looks like:
2017-07-01 00:02:51.338 | ERROR in c.h.a.a.e.e.AbstractExceptionMapper.toResponse(25) [|Jetty-Server-67] els-ass-160 user_id= hulu_request_id=a3441bf4-2996-443c-a561-1a90dc2fdaef path=GET_deletion_uid - Generating mapping code failed for ClassMap([A]:DeletionUid, [B]:DeletionUidDto), this should not happen, probably the framework could not handle mapping correctly based on your bean [java] [els-ass-160]
com.baidu.unbiz.easymapper.exception.MappingException: Generating mapping code failed for ClassMap([A]:DeletionUid, [B]:DeletionUidDto), this should not happen, probably the framework could not handle mapping correctly based on your bean [java] [els-ass-160]
at com.baidu.unbiz.easymapper.CopyByRefMapper.map(CopyByRefMapper.java:169) ~[app.jar:na] [java] [els-ass-160]
at com.baidu.unbiz.easymapper.CopyByRefMapper.map(CopyByRefMapper.java:116) ~[app.jar:na] [java] [els-ass-160]
at com.baidu.unbiz.easymapper.ClassMapBuilder.registerAndMap(ClassMapBuilder.java:241) ~[app.jar:na] [java] [els-ass-160]
at com.hulu.ap.meta.api.DeletionUidApi$1.apply(DeletionUidApi.java:119) ~[app.jar:na] [java] [els-ass-160]
at com.hulu.ap.meta.api.DeletionUidApi$1.apply(DeletionUidApi.java:115) ~[app.jar:na] [java] [els-ass-160]
at com.hulu.ap.meta.api.DeletionUidApi.getLatest(DeletionUidApi.java:80) ~[app.jar:na] [java] [els-ass-160]
and it keeps occurring if the following exception happens when application startup.
2017-07-01 00:02:51.141 | ERROR in c.b.u.e.codegen.MappingCodeGenerator.build(79) [|Jetty-Server-67] els-ass-160 user_id= hulu_request_id=a3441bf4-2996-443c-a561-1a90dc2fdaef path=GET_deletion_uid - Generating mapping code with error: null [java] [els-ass-160]
java.util.NoSuchElementException: null [java] [els-ass-160]
at sun.misc.CompoundEnumeration.nextElement(CompoundEnumeration.java:59) ~[na:1.8.0_92] [java] [els-ass-160]
at java.util.ServiceLoader$LazyIterator.hasNextService(ServiceLoader.java:357) ~[na:1.8.0_92] [java] [els-ass-160]
at java.util.ServiceLoader$LazyIterator.hasNext(ServiceLoader.java:393) ~[na:1.8.0_92] [java] [els-ass-160]
at java.util.ServiceLoader$1.hasNext(ServiceLoader.java:474) ~[na:1.8.0_92] [java] [els-ass-160]
at com.baidu.unbiz.easymapper.mapping.DefaultMappingStrategy.generateMappingCode(DefaultMappingStrategy.java:43) ~[app.jar:na] [java] [els-ass-160]
at com.baidu.unbiz.easymapper.codegen.MappingCodeGenerator.generateMappingCode(MappingCodeGenerator.java:141) ~[app.jar:na] [java] [els-ass-160]
at com.baidu.unbiz.easymapper.codegen.MappingCodeGenerator.addMapMethod(MappingCodeGenerator.java:106) ~[app.jar:na] [java] [els-ass-160]
at com.baidu.unbiz.easymapper.codegen.MappingCodeGenerator.build(MappingCodeGenerator.java:68) ~[app.jar:na] [java] [els-ass-160]
at com.baidu.unbiz.easymapper.CopyByRefMapper$2.compute(CopyByRefMapper.java:165) [app.jar:na] [java] [els-ass-160]
at com.baidu.unbiz.easymapper.CopyByRefMapper$2.compute(CopyByRefMapper.java:162) [app.jar:na] [java] [els-ass-160]
at com.baidu.unbiz.easymapper.util.Memoizer$1.call(Memoizer.java:67) [app.jar:na] [java] [els-ass-160]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_92] [java] [els-ass-160]
at com.baidu.unbiz.easymapper.util.Memoizer.compute(Memoizer.java:73) [app.jar:na] [java] [els-ass-160]
at com.baidu.unbiz.easymapper.CopyByRefMapper.map(CopyByRefMapper.java:160) [app.jar:na] [java] [els-ass-160]
MappingCodeGenerationException: No appropriate mapping strategy found for FieldMap[closeState(Integer)-->closeState(Integer)]
RT, 测试好像没效果, 文档也没提啊
What should I do if I want to copy Array
and Interface
( like List
) ?
There is a low-level way to solve the second question. Hope you have a better one.
Mapper register = MapperFactory.getCopyByRefMapper().mapClass(UserForm.class, UserView.class)
.field("persons", "persons", (List list) -> Lists.newArrayList(list))
.register();
UserView view = register.map(form, UserView.class);
偶然看到该项目的灵感来自于 Orika,看了 Orika 的介绍没找到 EasyMapper 中 Transformer
的功能,即创建 ClassMap
时建立不同类型之间的关联关系,请问您知道 Orika
中支持这种操作吗?
It seems that it's more reasonable to include the log API but not log IMPLEMETATION in most toolkits.The user may choose the implementation by himself/herself.
BTW,the feature of auto-registering may make this toolkit more convenient.
What should I do if I want to copy Array
and Interface
( like List
) ?
There is a low-level way to solve the second question. Hope you have a better one.
Mapper register = MapperFactory.getCopyByRefMapper().mapClass(UserForm.class, UserView.class)
.field("persons", "persons", (List list) -> Lists.newArrayList(list))
.register();
UserView view = register.map(form, UserView.class);
RT, 如果是就太过分了吧...
你好,非常感谢这个项目,想问下是否考虑后期支持属性的表达式计算。例如:我vo里面的自断是po里面的多个自断拼接的结果。能否提供表达式?
当已经存在一个A to B的映射,再映射B to A,拷贝B对象到A对象时会报转换异常ClassCastException
UserEntity target = MapperFactory.getCopyByRefMapper().mapClass(User.class, UserEntity.class).register()
.map(source, UserEntity.class);
System.out.println(target);
User secondTarget = MapperFactory.getCopyByRefMapper().mapClass(UserEntity.class, User.class).register()
.map(target, User.class);
System.out.println(secondTarget);
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.