Algum corpo pode me explicar as diferenças entre um estilo de documento e serviços da web de estilo RPC?
Existem dois modelos de estilo de comunicação que são usados para converter uma ligação WSDL em um corpo de mensagem SOAP. São eles:
Documento e RPC
A vantagem de usar um modelo de estilo de Documento é que você pode estruturar o corpo SOAP da maneira que desejar, desde que o conteúdo do corpo da mensagem SOAP seja qualquer instância XML arbitrária. O estilo do documento também é conhecido como estilo orientado para mensagens .
No entanto, com um modelo de estilo RPC , a estrutura do corpo da solicitação SOAP deve conter o nome da operação e o conjunto de parâmetros do método. O modelo de estilo RPC assume uma estrutura específica para a instância XML contida no corpo da mensagem.
Além disso, existem dois modelos de uso de codificação que são usados para converter uma ligação WSDL em uma mensagem SOAP. Eles são: literal e codificado
Ao usar um modelo de uso literal , o conteúdo do corpo deve estar em conformidade com uma estrutura de esquema XML definida pelo usuário (XSD) . A vantagem é dupla. Por um lado, você pode validar o corpo da mensagem com o esquema XML definido pelo usuário, além disso, você também pode transformar a mensagem usando uma linguagem de transformação como XSLT.
Com um modelo de uso codificado (SOAP) , a mensagem deve usar tipos de dados XSD, mas a estrutura da mensagem não precisa estar em conformidade com nenhum esquema XML definido pelo usuário. Isso torna difícil validar o corpo da mensagem ou usar transformações baseadas em XSLT no corpo da mensagem.
A combinação dos diferentes estilos e modelos de uso nos fornece quatro maneiras diferentes de converter uma ligação WSDL em uma mensagem SOAP.
Document/literal
Document/encoded
RPC/literal
RPC/encoded
Eu recomendo que você leia este artigo intitulado Qual estilo de WSDL devo usar? por Russell Butek que tem uma boa discussão sobre os diferentes estilos e modelos de uso para traduzir uma vinculação WSDL em uma mensagem SOAP e seus pontos fortes e fracos.
Depois que os artefatos são recebidos, em ambos os estilos de comunicação, invoco o método na porta. Agora, isso não difere no estilo RPC e no estilo do documento. Então, qual é a diferença e onde essa diferença é visível?
O lugar onde você pode encontrar a diferença é na "RESPOSTA"!
Estilo RPC:
package com.sample;
import java.util.ArrayList;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
@WebService
@SOAPBinding(style=Style.RPC)
public interface StockPrice {
public String getStockPrice(String stockName);
public ArrayList getStockPriceList(ArrayList stockNameList);
}
A mensagem SOAP para a segunda operação terá uma saída vazia e será semelhante a:
Resposta de estilo RPC:
<ns2:getStockPriceListResponse
xmlns:ns2="http://sample.com/">
<return/>
</ns2:getStockPriceListResponse>
</S:Body>
</S:Envelope>
Estilo do documento:
package com.sample;
import java.util.ArrayList;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
@WebService
@SOAPBinding(style=Style.DOCUMENT)
public interface StockPrice {
public String getStockPrice(String stockName);
public ArrayList getStockPriceList(ArrayList stockNameList);
}
Se executarmos o cliente para o SEI acima, a saída será:
123 [123, 456]
Esta saída mostra que os elementos ArrayList estão sendo trocados entre o serviço da web e o cliente. Essa alteração foi feita apenas pela alteração do atributo de estilo da anotação SOAPBinding. A mensagem SOAP para o segundo método com tipo de dados mais rico é mostrada abaixo para referência:
Resposta ao estilo do documento:
<ns2:getStockPriceListResponse
xmlns:ns2="http://sample.com/">
<return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:type="xs:string">123</return>
<return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:type="xs:string">456</return>
</ns2:getStockPriceListResponse>
</S:Body>
</S:Envelope>
Conclusão
- Como você deve ter notado nas duas mensagens de resposta SOAP, é possível validar a mensagem de resposta SOAP no caso do estilo DOCUMENT, mas não nos serviços da web no estilo RPC.
- A desvantagem básica de usar o estilo RPC é que ele não suporta tipos de dados mais ricos e o estilo de usar Documento é que ele traz alguma complexidade na forma de XSD para definir os tipos de dados mais ricos.
- A escolha de usar um desses depende dos requisitos de operação / método e dos clientes esperados.
Da mesma forma, de que maneira o SOAP sobre HTTP difere do XML sobre HTTP? Afinal SOAP também é documento XML com namespace SOAP. Então, qual é a diferença aqui?
Por que precisamos de um padrão como o SOAP? Ao trocar documentos XML por HTTP, dois programas podem trocar informações ricas e estruturadas sem a introdução de um padrão adicional como SOAP para descrever explicitamente um formato de envelope de mensagem e uma maneira de codificar conteúdo estruturado.
O SOAP fornece um padrão para que os desenvolvedores não tenham que inventar um formato de mensagem XML customizado para cada serviço que desejam disponibilizar. Dada a assinatura do método de serviço a ser chamado, a especificação SOAP prescreve um formato de mensagem XML inequívoco. Qualquer desenvolvedor familiarizado com a especificação SOAP, trabalhando em qualquer linguagem de programação, pode formular uma solicitação XML SOAP correta para um serviço específico e entender a resposta do serviço obtendo os seguintes detalhes do serviço.
- Nome do Serviço
- Nomes de métodos implementados pelo serviço
- Assinatura do método de cada método
- Endereço da implementação do serviço (expresso como um URI)
O uso de SOAP agiliza o processo de exposição de um componente de software existente como um serviço da Web, pois a assinatura do método do serviço identifica a estrutura do documento XML usada para a solicitação e a resposta.