Если вы знаете, что не будете использовать свою структуру данных после маршалинга или вы можете легко ее скопировать, я бы определил маршаллер (http://java.sun.com/javase/6/docs/api/javax/xml/bind/Marshaller.html#marshalEventCallback) функция обратного вызова:
boolean beforeMarshal(Marshaller);
в вашем классе элементов. Вы можете использовать этот обратный вызов события, чтобы отследить глубину, которой достиг маршаллер. Когда он достигнет вашей предельной глубины, просто аннулируйте аннотированное дочернее свойство. JAXB по умолчанию не создает элемент, когда встречает нулевое свойство, поэтому маршаллер на этом остановится.
Если вы хотите повторно использовать свою структуру после маршаллинга, вам нужно играть в игры с перемещением детей, которые вы не хотите сериализовать, в неаннотированное свойство, а затем перемещать их обратно в основное свойство после завершения маршаллера:
void afterMmarshal(Marshaller);
Этот шаблон добавляет немного запаха дизайна, потому что у вас есть аннотированный метод с волшебной подписью, который никогда не вызывается из вашего собственного кода, но он работает.