Я собирался создать проблему на github, но в шаблоне проблемы говорится, что я бы сначала обсудил ее здесь, поэтому здесь мы go:
Я пытаюсь использовать Mapstruct для генерации отображений из один сгенерированный WSDL набор сущностей другому. Однако без добавления метода «по умолчанию» (ручное отображение) он не работает! Это кажется странным, так как я ожидаю, что такое отображение не должно быть сложным для Mapstruct. репро случай здесь: https://github.com/62mkv/wsdl-mapstruct-repro-case
суть кода здесь:
@Mapper(uses = {
org.system.wsdl.legacy.ObjectFactory.class
})
public interface WsMapper {
org.system.wsdl.legacy.SellGarlicRequest fromCloud(org.system.wsdl.cloud.SellGarlicRequest request);
}
этот код не скомпилируется с таким сообщением:
Невозможно отобразить свойство "javax. xml .bind.JAXBElement inputParameters" на "javax. xml .bind.JAXBElement inputParameters". Попробуйте объявить / реализовать метод сопоставления: «javax. xml .bind.JAXBElement map (значение javax. xml .bind.JAXBElement)». org.system.wsdl.legacy.SellGarlicRequest fromCloud (запрос org.system.wsdl.cloud.SellGarlicRequest);
в основном, отображение будет go следующим образом: EntityNew -> JaxbElement -> FieldNew - > FieldOld -> JaxbElement -> EntityOld
, как я читал здесь ({ ссылка }), отображение из JaxbElement в T тривиально для MapStruct и для преобразования из T в JaxbElement один должен использовать аннотацию «использует» и предоставить ObjectFactory.class, что я делаю; однако ... кажется, этого недостаточно.
если я добавлю эти два метода, код скомпилируется хорошо:
org.system.wsdl.legacy.GarlicParameterCollection garlicParameterCollectionToGarlicParameterCollection(org.system.wsdl.cloud.GarlicParameterCollection collection);
default JAXBElement<org.system.wsdl.legacy.GarlicParameterCollection> garlicParameterCollectionToGarlicParameterCollection(JAXBElement<org.system.wsdl.cloud.GarlicParameterCollection> parameterCollectionJAXBElement) {
return new org.system.wsdl.legacy.ObjectFactory().createSellGarlicRequestInputParameters(
this.garlicParameterCollectionToGarlicParameterCollection(parameterCollectionJAXBElement.getValue())
);
}
это потенциальная проблема в mapstruct
или я просто не знаю, как его хорошо приготовить?