Fala aí Douglas blz?
Para entender melhor o porque de ter essas duas anotações que "Fazem a mesma coisa", precisamos entender os estilos de mensagens.
Antigamente era muito utilizado o estilo RPC
(Remote Procedure Call) onde tínhamos realmente uma operação (método) no corpo da mensagem SOAP
. Nessa época o estilo de mensagem RPC
mandava no corpo da mensagem o tipo de dados. (O que foi chamado de encoded
e se padronizou como RPC Encoded
)
Ex.:
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.caelum.com.br/pedido">
<m:salvarPedido><!--Operação/Método-->
<m:pedido>
<!--Tipos sendo enviados no corpo-->
<m:codigo type="xs:int">1742</m:codigo>
<m:valor type="xs:decimal">319.12</m:valor>
<m:data type="xs:date">01/12/2015</m:data>
</m:pedido>
</m:salvarPedido>
</soap:Body>
</soap:Envelope>
Porém isso gerava muita incompatibilidade entre plataformas além do fato de expor muitos detalhes do seu serviço. Com isso surgiu um novo estilo chamado de Document
onde no corpo da minha mensagem não é
necessário enviar a operação e para resolver o problema com os tipos surgiu o Literal
(dessa forma não precisamos mais enviar os tipos no corpo da mensagem, pois eles são definidos a parte dentro ou anexado ao WSDL
).
Exemplo:
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.caelum.com.br/pedido">
<m:pedido>
<m:codigo>1742</m:codigo>
<m:valor>319.12</m:valor>
<m:data>01/12/2015</m:data>
</m:pedido>
</soap:Body>
</soap:Envelope>
Esse estilo ficou conhecido como Document Literal
nele só enviamos dados.
Mas isso poderia gerar conflitos se eu tivesse duas operações (Salvar, Atualizar por exemplo) que recebessem (no nosso caso) Pedido.
E aí que entra um outro padrão criado que foi o Document/Literal Wrapped
, que nada mais é do que um Document/Literal
onde podemos envolver o corpo da mensagem em alguma coisa que simbolize a operação.
Exemplo:
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.caelum.com.br/pedido">
<m:salvar>
<m:pedido>
<m:codigo>1742</m:codigo>
<m:valor>319.12</m:valor>
<m:data>01/12/2015</m:data>
</m:pedido>
</m:salvar>
</soap:Body>
</soap:Envelope>
Agora sim podemos falar da diferença entre elas (Ufa! kk)
A anotação @WebMethod
foi criada para resolver problemas de customizações quando havia somente RPC/Encoded
.
E a anotação @RequestWrapped
foi criada com a finalidade de resolver problema de customização quando utilizamos Document/Literal Wrapped
.
Espero ter ajudado!