@Override public void walkJAXBElements(Object parent) { // Breadth first List<Object> newChildren = new ArrayList<Object>(); Object parentUnwrapped = XmlUtils.unwrap(parent); List<Object> children = getChildren(parentUnwrapped); if (children == null) { log.debug("no children: " + parentUnwrapped.getClass().getName()); return; } else { for (Object o : children) { newChildren.addAll(this.apply(o)); } } // Replace list, so we'll traverse all the new sdts we've just // created TraversalUtil.replaceChildren(parentUnwrapped, newChildren); children = getChildren(parentUnwrapped); if (children == null) { log.debug("no children: " + parentUnwrapped.getClass().getName()); } else { for (Object o : children) { // *** this.apply(o); if (this.shouldTraverse(o)) { walkJAXBElements(o); } } } }