所以我正在玩Mapstruct,阅读版本1.1.0.Final的参考文档,并达到了这一点: implicit type conversions
其中定义了以下语句:
JAXBElement< T>和T
我试过了,但我收到的错误是:
Can't map property "java.lang.String xmlElement" "javax.xml.bind.JAXBElement<java.lang.String> xmlElement".
Consider to declare/implement a mapping method:
javax.xml.bind.JAXBElement<java.lang.String> map(java.lang.String value)".
我知道thisi与Can't map property when using MapStruct是同一个帖子,但从那时起,Mapstruct发布了一个新版本。
我做错了什么或者这个功能真的丢失了吗?
谢谢。
答案 0 :(得分:0)
从JAXBElement<T>
到T
的映射即开箱即用。相反,您需要确保ObjectFactory
({1}}中有Mapper#uses
,MapStruct使用这些方法来创建类型。
您还可以查看this集成测试。
答案 1 :(得分:0)
如果在Java 9或更高版本上发生这种情况,并且您使用来自maven库的JAXBElement类型的实现(在我的情况下'javax.xml.bind:jaxb-api'
),请确保它位于注释处理器的类路径上-这为我解决了此问题
答案 2 :(得分:0)
如果您的JAXBElement是由wsdl客户端生成器(例如xjc)生成的,则需要提供由客户端生成器生成的对应的ObjectFactory.class:
@Mapper(uses = ObjectFactory.class)
public interface OrderMapper {
Order orderEntityToExternalOrder(OrderEntity orderEntity);
}
请参阅: MapStruct 1.0.0.Beta1 is out with JAXB support, custom factories, decorators and more