[RESOLVIDO]problema com a devolução de uma string num web service

Pessoal,

Estou a tentar implementar um web service para devolver a sigla de um país que é introduzido pelo utilizador. Por exemplo, o utilizador introduz o nome do país e será devolvida a sigla correspondente a esse país.

Os nomes dos países com as siglas encontram-se numa tabela criada préviamente e que já está disponível num servidor. Toda a ligação entre a BD e o Netbeans está configurada e funciona correctamente.

O código que tenho é o seguinte e depois já explico o que não estou a conseguir obter.

@WebService()   
public class CountriesService   
{   
    @PersistenceUnit  
    EntityManagerFactory inf;   
    @WebMethod(operationName = "retornaSigla")   
  
    public String retornaSigla(@WebParam(name = "pais") int index)   
    {   
        Pais p = (Pais) inf.createEntityManager().createNamedQuery("Pais.findAll").getResultList().get(index);   
  
        return "A sigla é: " + p.getSigla();   
    }   
}  
@WebService()
public class CountriesService
{
    @PersistenceUnit
    EntityManagerFactory inf;
    @WebMethod(operationName = "retornaSigla")

    public String retornaSigla(@WebParam(name = "pais") int index)
    {
        Pais p = (Pais) inf.createEntityManager().createNamedQuery("Pais.findAll").getResultList().get(index);

        return "A sigla é: " + p.getSigla();
    }
}

Como podem ver utilizei uma PersistenceUnit que foi gerada quando criei uma Entity Classes From Database. Tudo direitinho até aqui.

O problema agora é que desta forma que estou a fazer apenas consigo que o utilizador introduza o ÍNDICE (variável index) do país e não o seu nome, ou seja, eu queria que o utilizador pudesse realmente introduzir uma string com o nome do país e não um inteiro que é o índice desse país.

Existe alguma forma de fazer isso? É que o método get(index) apenas aceita inteiros por isso o tenho como int. E o getResultList() não me proporciona nenhum método para retornar nenhuma string, infelizmente, ou então sou eu que estou pensando mal.

Obrigado pela ajuda pessoal e desculpem ser tão longa a explicação.

Joaquim Amorim
Portugal

Cara se você fizer isso:


     @WebMethod(operationName = "retornaSigla")  
     public String retornaSigla(@WebParam(name = "pais") String nome)  { 
         Query query =  inf.createEntityManager().createQuery("select p from Pais p where p.nome = :nome");
         query.setParameter("nome", nome);

         Pais p = (Pais) query.getSingleResult();  
   
         return "A sigla é: " + p.getSigla();  
     } 

Não funciona?

Xii, funciona direitinho muito obrigado Leonardo.

Desconhecia essa forma de programar web services usando directamente a classe Query. :smiley:

Agora só estou com um pequeno problema. É que os países que tenho na BD têm caracteres especiais (acentos, tils, etc) e quando introduzo o país com esses caracteres não me devolve nada e dá o erro de null, assim como me parece que está case sensitive.

Posso formatar aqui?

Muito obrigado pela ajuda mais uma vez!! :slight_smile:

Cumprimentos,

Amorim