Невозможно отобразить свойство String в JAXBElement<String>, используя MapStruct
Поэтому я немного поиграл с Mapstruct, прочитав справочную документацию для версии 1.1.0.Final, и пришел к выводу: неявные преобразования типов
где определяется следующее утверждение:
Между JAXBElement
и 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)".
Я знаю, что это тот же поток, что и Невозможно отобразить свойство при использовании MapStruct, но с тех пор Mapstruct выпустила новую версию.
Я делаю что-то не так или эта функция действительно отсутствует?
Спасибо.
1 ответ
Картография от JAXBElement<T>
в T
работает из коробки. Для обратного вы должны убедиться, что ObjectFactory
(ы) находятся в Mapper#uses
MapStruct использует эти методы для создания типов.
Вы также можете взглянуть на этот интеграционный тест.
Если ваш JAXBElement был сгенерирован генератором клиента wsdl (например, xjc), вам необходимо предоставить соответствующий ObjectFactory.class, созданный генератором клиента:
@Mapper(uses = ObjectFactory.class)
public interface OrderMapper {
Order orderEntityToExternalOrder(OrderEntity orderEntity);
}
В случае, если это происходит на Java 9 или выше, и вы используете реализацию типа JAXBElement из библиотеки Maven (в моем случае'javax.xml.bind:jaxb-api'
) убедитесь, что он находится на пути к классам процессора аннотаций - это решило проблему для меня.