Игнорирование в результирующем XML-коде для полей веб-сервиса, которые обнуляются в результате вызова адаптера.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Игнорирование в результирующем XML-коде для полей веб-сервиса, которые обнуляются в результате вызова адаптера.

Сообщение Anonymous »

Я создаю веб-сервис с использованием Apache CXF. В моих методах веб-сервиса мне нужно сохранить некоторую устаревшую логику, а это означает, что для некоторых полей и операций чтения, если значение, полученное из БД, равно 0, соответствующее поле не должно присутствовать в исходящем XML (и наоборот - для операций записи, если поле отсутствует во входящем XML, значение, хранящееся в БД, должно быть равно 0).
Предыдущая версия моих методов WS использовала AttributeConverter в сущностях для реализации этой логики, но я не могу использовать это подходить больше. Поэтому я попытался вместо этого использовать XmlJavaTypeAdapter.
Я создал и применил следующий адаптер:

Код: Выделить всё

    @Override
public Long unmarshal(String val) throws Exception {
if (val == null) {
return 0L;
}

return Long.parseLong(val);
}

@Override
public String marshal(Long val) throws Exception {
if (val == null || Long.valueOf(0).equals(val)) {
return null;
}

return val.toString();
}
Проблема в том, что при таком подходе поле по-прежнему присутствует в результирующем XML (для операции чтения), как и пустой тег. Мне нужно вообще избавиться от тега (как и в случае с другими пустыми полями, для которых я не использую адаптеры).
Как мне этого добиться?
Мое поле DTO помечено

Код: Выделить всё

@XmlElement(required = false, nillable = false)
(что должно быть нормально, но я также проверил другую конфигурацию параметров required и nillable).
Я проверил, что адаптер вызывается правильно.
Я хотел бы придерживаться подхода к адаптеру, который кажется наиболее ясным и кратким (я знаю, что я мог бы, например, добавить некоторую логику в геттеры/сеттеры для полей или ручное сопоставление в другом месте, но я бы хотел этого избежать). Я также читал о подходе с настройкой специального прослушивателя маршаллера, но мне это кажется громоздким.
Есть ли способ настроить маршаллер так, чтобы поле значения было нулевым (даже в результате вызов адаптера), это поле полностью пропускается в результирующем XML?

Подробнее здесь: https://stackoverflow.com/questions/787 ... a-result-o
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»