Конфигурация JAXB была нарушена при обновлении с JDK 1.7 до JDK 1.8 u05 для коллекций

Приведенный ниже код работал для реализации JAXB, используемой в JDK 1.7, но теперь под JDK 1.8 он не работает. В приведенном ниже коде вы найдете ключевое изменение, которое, кажется, заставляет его работать в 1.8. «Исправление» под 1.8 не является на самом деле исправлением, потому что плохая практика - выставлять внутренние коллекции для прямого изменения внешним миром. Я хочу контролировать доступ к внутреннему списку через мой класс, и я не хочу усложнять вещи, делая заметные коллекции и слушая их. Это не приемлемо.

Есть ли способ заставить мой оригинальный код работать под JAXB JD 1.8?

 @XmlElementWrapper(name = "Wrap")
   @XmlElement(name = "Item", required = true)
   public synchronized void setList(List<CustomObject> values) {
     list.clear();
     list.addAll(values);
   }

public synchronized List<CustomObject> getList() {
//      return new ArrayList(list); // this was the original code that worked under 1.7
      return list; //this is the only thing that works under 1.8
   }

После дополнительного анализа проблема, похоже, исходит от того, что JAXB больше не вызывает метод setter для коллекций (раньше это было в JDK 1.7). Теперь в JDK 1.8 он вызывает геттер и напрямую изменяет коллекцию. Это создает несколько проблем:

1 - вынуждает пользователя выставлять внутреннюю коллекцию во внешний мир для бесплатной модификации (плохая практика) 2 - не позволяет пользователю делать какой-либо пользовательский код при изменении списка (например, то, что вы могли бы сделать, если вызывался сеттер ). Возможно, можно создать наблюдаемую коллекцию и прослушать ее, но это гораздо более сложный обходной путь, чем просто вызов метода setter.

Ответы на вопрос(1)

Ваш ответ на вопрос