1

所以我玩了一下 Mapstruct,阅读了版本 1.1.0.Final 的参考文档,并到达了重点: 隐式类型转换

其中定义了以下语句:

在 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在使用 MapStruct 时与 Can't map property是同一个线程,但从那时起 Mapstruct 发布了一个新版本。

我做错了什么还是这个功能真的缺失了?

谢谢你。

4

3 回答 3

0

如果这发生在 Java 9 或更高版本上,并且您使用来自 maven 库的 JAXBElement 类型的实现(在我的情况下'javax.xml.bind:jaxb-api'),请确保它位于注释处理器的类路径上 - 这为我解决了这个问题。

于 2019-01-15T13:00:52.587 回答
0

如果您的 JAXBElement 是由 wsdl 客户端生成器(例如 xjc)生成的,您需要提供客户端生成器生成的相应 ObjectFactory.class:

@Mapper(uses = ObjectFactory.class)
public interface OrderMapper {
    Order orderEntityToExternalOrder(OrderEntity orderEntity);
}

请参阅: MapStruct 1.0.0.Beta1 已推出,支持 JAXB、自定义工厂、装饰器等

于 2020-08-10T01:23:20.790 回答
0

映射 fromJAXBElement<T>T开箱即用。相反,您需要确保ObjectFactory(ies) 在 中Mapper#uses,MapStruct 使用这些方法来创建类型。

您还可以查看集成测试。

于 2017-09-02T15:33:55.500 回答