Dicas de Resolução de Problemas do Gateway de Serviços da Web
Este conjunto de dicas específicas para ajudá-lo a resolver problemas encontrados ao usar o gateway de serviços da web.
Para ajudar a identificar e a resolver problemas relacionados ao gateway de serviços da web,
use os recursos de rastreio e de criação de log do WebSphere Application Server, conforme
descrito no Configurando o Rastreio de Componente (CTRACE).
Para ativar o rastreio para o gateway, configure a cadeia de rastreio do servidor de aplicativos como com.ibm.ws.sib.webservices.*=all=enabled:com.ibm.ws.wsgw.*=all=enabled. Se você encontrar algum problema que possa estar relacionado ao gateway, será possível verificar as mensagens de erro no console administrativo do WebSphere Application Server e no arquivo SystemOut.log do servidor de aplicativos. Você também pode ativar o rastreio de depuração do servidor de aplicativos para fornecer um dump de exceção detalhado.
O gateway de serviços da web é implementado como uma camada administrativa sobre os serviços da web ativados pelo barramento de integração de serviços. Portanto, os problemas mais conhecidos que podem ser encontrados ao usar o gateway são, na realidade, problemas relacionados aos serviços da web ativados pelo barramento e são documentados nas Dicas para Resolução de Problemas de Serviços da Web Ativados pelo Barramento.
As mensagens de sistema do WebSphere Application Server são registradas de várias origens, incluindo os componentes e aplicativos do servidor de aplicativos. As mensagens registradas pelos componentes do servidor de aplicativos e produtos IBM associados começam com um identificador de mensagens exclusivo que indica o componente ou o aplicativo que emitiu a mensagem. O prefixo para o componente do gateway de serviços da web é CWWSG e o prefixo para o componente dos serviços da web ativados pelo barramento é CWSWS.
O tópico Referência de Solucionador de Problemas: Mensagens contém informações sobre o gateway e mensagens de serviços da web ativados pelo barramento, indexadas pelo prefixo da mensagem. Para cada mensagem há uma explicação do problema e detalhes das ações que você possa tomar para resolver o problema.
- Passando Mensagens Diretamente a um Destino do Barramento, a Mensagem da Matriz de Sequência de Serviços da Web Codificada por RPC Não Interopera com Êxito com Alguns Provedores de Serviço de Destino
- Uma Mensagem de Serviço da Web do SOAP sobre JMS é Enviada pelo Gateway de Serviços da Web como uma JmsBytesMessage, em Vez de uma JmsTextMessage
- Criando um Serviço de Gateway, a Descrição WSDL não é Criada no Repositório SDO até que Você Tente Acessar o Arquivo WSDL do Serviço de Gateway por Meio de um Navegador da Web
- Migrando um Gateway do WebSphere Application Server Versão 5.1 para uma Versão Posterior
- Gerando um Cliente de Serviço da Web do WSDL para o Serviço de Destino, em Vez do Serviço de Gateway
- Migrando um Gateway que Contém Filtros do WebSphere Application Server Versão 5.1 para Uma Versão Posterior e Seus Filtros que Não Funcionam Mais
- Migrando um Gateway que Contém Filtros do WebSphere Application Server Versão 5.1 para a Versão 7.0 ou Posterior, Destinos com Nomes que Terminam com StorageQueue Foram Criados
- Aplicativo Cliente que Funciona no WebSphere Application Server Versão 5.1, mas Você Obtém Problemas Causados por Solicitações ou Respostas Malformadas nas Versões Posteriores
- Um cliente JAX-RPC em execução no WebSphere Application Server Versão 5.1 usa SOAP sobre JMS para chamar um serviço da web em execução em um servidor de aplicativos Versão 5.1
- Os Painéis de Gateway no Console Administrativo Estão Disponíveis Apenas no WebSphere Application Server Network Deployment
Passando Mensagens Diretamente a um Destino do Barramento, a Mensagem da Matriz de Sequência de Serviços da Web Codificada por RPC Não Interopera com Êxito com Alguns Provedores de Serviço de Destino
- A mensagem de matriz de sequência de serviços da Web codificada como RPC padrão que é gerada pode não interoperar com êxito com alguns provedores de serviço de destino.
- A mensagem da matriz de cadeia produzida não é exatamente a mesma que a equivalente do JAX-RPC padrão, que pode interoperar com êxito.
- Mensagem de barramento de integração de serviços:
<partname env:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/ xsi:type='ns1:ArrayOf_xsd_string'> <item xsi:type='xsd:anySimpleType'>namevalue</item> </partname>
- Mensagem do cliente JAX-RPC:
<partname xsi:type="soapenc:Array" soapenc:arrayType="xsd:string[1]"> <item>namevalue</item> </partname>
- Inicie o console administrativo.
- Navegue até e clique em Novo.
- Crie a seguinte propriedade customizada JVM. Observe que os valores fazem
distinção entre maiúsculas e minúsculas.
- Nome: com.ibm.websphere.sib.webservices.useTypeSoapArray
- Valor: true
- Reinicie o servidor de aplicativos.
Uma Mensagem de Serviço da Web do SOAP sobre JMS é Enviada pelo Gateway de Serviços da Web como uma JmsBytesMessage, em Vez de uma JmsTextMessage
Por padrão, no WebSphere Application Server Versão 6 ou posterior, uma mensagem de serviço da web SOAP sobre JMS enviada pelo gateway de serviços da Web é enviada como JmsBytesMessage, enquanto que no WebSphere Application Server Versão 5.1 o gateway de serviços da web envia um JmsTextMessage.
- Inicie o console administrativo.
- Navegue até e clique em Novo.
- Crie a seguinte propriedade customizada JVM. Observe que os valores fazem
distinção entre maiúsculas e minúsculas.
- Nome: com.ibm.ws.sib.webservices.useSOAPJMSTextMessages
- Valor: true
- Reinicie o servidor de aplicativos.
Criando um Serviço de Gateway, a Descrição WSDL não é Criada no Repositório SDO até que Você Tente Acessar o Arquivo WSDL do Serviço de Gateway por Meio de um Navegador da Web
Cada serviço de gateway possui um serviço de entrada associado. O arquivo WSDL do serviço de gateway está associado a esse serviço de entrada e deverá ser necessário apenas se a mensagem for originada de um serviço de entrada. Portanto, a descrição do WSDL será criada no repositório SDO na primeira vez em que for chamada por um serviço de entrada ou por meio de um navegador da web.
Se seus aplicativos estiverem enviando mensagens para o barramento a partir de origens diferentes do serviço de entrada (por exemplo, se você estiver utilizando manipuladores de mediação para manipular mensagens SDO para ou a partir de um serviço de gateway), os aplicativos deverão utilizar o WSDL associado ao serviço de destino (saída) ou algum outro WSDL compatível.
Migrando um Gateway do WebSphere Application Server Versão 5.1 para uma Versão Posterior
Quando o gateway da Versão 5 gerar WSDL para um serviço de gateway, o espaço de nomes gerado conterá o nome do serviço. Exemplo: namespace="http://griddev:9080/wsgw#yourService". No entanto, em versões posteriores, o WSDL gerado para um serviço de gateway não contém o nome do serviço. Exemplo: namespace="http://griddev:9080/wsgw".
Se sua ligação e estilo de codificação WSDL forem um literal de documento, seus clientes ainda poderão trabalhar no gateway migrado, porque o estilo do literal de documento não utiliza o atributo namespace. No entanto, se você tiver usado o WSDL do serviço de gateway da Versão 5.1 para gerar seus clientes de serviço da web e se sua ligação e estilo de codificação WSDL não forem um literal de documento, após a migração, você deverá gerar novamente os stubs do cliente usando o novo WSDL do serviço de gateway.
Gerando um Cliente de Serviço da Web do WSDL para o Serviço de Destino, em Vez do Serviço de Gateway
O benefício de optar por gerar um cliente de serviço da web do WSDL para o serviço de destino é a possibilidade de mover-se diretamente para o serviço de destino ou por meio do gateway para o serviço de destino apenas ao alterar a URL nos stubs gerados. Para ativar esta abordagem nesta versão do gateway, utilize o console administrativo para configurar a propriedade customizada com.ibm.websphere.wsgw.mapSoapBodyNamespace como false em cada serviço de entrada que esteja associado a um serviço de gateway.
- Se desejar manter a flexibilidade para rotear novamente as mensagens alterando a URL nos stubs gerados, configure a propriedade customizada com.ibm.websphere.wsgw.mapSoapBodyNamespace como false.
- Se esta flexibilidade não for mais necessária, gere novamente os stubs do cliente ao usar o WSDL do serviço de gateway da versão posterior.
Migrando um Gateway que Contém Filtros do WebSphere Application Server Versão 5.1 para Uma Versão Posterior e Seus Filtros que Não Funcionam Mais
O uso dos filtros foi descontinuado no Versão 5.1.1 e o suporte para filtros foi removido da Versão 7.0. A função anteriormente desempenhada por filtros agora é executada por uma combinação de manipuladores JAX-RPC e mediações do barramento de integração de serviços. Se você migrar um gateway de serviços da web que inclua um filtro de roteamento, será possível recriar as funções de filtro.
Migrando um Gateway que Contém Filtros do WebSphere Application Server Versão 5.1 para a Versão 7.0 ou Posterior, Destinos com Nomes que Terminam com StorageQueue Foram Criados
Esses destinos adicionais eram necessários para suportar filtros de gateway existentes do Versão 5.1 no ambiente do Versão 6. Os filtros de gateway não são mais suportados e, portanto, as filas "StorageQueue" não são mais necessárias no Versão 7.0 ou posterior. No entanto, esses destinos não serão removidos automaticamente quando migrar para o Versão 7.0 ou posterior ou quando excluir a instância de gateway.
- Se você especificasse o parâmetro -Q (nome da fila de correlação de filtro compartilhado), um único destino de fila do nome especificado era criado (se ainda não existisse) e compartilhado entre todos os serviços de gateway que possuíssem filtros associados.
- Se você não especificasse o parâmetro -Q, um destino de fila separado era criado para cada serviço de gateway que possuísse filtros associados. Cada um desses destinos possui um nome derivado do nome do pedido de serviço de gateway correspondente e destinos de resposta e terminados em StorageQueue.
Depois de excluir a instância do gateway, identifique cada destino de fila de armazenamento associado por nome e exclua-o conforme descrito em Excluindo um Destino de Barramento de Espaço Sem Tópico.
Aplicativo Cliente que Funciona no WebSphere Application Server Versão 5.1, mas Você Obtém Problemas Causados por Solicitações ou Respostas Malformadas nas Versões Posteriores
Os serviços da Web acionados por barramento verificam a validade das mensagens de serviços da Web mais detalhadamente do que feito no WebSphere Application Server Versão 5.1. Como resultado, alguns aplicativos clientes que usam pedidos ou respostas malformados (em que partes da mensagem estão nomeadas incorretamente) e que funcionam ao usar o Versão 5.1, são identificados como malformados em versões mais recentes. Para obter as etapas a serem executadas para resolver o problema, consulte Tolerância de Mensagens SOAP Formadas Insuficientemente
Um cliente JAX-RPC em execução no WebSphere Application Server Versão 5.1 usa SOAP sobre JMS para chamar um serviço da web em execução em um servidor de aplicativos Versão 5.1
Um cliente JAX-RPC em execução no WebSphere Application Server Versão 5.1 usa SOAP sobre JMS para chamar um serviço da web em execução em um servidor de aplicativos Versão 5.1. Nenhum ID do usuário ou senha é necessário na fila do MQ Series de destino. Depois que o servidor de aplicativos for migrado para uma versão posterior e de usar o sistema de mensagens padrão, as solicitações do cliente falharão porque a autenticação básica agora está ativada.
SibMessage W [:] CWSIT0009W: Um pedido do cliente falhou no servidor de
server with endpoint <endpoint_name> in bus your_bus with reason:
CWSIT0016E: The user ID null failed authentication in bus your_bus.
Para obter as etapas a serem tomadas para resolver o problema, consulte a seguinte dica de resolução de problemas de tecnologias de integração de serviços: Migrating a Versão 5.1 application server to WebSphere Application Server Versão 7.0 ou posterior
Os Painéis de Gateway no Console Administrativo Estão Disponíveis Apenas no WebSphere Application Server Network Deployment
![[IBM i]](../images/iseries.gif)
![[IBM i]](../images/iseries.gif)
![[IBM i]](../images/iseries.gif)
- Utilizando Jython:
wsgwAttribs = [] wsgwAttribs.append(["name", wsgwName]) wsgwAttribs.append(["wsdlServiceNamespace", wsgwNamespace]) wsgw = AdminConfig.create("WSGWInstance", bus, wsgwAttribs ) wsgwWsdlAttribs = [] wsgwWsdlAttribs.append(["WSDLLocation", wsgwWsdlLocation]) AdminConfig.create("SIBWSWSDLLocation", wsgw, wsgwWsdlAttribs, "defaultProxyWSDLLocation" )
- Utilizando Jacl:
set wsgwAttribs {} lappend wsgwAttribs [list "name" $wsgwName] lappend wsgwAttribs [list "wsdlServiceNamespace" $wsgwNamespace] set wsgw [$AdminConfig create "WSGWInstance" $bus $wsgwAttribs] set wsgwWsdlAttribs {} lappend wsgwWsdlAttribs [list "WSDLLocation" $wsgwWsdlLocation] $AdminConfig create "SIBWSWSDLLocation" $wsgw $wsgwWsdlAttribs "defaultProxyWSDLLocation"