1
resposta

O embrulho da tag itens não funciona

Ao adicionar a anotação @ResponseWrapper(localName="itens"), a resposta não tem mais o embrulho da tag itens, fica uma lista de item. Função:

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

Request:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.estoque.caelum.com.br/">
   <soapenv:Header/>
   <soapenv:Body>
      <ws:todosOsItens>
         <!--Optional:-->
         <filtros>
            <!--Zero or more repetitions:-->
            <filtro>
               <!--Optional:-->
               <nome>?</nome>
               <!--Optional:-->
               <tipo>?</tipo>
            </filtro>
         </filtros>
      </ws:todosOsItens>
   </soapenv:Body>
</soapenv:Envelope>

Response sem o embrulho da tag itens:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:itens xmlns:ns2="http://ws.estoque.caelum.com.br/">
         <item>
            <codigo>SEO</codigo>
            <nome>SEO na Prática</nome>
            <quantidade>4</quantidade>
            <tipo>Livro</tipo>
         </item>
         <item>
            <codigo>RUB</codigo>
            <nome>Jogos com Ruby</nome>
            <quantidade>8</quantidade>
            <tipo>Livro</tipo>
         </item>
         <item>
            <codigo>GAL</codigo>
            <nome>Galaxy Tab</nome>
            <quantidade>3</quantidade>
            <tipo>Tablet</tipo>
         </item>
         <item>
            <codigo>IP4</codigo>
            <nome>IPhone 4 C</nome>
            <quantidade>7</quantidade>
            <tipo>Celular</tipo>
         </item>
         <item>
            <codigo>IP5</codigo>
            <nome>IPhone 5</nome>
            <quantidade>3</quantidade>
            <tipo>Celular</tipo>
         </item>
         <item>
            <codigo>IP6</codigo>
            <nome>IPhone 6 S</nome>
            <quantidade>10</quantidade>
            <tipo>Celular</tipo>
         </item>
         <item>
            <codigo>MOX</codigo>
            <nome>Moto X</nome>
            <quantidade>6</quantidade>
            <tipo>Celular</tipo>
         </item>
         <item>
            <codigo>MOG</codigo>
            <nome>Moto G</nome>
            <quantidade>8</quantidade>
            <tipo>Celular</tipo>
         </item>
         <item>
            <codigo>MXX</codigo>
            <nome>Moto MAXX</nome>
            <quantidade>2</quantidade>
            <tipo>Celular</tipo>
         </item>
      </ns2:itens>
   </S:Body>
</S:Envelope>

Já deletei e inseri o projeto novamente no SOAPUI.

1 resposta

Olá, Danielson, tudo bem?

Uma possível solução para esse problema é verificar se a sua classe Item.java possui a anotação @XmlRootElement com o nome "itens". Essa anotação é necessária para que o JAXB (Java Architecture for XML Binding) consiga realizar a serialização corretamente.

Por exemplo, se a classe Item estiver assim:

@XmlRootElement(name = "item")
public class Item {
    // atributos e métodos da classe
}

Você pode adicionar a anotação @XmlRootElement também na classe que contém a lista de itens, no caso, a classe que possui o método getItens.

@XmlRootElement(name = "itens")
public class Itens {
    private List<Item> itens;
    
    // getters e setters da lista de itens
}

Dessa forma, o JAXB irá considerar a classe Itens como o embrulho da tag "itens" e realizar a serialização corretamente.

Espero ter ajudado e bons estudos!