Velocity (itera mas não renderiza)

Olá pessoal, não sabia exatamente onde postar este tópico (se no Básico ou Lounge…, um pelo outro postei aqui… :mrgreen: ).

Li e testei ambos os artigos do guj sobre o velocity. Muito bons.

Tentei fazer um teste: criar um arquivo XML a partir de um template velocity (só um teste mesmo). Eu criei um Vector que contém objetos de uma mesma classe. Ocorre que, ao processar o contexto, o Velocity sabe quantos elementos tem (por que renderiza o resultado de $books.size())… e itera (#foreach ($book in $books) … #end) por que todas as tags aparecem para cada elemento do vetor, no entanto, o Velocity não renderiza $book.getAuthor() – um método que obtém o nome do autor!

O resultado do XML fica mais ou menos assim:

<?xml version="1.0" ?> <books items="7"> <!-- repare: resultado de $books.size() --> <book isbn="$book.getISBN()" year="$book.getYearPublished()"> <title>$book.getTitle()</title> <author>$book.getAuthor()</title> </book> ... <!-- e todos os outros 6 elementos da mesma maneira --> </books>

Estou usando o Velocity 1.3.1 (rc2)…; sei o que os tutoriais pediam para não obter versões release candidate… mas será que isso é um bug de release? O exemplo do tutorial “Introdução ao Velocity” funcionou perfeitamente.

Abraços.

A classe que voce colocou no Vector ( que contem os getISBN e outros ) esta em um arquivo especifico para ela? o Velocity nao consegue fazer introspeccao se for uma InnerClass.

Rafael

Sim, embora no mesmo arquivo .java, a classe MyBook não é pública.

Declare MyBook como public entao. Isso deve resolver.

Rafael

exacto

É isso mesmo, Rafael. Declarei a classe MyBook como pública e funfou blzinha! Se não for pedir demais, qual o motivo?! O problema está nos algorítimos de reflexão do Velocity ou é inerente à mecânica de reflexão do Java?

De qualquer maneira, obrigado!