3
respostas

tns antes do webparam filtros

Bom dia, utilizei o @WebParam(name="filtros") porém no SoapUI está incluindo o tns antes da tag filtros. Isso gera um null pointer exception. Se eu editar e remover o tns ai é executado com sucesso. Conseguem me ajudar a entender se consigo remover esse tns antes da tag ?

? ?

3 respostas

Olá Elisangela, tudo bem?

Tem como mandar o código do seu WebService ? Para que eu possa simular e tentar te ajudar.

Blz, segue os códigos das classes EstoqueWS e Filtros.

package br.com.estoque.ws;

import java.util.List;

import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService;

import br.com.caelum.estoque.modelo.item.Filtro; import br.com.caelum.estoque.modelo.item.Filtros; import br.com.caelum.estoque.modelo.item.Item; import br.com.caelum.estoque.modelo.item.ItemDao; import br.com.caelum.estoque.modelo.item.ListaItens; import br.com.caelum.estoque.modelo.usuario.AutorizacaoException; import br.com.caelum.estoque.modelo.usuario.TokenDao; import br.com.caelum.estoque.modelo.usuario.TokenUsuario;

@WebService public class EstoqueWS {

private ItemDao dao = new ItemDao();

@WebMethod(operationName="todosOsItens") @WebResult(name="itens") public ListaItens getItens(@WebParam(name="filtros") Filtros filtros){ System.out.println("Chamando getItens()"); List lista = filtros.getLista(); List itens = dao.todosItens(lista); return new ListaItens(itens); }

@WebMethod(operationName="cadastrarItem") @WebResult(name="itens") public Item cadastrarItem(@WebParam(name = "tokenUsuario", header = true) TokenUsuario token, @WebParam(name = "item") Item item) throws AutorizacaoException{ System.out.println("Cadastrando um item" + item + ", Token: " + token);

boolean valido = new TokenDao().ehValido(token); if(!valido){ throw new AutorizacaoException("Autorização falhou"); } this.dao.cadastrar(item); return item; } }

package br.com.caelum.estoque.modelo.item;

import java.util.List;

import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class Filtros {

@XmlElement(name="filtro") private List filtros;

public Filtros(List filtros) { this.filtros = filtros; }

Filtros() { }

public List getLista() { return filtros; }

}

Elisangela, acho que o prefixo tns não tem nada a ver com o NullPointerException. O meu está exibindo o ns2:itens sem dar a exceção.

Minha classe EstoqueWS.java. Vê se ajuda...

@WebService
public class EstoqueWS {

    private ItemDao dao = new ItemDao();

    @WebMethod(operationName = "todosOsItens")
    @ResponseWrapper(localName = "itens")
    @RequestWrapper(localName = "listaItens")
    @WebResult(name = "item")
    public List<Item> getItens() {
        System.out.println("Chamando getItens()");
        return dao.todosItens();
    }
}

Lembra que, após anotar com @ResponseWrapper(localName = "itens"), não há mais necessidade de usar a classe ListaItens.java.