1
resposta

Erro ao utilizar a anotação @RequestWrapper

Boas, estou recebendo o seguinte erro ao utilizar a anotação @requestWrapper

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope">
         <faultcode>S:Client</faultcode>
         <faultstring>Não é possível localizar o método de despacho para {http://ws.estoque.caelum.com.br/}todosOsItens</faultstring>
      </S:Fault>
   </S:Body>
</S:Envelope>

mesmo utilizando para representar o Soap

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.estoque.caelum.com.br/">
   <soapenv:Header/>
   <soapenv:Body>
      <ws:listaItens />
   </soapenv:Body>
</soapenv:Envelope>

sem a anotação, fazendo um soap request ele retorna corretamente.

soapUI 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:-->
               <tipo>Celular</tipo>
               <!--Optional:-->
               <nome>Moto</nome>
            </filtro>
            <filtro>
               <!--Optional:-->
               <tipo>Celular</tipo>
               <!--Optional:-->
               <nome>IP</nome>
            </filtro>
         </filtros>
      </ws:todosOsItens>
   </soapenv:Body>
</soapenv:Envelope>

soapUI Response

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:itens xmlns:ns2="http://ws.estoque.caelum.com.br/">
         <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>
            <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>
      </ns2:itens>
   </S:Body>
</S:Envelope>
1 resposta

Olá Rafael, tudo bem?

A anotação @RequestWrapper é usada para personalizar o nome do elemento de solicitação SOAP. Se você estiver recebendo um erro ao usá-lo, é provável que o nome que você especificou na anotação @RequestWrapper não corresponda ao nome do elemento na mensagem SOAP que você está enviando.

Por exemplo, se você tiver um método de serviço da web como este:

@RequestWrapper(localName = "listaItens")
public List<Item> getTodosOsItens() {
    // ...
}

Então a mensagem SOAP que você envia deve ter um elemento listaItens no corpo da mensagem, assim:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.estoque.caelum.com.br/">
   <soapenv:Header/>
   <soapenv:Body>
      <ws:listaItens />
   </soapenv:Body>
</soapenv:Envelope>

Se o nome do elemento na mensagem SOAP não corresponder ao nome especificado na anotação @RequestWrapper, você receberá um erro.

Se você ainda estiver tendo problemas, por favor, forneça o código do seu método de serviço da web e a mensagem SOAP que você está tentando enviar.