Сеттеры не должны влиять на параметр, который они принимают напрямую.Лично я считаю это плохим дизайном.Если вы все еще хотите это сделать, я настоятельно рекомендую вам задокументировать это поведение, поскольку это поведение может быть неожиданным.
Возвращение объектов также не требуется, поскольку Java передает параметры (объекты в целом) по ссылке.
Я бы использовал шаблон адаптера, который принимает JAXBElement в качестве параметра и возвращает JAXBElement.Вместо обновления JAXBElement адаптер клонирует его, изменяет клон и возвращает его.Таким образом, неожиданный побочный эффект не вводится.Этот шаблон также называется защитным копированием.
private JAXBElement clone(JAXBElement o) {
JAXBElement clone = new JAXBElement();
clone.setName(o.getName());
...
return clone;
}
Это должно сделать работу.