Método recursivo para coletar todos os elementos de um xml

Olá pessoal,
Tenho uma dúvida neste método, que deve apresentar os campos presentes na hierarquia de um xml existente. A análise deve ser realizada de maneira recursiva.

Exemplo de um xml com a mesma estrutura dos que estou uitilizando.

<cat:CatalogoSistema xmlns:cat="http://nowhere.to.go">   
   <cat:Sistema>Comercio</cat:Sistema>   
   <cat:Elementos>   
     <cat:Elemento>   
       <cat:Nome>ComercioRaiz</cat:Nome>   
       <cat:Tipo>ComercioRaiz</cat:Tipo>   
       <cat:Elementos>   
         <cat:Elemento>   
           <cat:Nome>ComercioPadaria</cat:Nome>   
           <cat:Tipo>ComercioPadaria</cat:Tipo>   
           <cat:Elementos>   
             <cat:Elemento>   
               <cat:Nome>ComercioRaizPadariafarinha</cat:Nome>   
               <cat:Tipo>java.math.BigDecimal</cat:Tipo>   
             </cat:Elemento>   
             <cat:Elemento>   
               <cat:Nome>ComercioRaizPadariaoleo</cat:Nome>   
               <cat:Tipo>java.math.BigDecimal</cat:Tipo>   
             </cat:Elemento>   
             <cat:Elemento>   
               <cat:Nome>ComercioRaizPadariafermento</cat:Nome>   
               <cat:Tipo>java.math.BigDecimal</cat:Tipo>   
             </cat:Elemento>   
             <cat:Elemento>   
               <cat:Nome>ComercioRaizPadarialeiteDesnatado</cat:Nome>   
               <cat:Tipo>java.math.BigDecimal</cat:Tipo>   
             </cat:Elemento>   
             <cat:Elemento>   
               <cat:Nome>ComercioRaizPadariamacarrao</cat:Nome>   
               <cat:Tipo>java.math.BigDecimal</cat:Tipo>   
             </cat:Elemento>   
             <cat:Elemento>   
               <cat:Nome>ComercioRaizPadariaaguaMineral</cat:Nome>   
               <cat:Tipo>java.math.BigDecimal</cat:Tipo>   
             </cat:Elemento>   
        </cat:Elementos>   
     </cat:Elemento>   
    </cat:Elementos>   
     </cat:Elemento>   
   </cat:Elementos>   
 </cat:CatalogoSistema>   

Meu método:

public void apresentaCatalogo(File f, CatalogoSistemaDocument pod){

  int i=0;

  treeData = new TreeNodeBase("foo-folder", "Catalogo", false);

  //cria uma instância de Elemento na qual é atribuída a raíz do documento
  Elemento elemento[] = pod.getCatalogoSistema().getElementos().getElementoArray();

  //percorrendo todos os <elemento> filhos que existem no elemento raiz
  Elemento[] elemento1 = elemento[i].getElementos().getElementoArray();
  for(i=0; i<elemento.length; i++){
    TreeNodeBase authorNode = new TreeNodeBase ("declaracao", elemento1[i].getNome(), false);
    treeData.getChildren().add(authorNode);
  }

  //coletando uma possível classe sendo representada pelo elemento sendo analisado.

  Elementos elementos = elemento[i].getElementos();

  //desce na hierarquia para a apresentação dos atributos folha.
  if (elementos != null){
    apresentaCatalogo(f, pod);
    }

  else{
    Elemento[] elemento2 = elemento1[i].getElementos().getElementoArray();
    TreeNodeBase bookNode3 = new TreeNodeBase ("declaracao", elemento1[i].getNome(), false);
    treeData.getChildren().add(bookNode3);
  }

Está ocorrendo um loop infinito no elemento raíz e não consigo coletar os outros elementos.

Alguém pode me ajudar?? É urgentíssimo!!

Obrigada

Quem sabe xmlBeans não te ajude.

http://xmlbeans.apache.org

ok, obrigada pela dica.
Dei uma olhada, mas ainda não resolvi o meu problema.
Não estou conseguindo fazer um teste para a saída da recursão.