1.0 Introdução
2.0 Software Suportados e Especificações
3.0 Alterações do Release Anterior
4.0 Limitações
4.1 A Amostra do Supply Chain Management Não Pode Ser Executada
5.0 Problemas Conhecidos
5.1 Web Services Explorer
5.2 Interoperabilidade com o Tempo de Execução do IBM SOAP
5.3
Gerando um documento WSDL a partir de um arquivo DADX
5.4 Gerador JSP de Ferramentas da Web
5.5
Utilizando o Universal Test Client
5.6 Várias Saídas Permitidas em Determinados Casos com Serviços Web DADX
5.7 Preferência do Driver JDBC Deve Ser Utilizada Apenas no Linux
5.8 Necessário Atualizar Arquivos de Exemplo DAD se o Extensor XML Não
Estiver Instalado no Diretório Padrão
5.9 Problemas de DADX dos Serviços da Web
5.10 Suporte
a Geração de DADX
5.11 Erros WSDL após Importação do Arquivo de Serviço da Web a partir do 4.0.x
5.12 Problemas ao Utilizar a Linha de Comandos de Serviços da Web
5.13 Criação de Serviço da Web sem um Servidor Existente
5.14 Gerando Aplicativo de Amostra de Serviços da Web
5.15 Importando Arquivos WSDL com Autenticação Básica HTTP
5.16 Problemas ao Utilizar o Tempo de Execução do WebSphere v5.0.2
5.17 Configurando um Grupo DADX com Informações de Origem de Dados
5.18 Carregando o Localizador de Clientes Utilizando o Universal Test Client
5.19 Preferências de Recursos não Observadas
5.20 Problemas ao Utilizar o Tempo de Execução do Apache Axis 1.0
5.21 JSP de Amostra de Serviço da Web Falhou ao Compilar
5.22 Problema com a Linha de Comandos de Serviços da Web em Alemão
5.23 Erro com Host Local não Definido
5.24 Limitações Permanentes ao Utilizar o Tempo de Execução do IBM SOAP
5.25 Serviço da Web e Cliente Utilizando Tempo de Execução Diferente
5.26 Clicando em Finish no Assistente Web Service Client
5.27 Folha de Dicas de Serviços da Web
O recurso ferramentas de serviços da Web permite descobrir, criar e publicar Java bean, DADX, bean corporativo e serviços da Web do URL. Esse arquivo leia-me descreve problemas conhecidos, limitações e soluções alternativas associados às seguintes funções das ferramentas de serviço da Web:
- Gerar um documento WSDL a partir de um Java bean, documento DADX, bean corporativo, arquivo ISD e URL.
- Gerar um proxy Java ou esqueleto de um documento WSDL.
- Criar e implementar um serviço da Web a partir de um Java bean, DADX, bean corporativo ou URL.
- Descobrir e publicar os serviços da Web
- Gerar um aplicativo da Web de amostra a partir de um proxy Java.
- Problemas de interoperabilidade.
O Web Services Explorer suporta os seguintes navegadores da Web:
- Microsoft Internet Explorer 6.0 ou superior
- Mozilla 1.2.1 ou superior
Esse release das ferramentas de serviço da Web gera o código que obedece às seguintes especificações:
- SOAP (Simple Object Access Protocol) Versão 1.1
- Universal Description, Discovery, and Integration (UDDI) Versão 2.0
- WSDL (Web Services Definition Language) Versão 1.1
- WSIL (Web Services Inspection Language) Versão 1.0
Esse release das ferramentas de serviço da Web suporta:
- O tempo de execução de serviços da Web do IBM WebSphere v5.0.2
- Os ambientes de tempo de execução do IBM SOAP Versão 2.2 e Versão 2.3.
- O tempo de execução do Apache Axis 1.0
Se você estiver ativando o ambiente de teste WORF fora do workbench utilizando Mozilla, recomenda-se pelo menos uma versão 1.3.1 do Mozilla. A saída advinda da chamada do serviço da Web, assim como dos arquivos de descrição poderá não ser apresentada corretamente em versões anteriores do navegador Mozilla.
O tempo de execução DADX requer o DB2 7.2 FixPak 6 ou superior, ou o DB2 8.1 ou superior.
Os recursos a seguir são novos nas ferramentas de serviços da Web na v5.1:
- Suporte para o tempo de execução de serviços da Web no IBM WebSphere v5.0.2. Esse é o tempo de execução estratégico de serviços da Web IBM que suporta o JSR-109 e o JAX-RPC.
- Suporte para o tempo de execução do Apache Axis 1.0. Esse tempo de execução suporta o JAX-RPC e é destinado a usuários que preferem desenvolver para a plataforma aberta Apache Axis.
- Fornecem uma ferramenta de linha de comandos de serviços da Web que permite ao usuário criar serviços da Web a partir de um bean Java, EJB ou arquivo WSDL e publicar e cancelar a publicação de negócios e serviços para registros UDDI.
- WSDL Explorer completamente integrado ao Web Services Explorer.
- Fornecem ferramentas de montagem de aplicativos de serviços da Web incluindo:
- Web Services Editor e Web Services Client Editor para editar os descritores de implementação JSR-109 e IBM WebSphere v5.0.2.
- Ação pop-up para chamar a função EndpointEnabler.
- Ação pop-up para chamar a função WebServiceDeploy.
- Ajuda a orientar o usuário na criação de serviços da Web compatíveis com WS-I por meio das preferências. O usuário pode optar pelo assistente Web Services Wizard requerer, sugerir ou ignorar o cumprimento do WS-I ao criar serviços da Web.
- Gerar e consumir documentos de referência de serviço da Web WSIL por proxy.
- Permitir que o usuário atualize os descritores de implementação do WebSphere v5.0.2 com configurações de segurança de amostra.
- Suportar o SOAP sobre JMS como transporte para mensagens SOAP ao criar serviços da Web a partir de EJBs.
- Suportar categorias UDDI definidas pelo usuário.
- Suportar Validação de Serviço da Web. Quando essa preferência é definida, a ferramenta valida que um Aplicativo Corporativo e/ou os módulos nele atendem a um conjunto de regras, provando a conformidade com JSR-109.
A amostra do Supply Chain Management não é executada no WAS Express.
- Ao utilizar o Web Services Explorer com o Private UDDI Registry, o formulário Manage Publisher Assertion de um nó de negócios não será carregado nas seguintes situações:
- Você não efetuou login no nó de registro que contém o nó de negócios.
- Você efetuou login no nó de registro que contém o nó de negócios, mas o nó de negócios não pertence ao ID do Usuário/Senha que é utilizado para efetuar login no registro que o contém.
- Você não poderá utilizar o Web Service Explorer para consultar ou publicar por meio de um registro UDDI ativado para autenticação básica. Um exemplo desse tipo de registro é um registro privado que é implementado em um servidor com a autenticação básica ativada. Observe que os registros públicos (IBM, Microsoft, SAP, NTT e XMethods) não são afetados por esse problema.
- Quando uma pesquisa avançada é utilizada no Web Services Explorer para localizar negócios em um WAS private UDDI registry configurado com um backend do Cloudscape e uma ou mais interfaces de serviço são especificadas como parâmetros, a pesquisa falha e a janela de status mostra:
com.ibm.uddi4j.wsdl.client.UDDIWSDLProxyException: Could not list all service providers. ------------------------------------------------------------------------------ Nested exception is:E_fatalError (10500) Serious technical error has occurred while processing the request. : Fault code=Client Fault string=Client Error Fault actor=null Detail=null DispositionReport: ErrCode=E_fatalError ErrInfoText=E_fatalError (10500) Serious technical error has occurred while processing the request.
- O registro de XMethods possui procedimentos para verificar serviços da Web publicados, excluindo aqueles que não estejam mais acessíveis ou não estejam funcionando. Para evitar que um serviço da Web publicado seja excluído, assegure que as referências de URL nos arquivos WSDL sejam acessíveis na Internet.
O SAP UDDI Business Registry retornará um E_fatalError para uma solicitação localizar negócios por categoria com ofindQualifier igual a "combineCategoryBags" (tModelKey igual a UUID:C0B9FE13-179F-413D-8A5B-5004DB8E5BB2). A mensagem de erro a seguir será exibida na janela de status. Este é um problema exclusivo do SAP UDDI Business Registry.
com.ibm.uddi4j.wsdl.client.UDDIWSDLProxyException: Could not list all service providers. ------------------------------------------------------------------------------ Nested exception is:A serious technical error has occurred while processing the request. : Fault code=Client Fault string=UDDI Error Fault actor=null Detail=null DispositionReport: ErrCode=E_fatalError ErrInfoText=A serious technical error has occurred while processing the request. at com.ibm.uddi4j.wsdl.client.UDDIWSDLProxy.findAllServiceProviders(UDDIWSDLProxy.java:1626) at FindBusWithQualifier.main(FindBusWithQualifier.java:35)
- Os relatórios de declaração do Publisher retornados pelo SAP UDDI Business Registry não contêm status. Como resultado, a coluna de status de declaração do publicador no formulário Manage Publisher Assertion do Web Services Explorer será omitida para relatórios retornados pelo SAP. Este é um problema exclusivo do SAP UDDI Business Registry.
- Ao tentar publicar um negócio, serviço ou interface de serviço para o Registro de UDDI XMethods, você receberá uma mensagem de erro "SSL Handshake Failure". Esse é um problema conhecido que a IBM e a XMethods estão investigando.
- Ao utilizar o tempo de execução do IBM SOAP, gerar WSDL com parâmetros complexos pode causar problemas com as ferramentas Microsoft que utilizam o WSDL. As ferramentas Microsoft não manipulam instruções XSD include adequadamente, portanto, pode ser necessário colocar os esquemas XSD em linha no WSDL gerado. Isso pode ser feito selecionando
Windows > Preferences > Web Services > Code Generation > use inline schema.Ao utilizar o tempo de execução IBM SOAP, o assistente Web Services agora está totalmente ativado para gerar mapeamentos baseados em elementos, além de quaisquer mapeamentos baseados no tipo normal, se a caixa de opções "Enable element-based mapping" estiver selecionada. No menu principal do WSAD, esta caixa de opções está localizada na seguinte página de preferências:
Windows > Preferences > Web Services > Code Generation.Se essa preferência não estiver ativada, o que é o padrão, o tempo de execução do Apache/IBM SOAP poderá não interoperar com os tempos de execução de serviços da Web de outros fornecedores que enviam mensagens de elementos que não possuem propriedades "xsi:type". Os tempos de execução de serviços da Web de outros fornecedores seguem diversas políticas na inclusão de propriedades xsi:type. Alguns sempre as incluem. Alguns nunca. Alguns fornecem uma opção de configuração. Alguns omitem xsi:types para determinados tipos, como matrizes.
O erro típico produzido pelo tempo de execução de IBM/Apache SOAP é:
targetException=java.lang.IllegalArgumentException: No Deserializer found to deserialize a ':MyElement' using encoding style 'http://schemas.xmlsoap.org/soap/encoding/'.
Quando ativados, os mapeamentos baseados em elementos são gerados para:
- arquivo do descritor de implementação para cenários Java bean/EJB de cima para baixo e cenários WSDL Skeleton
- O proxy em cenários clientes
Mapeamentos baseados em elemento têm o formato:
<isd:map
encodingStyle="encoding style"
xmlns:x="some-namespace"
qname="x:some-local-name"
xml2JavaClassName="some-deserializer-class-name"/>Um mapeamento baseado em elementos é gerado para:
- Cada parte definida em cada entrada wsdl:message.
- Cada parte definida em cada saída wsdl:message, apenas para cenários de Skeleton e Proxy.
- Cada elemento raiz ou elemento local em cada tipo complexo referenciado por partes no arquivo WSDL
O assistente WSAD Web Services segue as especificações SOAP e XSD para determinar se o nome do elemento em um mapeamento baseado em elementos deve ser qualificado (isto é, ter um espaço de nomes) ou não qualificado.
O assistente WSAD Web Services segue essas regras para decidir entre nomes de elementos qualificados e não qualificados:
- Nomes de partes em WSDL admitem nomes não qualificados.
- Elementos raiz em XSD admitem nomes qualificados.
- Elementos locais em XSD admitem nomes não qualificados se o esquema especificar elementFormDefault="unqualified", que também é o padrão se o esquema não tiver nenhum atributo elementFormDefault.
- Elementos locais em XSD admitem nome qualificados se o esquema especificar elementFormDefault="qualified".
Sabe-se que alguns tempos de execução geram elementos não qualificados em mensagens SOAP, apesar de um esquema especificar a utilização de elementos qualificados através do atributo "elementFormDefault" do esquema XSD. Nesses casos, pode ser necessário editar manualmente o WSDL ou XSD de um serviço e alterar elementFormDefault para "unqualified".
Um exemplo de um mapeamento baseado em elemento qualificado sem namespace é:
<isd:map
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:x=""
qname="x:name"
xml2JavaClassName="org.apache.soap.encoding.soapenc.StringDeserializer"/>Um exemplo de um mapeamento baseado em elementos completo com namespace é:
<isd:map
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:x="http://www.ibm.com/"
qname="x:name"
xml2JavaClassName="org.apache.soap.encoding.soapenc.StringDeserializer"/>Observe que apenas um mapeamento baseado em elementos será gerado para um determinado nome de elemento. Ou seja, se o esquema utiliza o mesmo nome de elemento mais de uma vez, mas com tipos diferentes, apenas um dos elementos será selecionado, efetivamente de modo aleatório, como a base para um mapeamento baseado em elementos. Os outros elementos com nomes idênticos, de tipos diferentes, falharão ao desserializar. O mesmo ocorre se o esquema utilizar o mesmo nome para um elemento e para uma parte WSDL.
- Ao iniciar com um bean de serviço que retorna uma matriz de Mapa ou uma matriz de Hashtable e a opção "element-based mapping" estiver ativada, o Proxy SOAP gerado mapeará incorretamente o tipo de retorno para uma java.lang.String[]. Uma ClassCastException ocorrerá durante o tempo de execução. Para solucionar este problema, execute o assistente para cliente de serviço da Web com o novo WSDL criado e regenere o proxySOAP no projeto do cliente.
- Para melhorar a interoperabilidade com os serviços da Web da Microsoft, o tempo de execução do DADX foi atualizado para que eles possam gerar serviços da Web no estilo de documento. Para ativar esse recurso, utilize o assistente para configuração do DADX para abrir a página property para um grupo DADX que deve ser utilizado. Na parte inferior da página de propriedade, assegure que o campo de entrada "Use document style" esteja definido como true.
- Não há suporte para um Java proxy para operação de chamada DADX com vários parâmetros de saída.
- Ao criar um serviço DADX da Web, ocasionalmente a mensagem "IWAB0177E Erro ao gerar WSDL a partir de um arquivo DADX." aparecerá. Na maioria dos casos, essa mensagem é uma indicação de algum problema relacionado ao banco de dados e, para obter detalhes sobre o problema, deve-se consultar o log do console do servidor. Verifique também o seguinte:
- Os arquivos DAD (*.dad) precisam estar localizados no diretório de grupo do DADX. Este é o modo como o tempo de execução do WORF localiza os arquivos DAD.
- Se você estiver tentando gerar um arquivo DAD a partir de um arquivo de Mapeamento RDB para XML (.rmx), certifique-se de que o arquivo DAD esteja localizado na mesma pasta que o arquivo DADX.
- O esquema DADX não utiliza mais a marcação de documento WSDL para documentação. Essa marcação agora faz parte do esquema DADX. Isso pode causar problemas de validação em arquivos DADX antigos que não tenham sido migrados para utilizar o esquema atualizado. Por exemplo, se o arquivo DADX antigo continha o seguinte XML:
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
Provides queries for part order information at myco.com.
</wsdl:documentation>a nova entrada do documento seria:
<documentation>
Provides queries for part order information at myco.com.
</documentation>
Ao lançar o Universal Test Client do assistente para Web Services, o URL do Provedor JNDI é definido para a porta padrão do WebSphere v5 2809. Se estiver utilizando um servidor WebSphere v4 ou se tiver alterado o número da porta, não será possível pesquisar o diretório JNDI. Se você tentar acessar o diretório JNDI, você obterá o seguinte erro:
IWAD0403E Could not construct the JNDI tree: Caught CORBA.COMM_FAILURE when resolving initial reference=WsnNameServiceA solução alternativa é:
- Dê um clique duplo no servidor que está utilizando. Isso tornará visível as propriedades do servidor.
- Selecione a guia ports.
- Copie a porta Orb bootstrap.
- Abra a janela de propriedades JNDI no Universal Test Client.
- Cole a porta bootstrap na caixa de entrada de texto Provider URL.
Normalmente, a existência de várias saídas em um serviço da Web não é suportada por nossas ferramentas. Entretanto, no caso dos serviços da Web DADX, várias saídas são permitidas se Use Document Style group property for definida para true. Neste caso, quando document style é true, várias saídas são combinadas em um único documento XML.
Uma nova categoria de Preferências dos serviços da Web (Windows > Preferences > Web Services) denominada JDBC drivers foi incluída. Embora esta preferência esteja disponível em todas as plataformas, ela deve ser utilizada apenas no Linux. No Linux, pode ser difícil determinar a localização do arquivo JAR contendo drivers JDBC. Portanto, esta página de preferência foi incluída para que você possa especificar qual arquivo JAR deve ser utilizado. Atualmente, apenas o código de validação DADX utiliza estas informações de arquivo JAR.
Os arquivos DAD localizados no diretório WSinstall_dir\wstools\eclipse\plugins\com.ibm.etools.webservice_<versão>\samples\DADX_examples podem precisar de modificações para refletir sua configuração de sistema específica.
Próximo ao início do arquivo há uma linha semelhante a esta:
<!DOCTYPE DAD SYSTEM "c:\dxx\dtd\dad.dtd">
Se o extensor XML tiver sido carregado em uma localização diferente de c:\dxx , esta cadeia precisa ser atualizada para refletir a localização atual. Isto aplica-se a máquinas Linux também, onde a localização é geralmente /usr/IBMdb2xml.
- Na página Web service DADX group property do assistente para serviços da Web, as alterações poderão não ser efetivadas imediatamente. Portanto, recomendamos que as alterações às propriedades do grupo DADX sejam feitas utilizando o Assistente DADX Group Configuration.
- Depois de editar e validar um arquivo DADX, você poderá receber uma mensagem na exibição Tasks que declara que o projeto precisa ser reconstruído. Se isso acontecer, clique com o botão direito do mouse no projeto apropriado e clique em Rebuild project. Talvez seja necessário fazer isso novamente para remover a mensagem da exibição Tasks.
Embora as funções definidas pelo usuário estejam listadas no assistente Generate DADX, não existe, atualmente, suporte para a geração de DADX a partir dessas funções. Existe suporte disponível apenas para geração de DADX a partir de arquivos DAD, procedimentos armazenados e instruções SQL. A seleção de um UDF fará com que um arquivo de estrutura DADX simples seja gerado.
Se você importou um arquivo de serviços da Web do 4.0.x, é possível que receba as seguintes mensagens de erro:
Error The part 'result' has an invalid value 'anyElement' defined for its type. Type declarations must refer to valid values defined in a schema.
Error The part 'return' has an invalid value 'findPatientResult' defined for its element. Element declarations must refer to valid values defined in a schema.
Error The part 'response' has an invalid value 'findPatientResponse' defined for its element. Element declarations must refer to valid values defined in a schema.A solução alternativa é:
- Excluir os arquivos do WSDL.
- Gerar novamente os serviços da Web, re-executando o assistente Web Services.
- Opção FileNStoPkg: A opção -fileNStoPkg para WSDL2WebService na linha de comandos não está funcionando atualmente. Utilize -NStoPkg e digite cada mapeamento na linha de comandos. Outra opção é utilizar o assistente Web Service se for exigido um espaço de nomes para compactar o mapeamento.
- Diretório com espaço: Evite executar WSDL2WebService a partir de um diretório contendo um espaço no nome do diretório. Caso contrário, o compile.bat (ou compile.sh no Linux) que é gerado não irá compilar.
- Descritores de implementação de cliente e arquivos WSDL: Depois de executar Bean2WebService, EJB2WebService, WSDL2WebService, os descritores de implementação do lado do cliente (webservicesclient.xml, ibm-webservicesclient-bnd.xmi, ibm-webservicesclient-ext.xmi e _mapping.xml) estão sob client-side/META-INF. Se o usuário pretender criar um aplicativo cliente gerenciado, ele deve seguir os procedimentos abaixo:
- Para executar o cliente gerenciado na forma de um EJB ou J2EE Application Client, o usuário deve compactar todos os descritores de implementação sob META-INF do archive além de copiar o wsdl do lado do serviço (sob WEB-INF/wsdl se o serviço estiver no contêiner da Web ou META-INF/wsdl se o serviço estiver no contêiner EJB) para META-INF/wsdl do projeto do cliente.
- Para executar o cliente gerenciado dentro do contêiner da Web, o usuário deve compactar todos os descritores de implementação para WEB-INF do archive do cliente (geralmente em forma de um WAR ou um projeto da Web no WebSphere Studio). O arquivo WSDL também deve ser copiado do lado do serviço para WEB-INF/wsdl. O usuário também deve editar manualmente webservicesclient.xml (utilizando um editor de texto ou, se estiver no WebSphere Studio, editor xml) substituindo todas as ocorrências de META-INF por WEB-INF.
Nome de classe com sublinhado: Ao criar um serviço da Web a partir de um bean Java ou EJB, se o nome da classe do bean de serviço tiver um sublinhado e o próximo caractere estiver em minúscula (por exemplo, test.Simple_bean), o serviço não poderá ser iniciado no WebSphere Application Server. A solução alternativa é utilizar um nome de bean de serviço sem sublinhado ou utilizar letra maiúscula depois do sublinhado (por exemplo, test.Simple_Bean).
- Ao passar por um cenário de criação de serviço da Web sem um servidor Web existente no espaço de trabalho, clicar em Back na terceira página fará com que o botão Next seja desativado. A solução alternativa é cancelar a partir do assistente e iniciar novamente o assistente. Para evitar esse problema, crie o servidor e a configuração antes de iniciar o cenário de serviço da Web ou evite clicar em Back na terceira página quando não existir um servidor Web.
- Quando um usuário clica com o botão direito em um arquivo Java no workbench, a ação pop-up Generate Sample Application sob o menu Web Services gera JSPs de amostra de serviços da Web para um proxy IBM SOAP. Para Para gerar JSPs de amostra de serviços da Web para os outros tempos de execução de serviço da Web (IBM WebSphere 5.0.2 e Apache Axis 1.0), clique com o botão direito em um arquivo WSDL e escolha a ação pop-up Generate Client sob o menu Web Services. Quando entrar nesse assistente, selecione Test the generated proxy
Ao gerar esqueletos ou clientes a partir de um arquivo WSDL que tenha importações relativas e a Autenticação Básica HTTP protegida, o usuário verá uma mensagem de erro indicando que o arquivo WSDL não pode ser resolvido mesmo que sejam inseridos o ID do usuário e senha corretos. O problema é que o ID do usuário e senha são utilizados apenas para recuperar o arquivo WSDL original, e não os arquivos que ele importa.
Para resolver esse problema, o usuário pode fazer download do arquivo WSDL e de todos os arquivos que ele importa para o workbench primeiro, depois gerar o esqueleto ou cliente a partir do arquivo WSDL transferido por download.
- Sem suporte para WSDL: Incluir o WSDL no URL do nó de extremidade de um serviço da Web implementado para o WebSphere v5.0.2 e executar no Ambiente de Teste ou no ambiente do servidor remoto para obter o arquivo WSDL para o serviço da Web implementado não é suportado. O arquivo WSDL gerado pode ser encontrado sob WebContent/WEB-INF/wsdl do projeto da Web para o serviço da Web de bean Java e sob ejbModule/META-INF/wsdl do projeto EJB para serviço da Web EJB. Se for requerido o atendimento ao WSDL a partir de um projeto da Web, o usuário pode referenciar a cópia do arquivo WSDL em WebContent/wsdl do projeto da Web ou criar sua própria localização em WebContent e atender o WSDL a partir do projeto da Web.
- Possuir JAR de utilitário ou mais de uma pasta de origem: Ao criar o serviço da Web a partir de um bean Java ou EJB, arquivos desnecessários podem ser gerados no módulo se existir mais de uma pasta de origem no projeto da Web ou se os beans estiverem em um JAR de utilitário dentro do arquivo EAR. Como esses arquivos gerados já existem no módulo (no JAR de utilitário ou em outra pasta de origem), eles devem ser excluídos para que o projeto seja compilado e para que o serviço da Web funcione adequadamente. Outra solução alternativa é mesclar a pasta de origem em uma ou copiar os beans do JAR de utilitário para a pasta de origem.
- Matriz não suportada no RPC/literal: Ao criar um serviço RPC/literal, a assinatura do método não pode conter uma matriz. Se tiver, o serviço não pode ser chamado com o código de cliente gerado. Atualmente não existe solução alternativa para esse problema. Tente utilizar document/literal ou RPC/encoded se possível.
- Sobrecarga de métodos não suportada em document/literal: Sobrecarga de métodos (mesmo nome de método, parâmetros de entrada diferentes) não é suportada ao criar um serviço document/literal. Atualmente não existe solução alternativa para esse problema. Tente utilizar RPC/literal ou RPC/encoded se possível.
- Importação de WSDL: A instrução de importação de WSDL só pode ter URLs absolutos ou URLs relativos no mesmo diretório. Por exemplo, a importação relativa no formato seguinte não é suportada:
<import namespace="http://someNamespace/" location="../someFile.wsdl"/>- Elemento binding antes do elemento portType: Você obterá uma mensagem "Error in generating Java files and deployment descriptors from WSDL file (detail: duplicate operation name)" ao gerar proxy cliente ou esqueleto a partir de um arquivo WSDL contendo o elemento binding antes do elemento portType.
- Elementos abstratos: Ao gerar esqueletos a partir de um arquivo WSDL com a operação que utiliza tipos ou elementos abstratos, os JavaBeans gerados não serão compilados.
- Tipos sem mapeamentos JAX-RPC padrão: Ao gerar esqueletos a partir de um arquivo WSDL com operações que possuem parâmetros inout dos tipos que não têm nenhum mapeamento JAX-RPC padrão, o bean de implementação gerado não será compilado. O problema é que quando javax.xml.soap.SOAPElement é criado a partir de javax.xml.soap.SOAPFactory, ele lança uma javax.xml.soap.SOAPException. O bean de implementação não captura ou lança novamente essa exceção, portanto, ele não é compilado.
- Mesmo tipo de esquema para entrada e saída: Ao gerar esqueletos a partir de um arquivo WSDL que utiliza o mesmo tipo de esquema XML para suas mensagens de entrada/saída e mensagens de falha, os artefatos gerados não funcionam em tempo de execução. Para resolver esse problema, não compartilhe definições de tipo de esquema XML entre mensagens de entrada/saída e mensagens de falha.
- Referências a elementos XSD com minOccurs e maxOccurs: Ao gerar esqueletos a partir de um arquivo WSDL, não utilize referências ao elemento XSD com valores minOccurs e maxOccurs especificados pelo usuário (<element ref="..." minOccurs="0" maxOccurs="unbounded"/>). A utilização desse elemento resultará em uma java.util.MissingResourceException durante a inicialização do servidor.
- Bean emitido tendo APIs diferentes do bean de serviço: Se os beans gerados pelo emissor tiverem APIs diferentes do bean de serviço ao criar um serviço da Web a partir de um bean Java ou EJB, pode ocorrer um erro de tempo de execução conforme segue:
The method is undefined.
Couldn't find a matching Java operation.
Exemplos de bean de serviço que possui APIs diferentes dos beans gerados:
- beans com campos públicos,
- campos booleanos com getter denominado getBooleanValue em vez de isBooleanValue,
- nome de método com nome de método em maiúsculas
Literal do documento com agrupamento ativado: Ao criar serviço da Web de baixo para cima utilizando literal de documento, por padrão, a opção agrupamento é ativada. Pode ocorrer um problema de interoperabilidade se você tiver mais de uma entrada com diferentes tipos ou nenhuma entrada. A solução alternativa é utilizar RPC/literal. Bean Java com nome em minúsculas ou sublinhado: Quando criar um serviço da Web a partir de um bean Java com nome de arquivo em minúsculas ou sublinhado seguido de uma letra minúscula, você obterá o erro:
Error in generating Java files and deployment descriptors from WSDL file with details of getOutputStream() IOException.Configuração de segurança diferente: Não gere serviços da Web com configurações de segurança diferentes no mesmo módulo/projeto. Utilize projetos separados para cada serviço da Web.
Se o WebSphere Application Server V5.0 estiver sendo utilizado para hospedar um serviço da Web DADX, o arquivo group.properties para o grupo DADX deve utilizar a seguinte propriedade initialContextFactory:
initialContextFactory=com.ibm.websphere.naming.WsnInitialContextFactoryAlém disso, o arquivo web.xml para o projeto contendo o grupo DADX precisa ter o seguinte incluído. (Supondo que o nome JNDI da origem de dados seja jdbc/hospital.)
<resource-ref id="ResourceRef_1058550453092">
<res-ref-name>jdbc/hospital</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>CONTAINER</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
Quando o Universal Test Client é incapaz de pré-carregar a classe de localizador de cliente gerada pelo tempo de execução do WebSphere v5.0.2 ou Axis, isso ocorre porque o nome da classe de bean Java no projeto da Web do serviço é o mesmo que o nome da classe SEI no projeto da Web do cliente. Para solucionar esse problema:
- Remova o projeto da Web do cliente do espaço de trabalho
- Clique com o botão direito no projeto da Web do cliente e clique em "Delete".
- Localize o application.xml no projeto EAR e dê um clique duplo no arquivo para abrir o editor Application Deployment Descriptor. Selecione o módulo de projeto da Web do cliente e clique em "Remove". Feche o editor e salve as alterações.
- Crie o projeto da Web do cliente sob um EAR diferente, no qual o nome do projeto EAR deve estar alfabeticamente na frente do nome do projeto EAR do serviço. Por exemplo, se o nome do projeto EAR de serviço for denominado "DefaultEAR", crie o novo nome de projeto EAR denominado "ClientEAR".
- Execute novamente o assistente Web Service.
As preferências de sobrescrever arquivo, criação de pasta e registro de saída de arquivo automático não não observadas ao criar serviços da Web utilizando o tempo de execução do WebSphere v5.0.2 e Axis. A criação de pasta é sempre permitida e o registro de saída de arquivo automático nunca é ativado.
Ao utilizar o tempo de execução do WebSphere v5.0.2, o arquivo WSDL, SEI e artefatos de implementação (serializadores e desserializadores) sempre são sobrescritos. Os artefatos de implementação (bean de serviço, beans de tipos complexos, classe holder e helper) nunca são sobrescritos. No entanto, o usuário receberá um aviso sobre sobrescrever os descritores de implementação, se eles existirem. O usuário pode escolher OK para sobrescrever os descritores de implementação e continuar no cenário ou Cancel para evitar que os descritores sejam sobrescritos.
Ao utilizar o tempo de execução do Apache Axis 1.0, os emissores Axis geram novamente todos os arquivos Java servidor/cliente, deploy.wsdd e undeploy.wsdd, toda vez. WSDL2Java para o cenário de geração de serviço irá gerar o arquivo de implementação do esqueleto somente se ele ainda não existir. Se essa implementação já existir, ela não será sobrescrita.
Criar serviços da Web utilizando o tempo de execução do Apache Axis 1.0 depende dos emissores Java2WSDL e WSDL2Java fornecidos no Axis 1.0. Suporte para document/literal e document/literal (agrupado) é problemático no Axis 1.0, portanto o usuário deve utilizar RPC/encoded ao criar serviços da Web utilizando o tempo de execução do Apache Axis 1.0.
Ao definir o mapeamento personalizado entre pacote e espaço de nomes, o espaço de nomes e pacote padrão errados aparecem na tabela após clicar no botão Add; o usuário deve sobrescrever esses padrões e inserir seu próprio mapeamento de espaço de nomes e pacote.
Ao gerar esqueletos de serviço da Web ou proxies a partir do WSDL que utiliza o mesmo nome para um de seus elementos <service> e <port>, não utilize JSPs de amostra como o Test Client. Os JSPs de amostra gerados contêm erros e não serão compilados. Qualquer tentativa de executar os JSPs de amostra no servidor resultarão em um ERROR 500 no navegador indicando que os JSPs de amostra não podem ser carregados, e exceções no console do servidor indicando que o contêiner do servlet não foi capaz de compilar os JSPs de amostra.
Ao executar a ferramenta de linha de comandos no Windows em alemão, determinados caracteres aparecem como "?" na saída do prompt de comandos. Esse caractere provavelmente é um Umlaut alemão.
O assistente Web Service creation poderá falhar durante a geração do WSDL se o nome do host "localhost" não estiver definido no computador. O UTC também poderá não conseguir ser ativado com êxito se "localhost" não estiver definido.
No Windows, a seguinte entrada deverá estar presente no arquivo [INSTALL-DRIVE]\WINNT\system32\drivers\etc\hosts:
127.0.0.1 localhost
No Linux, a seguinte entrada deverá estar presente no arquivo /etc/hosts:
127.0.0.1 localhost
O tempo de execução do IBM SOAP deve ser utilizado principalmente por razões de compatibilidade reversa. É altamente recomendado que você utilize o assistente Web Services com o tempo de execução do IBM WebSphere 5.0.2 para todos os propósitos de produção. Ao utilizar o assistente para Serviços da Web com o tempo de execução do IBM SOAP, o usuário pode se deparar com as seguintes limitações permanentes:
- Gerando um Documento WSDL a partir de um Bean Java
- Os char e java.lang.Character exigem que a entrada de mapeamentos personalizados uma vez que os mapeamentos padrão de char ou java.lang.Character para WSDL XSD não existem.
- Os tipos de wrapper primitivos, java.lang.Boolean, java.lang.Byte, java.lang.Short, java.lang.Integer, java.lang.Long, java.lang.Float e java.lang.Double, não podem coexistir com seus tipos primitivos individuais correspondentes boolean, byte, short, int, long, float e double, em todos os parâmetros de entrada de um bean de serviço. Por exemplo, um bean de serviço no qual java.lang.Integer e int aparecem em qualquer lugar como tipos de parâmetros de entrada não pode ser transformado em um serviço da Web completo. Quando é feita uma tentativa de utilizar o assistente Web Service para criar um serviço da Web a partir desse tipo de bean de serviço, ocorrerá uma mensagem de aviso, a menos que os métodos que contêm os tipos primitivos ou tipos de wrapper não sejam selecionados na Página Web Service Java Bean Methods do assistente. No entanto, é preciso verificar se esses métodos não são selecionados a primeira vez em que a página Web Service Java Bean Methods é encontrada. Voltar a essa página e eliminar os métodos com problemas após ter visto o aviso poderá gerar um serviço da Web incompleto. Nesse caso, o assistente deverá ser reiniciado para que as seleções de método apropriadas possam ser feitas na primeira vez em que a página Web Service Java Bean Methods for encontrada.
- Matrizes Multidimensionais não são suportadas. Uma alternativa no Java é inserir beans Java entre as dimensões. Por exemplo, em vez de MyType[][], o padrão MyArray[] em que MyArray tem uma propriedade do tipo MyType[] servirá.
- Um método com uma lista de argumentos de entrada contendo uma mistura do elemento DOM e tipos de bean simples requer a entrada de um ou mais mapeamentos personalizados. A especificação Web Services Definition Language (WSDL) Versão 1.1 suporta o estilo de codificação para todas as partes de entrada (parâmetros). O tempo de execução do SOAP (Simple Object Access Protocol) Versão 2.2 não tem suporte ao mapeamento padrão para o Elemento DOM com codificação SOAP para tipos primitivos e beans com codificação Literal XML.
- Ao configurar um mapeamento personalizado, se você tentar utilizar a classe serializer ou deserializer a partir do tempo de execução SOAP (isto é, classes do pacote org.apache.soap.encoding.soapenc) e receber o erro "the selected serializer/deserializer class cannot be loaded from this project", então é provável que soap.jar não esteja no caminho de construção de seu projeto da Web. Para corrigir o problema, cancele o assistente, utilize o diálogo de propriedades do projeto da Web para adicionar WS_installdir\wstools\eclipse\plugins\com.ibm.etools.webservice\runtime\soap.jar ao caminho de construção do projeto da Web e, em seguida, repita o assistente para serviços da Web.
- O mapeamento personalizado não é suportado para tipos complexos aninhados. Embora os tipos aninhados irão aparecer na página de mapeamento do assistente, os mapeamentos personalizados para esses tipos serão ignorados.
- Ao criar um serviço da Web a partir de uma classe Java cuja interface contenha um tipo de Java abstrato, a página Web service Java to XML Mappings poderá definir incorretamente o campo Deserializer do tipo abstrato como org.apache.soap.encoding.soapenc.BeanSerializer. Esse procedimento falhará em tempo de execução, pois o código deserializer na classe BeanSerializer não poderá construir uma instância do tipo abstrato. Para evitar isso, escolha a opção Custom mapping para o tipo, se necessário e altere o campo deserializer para o nome de uma classe gravada para cancelar a seriação do tipo abstrato.
- As ferramentas de serviços da Web não suportam atualmente a criação de serviços da Web a partir de Beans Java que contenham classes internas aninhadas (isto é, classes internas definidas em uma classe de nível máximo). Para resolver esse problema, você deve mover as classes internas para as classes de nível máximo em arquivos Java separados.
- Ao criar um Serviço da Web a partir de um bean Java que utiliza outros Beans Java com propriedades de tipo Vector, Hashtable ou Map, o XSD será gerado com complexTypes contendo os tipos "Vector" e "Map" do espaço de nomes "http://xml.apache.org/xml-soap". Como não existe atualmente nenhum esquema para esse espaço de nomes, o XSD Validator produzirá erros e avisos como os seguintes:
Esses erros e avisos não interferirão com o processamento correto do WSDL e do XSD pelos assistentes Web Services. Os tipos "Map" e "Vector" serão mapeados corretamente para seus correlativos Java. Observe que outros fornecedores poderão ter dificuldades ao processarem WSDL ou XSD que contenham esses tipos porque http://xml.apache.org/xml-soap não é um espaço de nomes identificado pelas especificações WSDL 1.1 ou SOAP 1.1. Para melhorar a interoperabilidade, considere adaptar as classes de coleção Java para matrizes e beans e, em seguida, construir Serviços da Web a partir dos adaptadores.
- Error src-resolve: Cannot resolve the name 'xsd2:Vector' to a(n) type definition component.
- Warning src-import.0: Failed to read imported schema document 'null'.
- Gerando Artefatos Java a Partir de um Documento WSDL
- O suporte é limitado a uma parte por elemento de entrada ousaída. Não há suporte para múltiplas partes lógicas em uma mensagem de entrada ou saída. A primeira de tais partes será processada e as outras remanescentes serão ignoradas.
- Ao gerar esqueletos ou proxies de serviço da Web a partir do WSDL que utiliza o tipo base64Binary do espaço de nomes xsd (http://www.w3.org/2001/XMLSchema), o tempo de execução do serviço da Web realmente utilizará o xsi:type base64 do espaço de nomes soapenc (http://schemas.xmlsoap.org/soap/encoding/). Geralmente, os dois tipos são livremente intercambiáveis. No entanto, é possível que a diferença entre o tipo na mensagem e o tipo no esquema façam com que alguns tempos de execução de protocolo SOAP rejeitem a mensagem. Se isso ocorrer, você pode criar manualmente um serializer semelhante ao Base64Serializer SOAP da Apache, escrevendo xsd:base64binary no lugar de soapenc:base64.
- Os esqueletos do Java bean não serão compilados se forem criados a partir de documentos WSDL que possuem nomes de operações e partes que não sejam identificadores Java válidos. Os nomes de partes e operações do WSDL devem ser identificadores Java válidos para a criação bem-sucedida de um esqueleto de Java bean.
- Os assistentes para serviços da Web utilizam URIs "http" por padrão quando geram o WSDL, no entanto, alguns documentos WSDL de outras ferramentas poderão implementar ocasionalmente URIs de serviços da Web, de Ação SOAP ou de Espaço de Nome de Destino que implementem esquemas diferentes de "http", como "urn". Ao gerar proxies ou esqueletos a partir do WSDL que contêm URIs não-http, os assistentes para serviços da Web podem mapear os URIs para o pacote Java "com.example" em vez de um pacote mais significativo. Em alguns casos, os assistentes para serviços da Web podem falhar em tratar tais URIs completamente e produzir o erro "IWAB0234E An internal error occured."
- Ao gerar proxies e estruturas Java a partir do WSDL, agora você tem a opção de mapear os tipos intrínsecos XSD boolean, byte, short, int, long, float e double para os tipos wrapper "java.lang" (por ex., java.lang.Integer) em vez de para as primitivas Java (por ex., int). Por padrão, os assistentes para serviços da Web mapeiam para as primitivas Java. Para que, em vez disso, os assistentes mapeiem para classes wrapper "java.lang", abra Windows -> Preferences -> Web Services -> Code Generation e marque "Map simple XML data types to java.lang wrapper classes".
- Ao especificar um mapeamento personalizado de um tipo Java para um tipo XSD ao criar um serviço da Web a partir de um bean Java ou EJB, o campo "Bean class" é definido automaticamente como o nome completo do tipo Java e não pode ser editado. Ao especificar um mapeamento personalizado de uma matriz Java, o nome da classe Bean estará no formulário da matriz, por exemplo, "java.lang.String[]" e será emitido como tal nos arquivos do descritor de implementação ".isd" e "dds.xml". Essa forma de nome de classe não é processada corretamente pelo tempo de execução SOAP e resultará em um erro semelhante ao seguinte:
Deployment error in SOAP service http://tempuri.org/webservice.AddressBook: class name java.lang.String[] could not be resolved: java.lang.String[]
Como resultado, não será possível especificar um mapeamento personalizado para o serializador de uma matriz Java no lado de serviço. Uma solução alternativa parcial é deixar o campo da classe Serializer vazio para o mapeamento personalizado. Isso suprimirá a geração do nome da classe da matriz no descritor de implementação e permitirá que o serviço funcione. Observe que a classe Deserializer e a capacidade de especificar um mapeamento personalizado para o desserializador não serão afetadas por esse problema e solução alternativa.
- Considerações Sobre Tempo de Execução
- Se você selecionar a preferência de geração de código de serviços da Web "Enable element-based mapping" e tiver selecionado para implementar em um WebSphere Application Server V4, a seguinte entrada poderá ser recebida no arquivo ISD e no dds.xml:
<isd:map
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:x=""
qname="x:some-name"
xml2JavaClassName="some-serializer"/>O editor XML pode sinalizar o seguinte erro:
The value of the attribute "xmlns:x" is invalid. Prefixed namespace bindings may not be empty.
Isso é inofensivo para o WebSphere Application Server V4. No entanto, não tente implementar esse dds.xml para outro servidor que utilize Xerces 2.x (XML4J 4.x) ou superior, como o WebSphere Application Server V5. Caso contrário, você obterá um erro de análise de Xerces similar quando o servidor carregar o arquivo dds.xml. Você deverá gerar novamente o dds.xml, passando pelo cenário de serviços da Web e selecionando o tipo de servidor correto. Isso gerará o dds.xml correto para o tipo de servidor.
Além disso, você receberia um erro de análise de comando do Xerces semelhante ao tentar implementar o serviço da Web a partir desse arquivo ISD. A solução alternativa é editar manualmente o arquivo para o seguinte formato:
<isd:map
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
qname="some-name"
xml2JavaClassName="some-serializer"/>
- Ao chamar um serviço da Web criado a partir de um Java bean ou EJB, se você receber o seguinte SOAPException com um targetException:
"java.lang.IllegalArgumentException: Unable to instantiate ..."
pode ser que o método exposto como um serviço da Web contenha um Java bean sem um construtor padrão público como um parâmetro e/ou tipo de retorno. Um construtor público padrão é requerido para o tempo de execução de SOAP para construir o objeto como parte do processo de deserialização.- Os arquivos de segurança, cl-ver-config.xml e sv-ver-config.xml, implementados atualmente no projeto da Web são os arquivos do WebSphere versão 4.0 e não correspondem precisamente aos DTDs. Mas os arquivos funcionarão no WebSphere versão 4.0 e WebSphere versão 5.0, apesar dos erros de validação indicando que o "xmlns:ds" ou "xmlns:SOAP-SEC" deve ser declarado.
- Se o Server Configuration for aberto em um editor, o assistente Web service poderá falhar ao iniciar o servidor porque o projeto Web Service da Web não foi adicionado ao Server Configuration. Fechar o editor Server Configuration resolverá o problema.
- Serviços ISD da Web
- Depois de preencher um mapeamento personalizado ao criar serviços Java ou EJB da Web, as informações de mapeamento personalizado, exceto o URL de Localização do XSD, são armazenadas no arquivo ISD. As informações são recuperadas ao criar serviços da Web a partir desse arquivo ISD. Portanto, ao criar serviços da Web a partir de um arquivo ISD, na página Web Service Java to XML Mappings do assistente, é preciso preencher o URL de localização de XSD manualmente.
Se você o serviço da Web a partir de um bean Java ou EJB escolhendo o IBM SOAP para o tempo de execução do serviço e o Apache Axis 1.0 como o tempo de execução do cliente, você poderá obter o erro:
WSDL Not found
Para evitar o problema, crie o serviço da Web primeiro sem escolher gerar um proxy. Em seguida, crie um cliente de serviço da Web a partir do arquivo WSDL gerado.
No assistente Web Service Client, se o usuário clicar em Finish na página Client Environment Configuration, ele obterá o erro:
"null" is not resolvable
A solução alternativa é clicar em Next nessa página e na seguinte e, em seguida, clicar em Finish.
Nas folhas de dicas Create, test and validate a WS-I compliant Web Service e Create a Web Service from a WSDL file, se estiver utilizando o arquivo HelloService.wsdl a partir de wsad_install/wstools/eclipse/plugins/com.ibm.etools.cs.wsdl.content_5.1/examples, modifique a localização da porta de serviço de acordo com o diferente tempo de execução, conforme segue:
Para IBM SOAP:
location="http://localhost:9080/HelloWorldSample/servlet/rpcrouter"
Para tempo de execução do Apache Axis ou WebSphere 5.0.2
location="http://localhost:9080/HelloWorldSample/services/Hello_Port"
Se estiver importando seu próprio arquivo wsdl, assegure que a localização esteja definida adequadamente de acordo com o tempo de execução selecionado, conforme mencionado acima.
Retornar para o Arquivo Leia-me Principal
(C) Copyright IBM Corporation 2000, 2003. Todos os Direitos Reservados.