Вопрос или проблема
Здравствуйте, есть ли у нас возможность убрать эту проверку на null?
Когда мы используем AXIS2, все работает нормально, но так как он не поддерживает Jakarta, мы перешли на Springws с генерацией wsimport. Однако при создании pojo здесь происходит проверка на null и создается новый 0-й элемент. На стороне клиента у них проверка array != null во многих местах, так что мы не можем сказать им, чтобы они проверяли пустоту вместе с null.
Единственное решение – избавиться от этой проверки на null и создать новый 0-й элемент.
Пожалуйста, ПОМОГИТЕ, заранее спасибо.
wsdlFiles.each { wsdlFile ->
ant {
taskdef(name: ‘wsimport’,
classname: ‘com.sun.tools.ws.ant.WsImport’,
classpath: configurations.jaxws.asPath
)
wsimport(
keep: true,
destdir: jaxwsSourceDir,
extension: “true”,
verbose: true,
wsdl: “${projectDir}/src/main/xsd/Service/”+ wsdlFile+ “.wsdl”,
xnocompile: true
) {
binding(dir:”${projectDir}/src/jaxws”, includes:”dataTypeBinding.xml,jaxwsHolderBinding.xml”)
xjcarg(value: “-XautoNameResolution”)
}
}
}
Ответ или решение
Здравствуйте!
Судя по вашему запросу, вы сталкиваетесь с необходимостью устранения проверок на null в генерируемых POJO-классах при использовании wsimport в Spring WS. Это проблема, с которой обычно сталкиваются при переключении с одного фреймворка на другой, особенно когда разные фреймворки обрабатывают генерацию кода по-разному.
Хотя в случае с Axis2 вы не сталкивались с подобной проблемой, в Spring WS действительно может автоматически генерироваться код, который включает проверки на null и создает пустой массив при отсутствии значений. Чтобы устранить эту проверку и обеспечить создание нового элементарного значения (в вашем случае это может быть элемент с индексом 0), вы можете использовать следующий подход:
-
Обновите файл Binding (dataTypeBinding.xml): Вам нужно добавить кастомный мэппинг в ваш файл привязки, чтобы изменить поведение генерации. Убедитесь, что вы используете правильные правила для создания массивов, которые вам необходимы.
Пример содержимого
dataTypeBinding.xml
может выглядеть следующим образом:<jaxb:bindings version="2.1" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb2="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <jaxb:schemaBindings> <jaxb:package name="your.package.name" /> </jaxb:schemaBindings> <!-- Пример для настройки массива --> <jaxb:bindings node="//xs:element[@name='YourElementName']"> <jaxb:property name="yourFieldName"> <jaxb:baseType> <jaxb:javaType name="java.util.List" parseMethod="java.util.Arrays.asList" printMethod="your.package.name.YourClass.toString" /> </jaxb:baseType> </jaxb:property> </jaxb:bindings> </jaxb:bindings>
-
Используйте кастомные классы для сериализации/десериализации: Вместо того чтобы использовать сгенерированные классы напрямую, вы можете создать свои собственные классы-обертки, в которых реализованы необходимые методы обработки null и создание массива по умолчанию.
-
Обработка на стороне клиента: Если модификация генерации кода не является возможным решением, вы можете написать простую утилиту, которая будет преобразовывать сгенерированные классы, заполняя null-значения по умолчанию. Это может избежать изменения существующего кода на стороне клиента.
Пример утилиты на Java:
public class Util { public static <T> void initializeArrayList(List<T> list) { if (list == null) { list = new ArrayList<>(); } // Добавление элемента по умолчанию if (list.isEmpty()) { list.add(someDefaultElement); } } }
В результате применения этих методов, вы сможете исключить проверку на null и создать базовый элемент, который соответствует вашему бизнес-логике. Уверен, что с помощью данного подхода вы сможете разрешить вашу ситуацию. Если у вас возникнут дополнительные вопросы, пожалуйста, дайте знать!
С уважением,
[Ваше Имя]
Эксперт в области веб-сервисов и интеграции.