Alguém pode me explicar as diferenças entre os webservices estilo Document e RPC? Além de JAX-RPC, a próxima versão é JAX-WS, que suporta os estilos Documento e RPC. Também entendo que os serviços da Web em estilo de documento são destinados à comunicação assíncrona, em que um cliente não bloqueia até que a resposta seja recebida.
De qualquer forma, usando JAX-WS eu atualmente anoto o serviço com @Webservice , gere o WSDL e a partir desse WSDL eu gerei os artefatos do lado do cliente.
Depois que os artefatos são recebidos, em ambos os estilos, 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?
Da mesma forma, de que maneira o SOAP sobre HTTP difere do XML sobre HTTP? Afinal SOAP também é documento XML com namespace SOAP.
Respostas:
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.
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.
O lugar onde você pode encontrar a diferença é na "RESPOSTA"!
Estilo RPC:
A mensagem SOAP para a segunda operação terá uma saída vazia e será semelhante a:
Resposta de estilo RPC:
Estilo do documento:
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:
Conclusão
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.
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.
fonte
Um serviço da web de estilo RPC usa os nomes do método e seus parâmetros para gerar estruturas XML que representam a pilha de chamadas de um método. O estilo do documento indica que o corpo SOAP contém um documento XML que pode ser validado em relação ao documento de esquema XML predefinido.
Um bom ponto de partida: Vinculação SOAP: Diferença entre documentos e serviços da Web de estilo RPC
fonte
Na definição WSDL, as ligações contêm operações, aí vem o estilo de cada operação.
Documento: No arquivo WSDL, ele especifica os detalhes dos tipos com documentos XSD embutidos ou importados, que descreve a estrutura (isto é, o esquema) dos tipos de dados complexos sendo trocados por aqueles métodos de serviço que são fracamente acoplados. O estilo do documento é o padrão.
No elemento de tipos WSDL tem a seguinte aparência:
O esquema está sendo importado de uma referência externa.
RPC : no arquivo WSDL, ele não cria esquemas de tipos, dentro dos elementos da mensagem ele define os atributos de nome e tipo que o tornam fortemente acoplado.
RPC: nenhum tipo no
documento WSDL : a seção de tipos estaria disponível no WSDL
fonte
O cenário principal em que JAX-WS RPC e estilo de documento são usados da seguinte maneira:
O padrão Remote Procedure Call (RPC) é usado quando o consumidor visualiza o serviço da web como um único aplicativo lógico ou componente com dados encapsulados. As mensagens de solicitação e resposta são mapeadas diretamente para os parâmetros de entrada e saída da chamada de procedimento.
Exemplos desse tipo de padrão RPC podem incluir um serviço de pagamento ou um serviço de cotação de ações.
O padrão baseado em documento é usado em situações em que o consumidor vê o serviço da web como um processo de negócios de execução mais longa, em que o documento de solicitação representa uma unidade completa de informações. Este tipo de serviço da Web pode envolver interação humana, por exemplo, como um documento de solicitação de aplicativo de crédito com um documento de resposta contendo propostas de instituições de crédito. Como os processos de negócios de execução mais longa podem não ser capazes de retornar o documento solicitado imediatamente, o padrão baseado em documento é mais comumente encontrado em arquiteturas de comunicação assíncrona. A variação Documento / literal de SOAP é usada para implementar o padrão de serviço da web baseado em documento.
fonte
Acho que o que você está perguntando é a diferença entre os serviços da Web RPC Literal, Document Literal e Document Wrapped SOAP.
Observe que os serviços da Web do Document são delineados em literais e também agrupados e são diferentes - uma das principais diferenças é que o último é compatível com BP 1.1 e o primeiro não.
Além disso, em Document Literal, a operação a ser chamada não é especificada em termos de seu nome, enquanto em Wrapped, é. Isso, eu acho, é uma diferença significativa em termos de descobrir facilmente o nome da operação para a qual a solicitação se destina.
Em termos de RPC literal versus Document Wrapped, a solicitação de Document Wrapped pode ser facilmente examinada / validada em relação ao esquema no WSDL - uma grande vantagem.
Eu sugeriria o uso de Document Wrapped como o tipo de serviço da Web escolhido devido às suas vantagens.
SOAP em HTTP é o protocolo SOAP vinculado ao HTTP como portadora. O SOAP também pode ser por SMTP ou XXX. SOAP fornece uma forma de interação entre entidades (cliente e servidores, por exemplo) e ambas as entidades podem empacotar argumentos de operação / valores de retorno de acordo com a semântica do protocolo.
Se você estava usando XML sobre HTTP (e pode), entende-se simplesmente como carga útil de XML em solicitação / resposta HTTP. Você precisaria fornecer a estrutura para empacotar / desempacotar, tratamento de erros e assim por diante.
Um tutorial detalhado com exemplos de WSDL e código com ênfase em Java: SOAP e JAX-WS, RPC versus Document Web Services
fonte
Documento As
mensagens de estilo de documento podem ser validadas em relação ao esquema predefinido. No estilo de documento, a mensagem SOAP é enviada como um único documento. Exemplo de esquema:
Exemplo de mensagem de corpo de sabão de estilo de documento
A mensagem do estilo do documento é fracamente acoplada.
RPC As mensagens de estilo RPC usam o nome do método e parâmetros para gerar a estrutura XML. as mensagens são difíceis de serem validadas em relação ao esquema. No estilo RPC, a mensagem SOAP é enviada como muitos elementos.
Aqui, cada parâmetro é especificado discretamente, a mensagem de estilo RPC é fortemente acoplada, é normalmente estática, exigindo alterações para o cliente quando a assinatura do método muda. O estilo rpc é limitado a tipos XSD muito simples, como String e Integer, e o WSDL resultante não até tem uma seção de tipos para definir e restringir os parâmetros
Literal por estilo padrão. Os dados são serializados de acordo com um esquema, o tipo de dados não especificado nas mensagens, mas uma referência ao esquema (namespace) é usado para construir mensagens soap.
Tipo de dados codificado especificado em cada parâmetro
Esquema livre
fonte