无法使用MapStruct将属性String映射到JAXBElement <string>

时间:2017-09-02 13:47:53

标签: mapstruct jaxbelement

所以我正在玩Mapstruct,阅读版本1.1.0.Final的参考文档,并达到了这一点: implicit type conversions

其中定义了以下语句:

  

JAXBElement&lt; T&GT;和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发布了一个新版本。

我做错了什么或者这个功能真的丢失了吗?

谢谢。

3 个答案:

答案 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